gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package admin
  4. import (
  5. "net/http"
  6. user_model "code.gitea.io/gitea/models/user"
  7. api "code.gitea.io/gitea/modules/structs"
  8. "code.gitea.io/gitea/modules/web"
  9. "code.gitea.io/gitea/services/context"
  10. )
  11. // ListUserBadges lists all badges belonging to a user
  12. func ListUserBadges(ctx *context.APIContext) {
  13. // swagger:operation GET /admin/users/{username}/badges admin adminListUserBadges
  14. // ---
  15. // summary: List a user's badges
  16. // produces:
  17. // - application/json
  18. // parameters:
  19. // - name: username
  20. // in: path
  21. // description: username of the user whose badges are to be listed
  22. // type: string
  23. // required: true
  24. // responses:
  25. // "200":
  26. // "$ref": "#/responses/BadgeList"
  27. // "404":
  28. // "$ref": "#/responses/notFound"
  29. badges, maxResults, err := user_model.GetUserBadges(ctx, ctx.ContextUser)
  30. if err != nil {
  31. ctx.APIErrorInternal(err)
  32. return
  33. }
  34. ctx.SetTotalCountHeader(maxResults)
  35. ctx.JSON(http.StatusOK, &badges)
  36. }
  37. // AddUserBadges add badges to a user
  38. func AddUserBadges(ctx *context.APIContext) {
  39. // swagger:operation POST /admin/users/{username}/badges admin adminAddUserBadges
  40. // ---
  41. // summary: Add a badge to a user
  42. // consumes:
  43. // - application/json
  44. // produces:
  45. // - application/json
  46. // parameters:
  47. // - name: username
  48. // in: path
  49. // description: username of the user to whom a badge is to be added
  50. // type: string
  51. // required: true
  52. // - name: body
  53. // in: body
  54. // schema:
  55. // "$ref": "#/definitions/UserBadgeOption"
  56. // responses:
  57. // "204":
  58. // "$ref": "#/responses/empty"
  59. // "403":
  60. // "$ref": "#/responses/forbidden"
  61. form := web.GetForm(ctx).(*api.UserBadgeOption)
  62. badges := prepareBadgesForReplaceOrAdd(*form)
  63. if err := user_model.AddUserBadges(ctx, ctx.ContextUser, badges); err != nil {
  64. ctx.APIErrorInternal(err)
  65. return
  66. }
  67. ctx.Status(http.StatusNoContent)
  68. }
  69. // DeleteUserBadges delete a badge from a user
  70. func DeleteUserBadges(ctx *context.APIContext) {
  71. // swagger:operation DELETE /admin/users/{username}/badges admin adminDeleteUserBadges
  72. // ---
  73. // summary: Remove a badge from a user
  74. // produces:
  75. // - application/json
  76. // parameters:
  77. // - name: username
  78. // in: path
  79. // description: username of the user whose badge is to be deleted
  80. // type: string
  81. // required: true
  82. // - name: body
  83. // in: body
  84. // schema:
  85. // "$ref": "#/definitions/UserBadgeOption"
  86. // responses:
  87. // "204":
  88. // "$ref": "#/responses/empty"
  89. // "403":
  90. // "$ref": "#/responses/forbidden"
  91. // "422":
  92. // "$ref": "#/responses/validationError"
  93. form := web.GetForm(ctx).(*api.UserBadgeOption)
  94. badges := prepareBadgesForReplaceOrAdd(*form)
  95. if err := user_model.RemoveUserBadges(ctx, ctx.ContextUser, badges); err != nil {
  96. ctx.APIErrorInternal(err)
  97. return
  98. }
  99. ctx.Status(http.StatusNoContent)
  100. }
  101. func prepareBadgesForReplaceOrAdd(form api.UserBadgeOption) []*user_model.Badge {
  102. badges := make([]*user_model.Badge, len(form.BadgeSlugs))
  103. for i, badge := range form.BadgeSlugs {
  104. badges[i] = &user_model.Badge{
  105. Slug: badge,
  106. }
  107. }
  108. return badges
  109. }