You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

block.go 2.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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.Error(http.StatusInternalServerError, "FindBlockings", err)
  21. return
  22. }
  23. if err := user_model.BlockingList(blocks).LoadAttributes(ctx); err != nil {
  24. ctx.Error(http.StatusInternalServerError, "LoadAttributes", 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.Params("username"))
  36. if err != nil {
  37. ctx.NotFound("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.Error(http.StatusInternalServerError, "GetBlocking", 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.Params("username"))
  53. if err != nil {
  54. ctx.NotFound("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.Error(http.StatusBadRequest, "BlockUser", err)
  60. } else {
  61. ctx.Error(http.StatusInternalServerError, "BlockUser", 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.Params("username"))
  69. if err != nil {
  70. ctx.NotFound("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.Error(http.StatusBadRequest, "UnblockUser", err)
  76. } else {
  77. ctx.Error(http.StatusInternalServerError, "UnblockUser", err)
  78. }
  79. return
  80. }
  81. ctx.Status(http.StatusNoContent)
  82. }