1package engine 2 3import ( 4 "fmt" 5 6 "github.com/keybase/client/go/libkb" 7 keybase1 "github.com/keybase/client/go/protocol/keybase1" 8) 9 10type UserBlocksSet struct { 11 keybase1.SetUserBlocksArg 12 libkb.Contextified 13 14 uids []keybase1.UID 15} 16 17func NewUserBlocksSet(g *libkb.GlobalContext, args keybase1.SetUserBlocksArg) *UserBlocksSet { 18 return &UserBlocksSet{ 19 SetUserBlocksArg: args, 20 Contextified: libkb.NewContextified(g), 21 } 22} 23 24// Name is the unique engine name. 25func (e *UserBlocksSet) Name() string { 26 return "UserBlocksSet" 27} 28 29// GetPrereqs returns the engine prereqs. 30func (e *UserBlocksSet) Prereqs() Prereqs { 31 return Prereqs{} 32} 33 34// RequiredUIs returns the required UIs. 35func (e *UserBlocksSet) RequiredUIs() []libkb.UIKind { 36 return []libkb.UIKind{} 37} 38 39// SubConsumers returns the other UI consumers for this engine. 40func (e *UserBlocksSet) SubConsumers() []libkb.UIConsumer { 41 return nil 42} 43 44// Run starts the engine. 45func (e *UserBlocksSet) Run(mctx libkb.MetaContext) (err error) { 46 defer mctx.Trace( 47 fmt.Sprintf("UserBlocksSet#Run(len=%d)", len(e.Blocks)), 48 &err)() 49 50 type setBlockArg struct { 51 BlockUID string `json:"block_uid"` 52 Chat *bool `json:"chat,omitempty"` 53 Follow *bool `json:"follow,omitempty"` 54 } 55 56 for _, block := range e.Blocks { 57 mctx.Debug("SetUserBlocks: adding block: %+v", block) 58 } 59 payloadBlocks := make([]setBlockArg, len(e.Blocks)) 60 e.uids = make([]keybase1.UID, len(e.Blocks)) 61 for i, v := range e.Blocks { 62 uid := libkb.GetUIDByUsername(mctx.G(), v.Username) 63 payloadBlocks[i] = setBlockArg{ 64 BlockUID: uid.String(), 65 Chat: v.SetChatBlock, 66 Follow: v.SetFollowBlock, 67 } 68 e.uids[i] = uid 69 } 70 71 payload := make(libkb.JSONPayload) 72 payload["blocks"] = payloadBlocks 73 74 apiArg := libkb.APIArg{ 75 Endpoint: "user/set_blocks", 76 JSONPayload: payload, 77 SessionType: libkb.APISessionTypeREQUIRED, 78 } 79 80 _, err = mctx.G().API.Post(mctx, apiArg) 81 return err 82} 83 84func (e *UserBlocksSet) UIDs() []keybase1.UID { 85 return e.uids 86} 87