gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. // Copyright 2024 The Gitea Authors.
  2. // SPDX-License-Identifier: MIT
  3. package shared
  4. import (
  5. "errors"
  6. "net/http"
  7. user_model "code.gitea.io/gitea/models/user"
  8. api "code.gitea.io/gitea/modules/structs"
  9. "code.gitea.io/gitea/routers/api/v1/utils"
  10. "code.gitea.io/gitea/services/context"
  11. "code.gitea.io/gitea/services/convert"
  12. user_service "code.gitea.io/gitea/services/user"
  13. )
  14. func ListBlocks(ctx *context.APIContext, blocker *user_model.User) {
  15. blocks, total, err := user_model.FindBlockings(ctx, &user_model.FindBlockingOptions{
  16. ListOptions: utils.GetListOptions(ctx),
  17. BlockerID: blocker.ID,
  18. })
  19. if err != nil {
  20. ctx.APIErrorInternal(err)
  21. return
  22. }
  23. if err := user_model.BlockingList(blocks).LoadAttributes(ctx); err != nil {
  24. ctx.APIErrorInternal(err)
  25. return
  26. }
  27. users := make([]*api.User, 0, len(blocks))
  28. for _, b := range blocks {
  29. users = append(users, convert.ToUser(ctx, b.Blockee, blocker))
  30. }
  31. ctx.SetTotalCountHeader(total)
  32. ctx.JSON(http.StatusOK, &users)
  33. }
  34. func CheckUserBlock(ctx *context.APIContext, blocker *user_model.User) {
  35. blockee, err := user_model.GetUserByName(ctx, ctx.PathParam("username"))
  36. if err != nil {
  37. ctx.APIErrorNotFound("GetUserByName", err)
  38. return
  39. }
  40. status := http.StatusNotFound
  41. blocking, err := user_model.GetBlocking(ctx, blocker.ID, blockee.ID)
  42. if err != nil {
  43. ctx.APIErrorInternal(err)
  44. return
  45. }
  46. if blocking != nil {
  47. status = http.StatusNoContent
  48. }
  49. ctx.Status(status)
  50. }
  51. func BlockUser(ctx *context.APIContext, blocker *user_model.User) {
  52. blockee, err := user_model.GetUserByName(ctx, ctx.PathParam("username"))
  53. if err != nil {
  54. ctx.APIErrorNotFound("GetUserByName", err)
  55. return
  56. }
  57. if err := user_service.BlockUser(ctx, ctx.Doer, blocker, blockee, ctx.FormString("note")); err != nil {
  58. if errors.Is(err, user_model.ErrCanNotBlock) || errors.Is(err, user_model.ErrBlockOrganization) {
  59. ctx.APIError(http.StatusBadRequest, err)
  60. } else {
  61. ctx.APIErrorInternal(err)
  62. }
  63. return
  64. }
  65. ctx.Status(http.StatusNoContent)
  66. }
  67. func UnblockUser(ctx *context.APIContext, doer, blocker *user_model.User) {
  68. blockee, err := user_model.GetUserByName(ctx, ctx.PathParam("username"))
  69. if err != nil {
  70. ctx.APIErrorNotFound("GetUserByName", err)
  71. return
  72. }
  73. if err := user_service.UnblockUser(ctx, doer, blocker, blockee); err != nil {
  74. if errors.Is(err, user_model.ErrCanNotUnblock) || errors.Is(err, user_model.ErrBlockOrganization) {
  75. ctx.APIError(http.StatusBadRequest, err)
  76. } else {
  77. ctx.APIErrorInternal(err)
  78. }
  79. return
  80. }
  81. ctx.Status(http.StatusNoContent)
  82. }