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