github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/engine/user_blocks_get.go (about) 1 package engine 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/keybase/client/go/libkb" 8 keybase1 "github.com/keybase/client/go/protocol/keybase1" 9 ) 10 11 type UserBlocksGet struct { 12 keybase1.GetUserBlocksArg 13 libkb.Contextified 14 15 blocks []keybase1.UserBlock 16 } 17 18 func NewUserBlocksGet(g *libkb.GlobalContext, args keybase1.GetUserBlocksArg) *UserBlocksGet { 19 return &UserBlocksGet{ 20 GetUserBlocksArg: args, 21 Contextified: libkb.NewContextified(g), 22 } 23 } 24 25 // Name is the unique engine name. 26 func (e *UserBlocksGet) Name() string { 27 return "UserBlocksGet" 28 } 29 30 // GetPrereqs returns the engine prereqs. 31 func (e *UserBlocksGet) Prereqs() Prereqs { 32 return Prereqs{} 33 } 34 35 // RequiredUIs returns the required UIs. 36 func (e *UserBlocksGet) RequiredUIs() []libkb.UIKind { 37 return []libkb.UIKind{} 38 } 39 40 // SubConsumers returns the other UI consumers for this engine. 41 func (e *UserBlocksGet) SubConsumers() []libkb.UIConsumer { 42 return nil 43 } 44 45 // Run starts the engine. 46 func (e *UserBlocksGet) Run(mctx libkb.MetaContext) (err error) { 47 var usernameLog string 48 if len(e.Usernames) < 5 { 49 usernameLog = strings.Join(e.Usernames, ",") 50 } else { 51 usernameLog = fmt.Sprintf("%s... %d total", strings.Join(e.Usernames[:5], ","), len(e.Usernames)) 52 } 53 defer mctx.Trace( 54 fmt.Sprintf("UserBlocksGet#Run(%s)", usernameLog), 55 &err)() 56 57 httpArgs := libkb.HTTPArgs{} 58 if len(e.Usernames) > 0 { 59 uids := make([]keybase1.UID, len(e.Usernames)) 60 for i, v := range e.Usernames { 61 uids[i] = libkb.GetUIDByUsername(e.G(), v) 62 } 63 httpArgs["uids"] = libkb.S{Val: libkb.UidsToString(uids)} 64 } 65 66 apiArg := libkb.APIArg{ 67 Endpoint: "user/get_blocks", 68 Args: httpArgs, 69 SessionType: libkb.APISessionTypeREQUIRED, 70 } 71 72 type getBlockResult struct { 73 libkb.AppStatusEmbed 74 Blocks []struct { 75 BlockUID keybase1.UID `json:"block_uid"` 76 BlockUsername string `json:"block_username"` 77 CTime *keybase1.Time `json:"ctime,omitempty"` 78 MTime *keybase1.Time `json:"mtime,omitempty"` 79 Chat bool `json:"chat"` 80 Follow bool `json:"follow"` 81 } `json:"blocks"` 82 } 83 84 var apiRes getBlockResult 85 86 err = mctx.G().API.GetDecode(mctx, apiArg, &apiRes) 87 if err != nil { 88 return err 89 } 90 91 e.blocks = make([]keybase1.UserBlock, len(apiRes.Blocks)) 92 for i, v := range apiRes.Blocks { 93 if err := libkb.AssertUsernameMatchesUID(e.G(), v.BlockUID, v.BlockUsername); err != nil { 94 return err 95 } 96 e.blocks[i] = keybase1.UserBlock{ 97 Username: v.BlockUsername, 98 ChatBlocked: v.Chat, 99 FollowBlocked: v.Follow, 100 CreateTime: v.CTime, 101 ModifyTime: v.MTime, 102 } 103 } 104 105 return nil 106 } 107 108 func (e *UserBlocksGet) Blocks() []keybase1.UserBlock { 109 return e.blocks 110 }