github.com/keybase/client/go@v0.0.0-20240520164431-4f512a4c85a3/client/cmd_follow.go (about) 1 // Copyright 2015 Keybase, Inc. All rights reserved. Use of 2 // this source code is governed by the included BSD license. 3 4 package client 5 6 import ( 7 "fmt" 8 9 "golang.org/x/net/context" 10 11 "github.com/keybase/cli" 12 "github.com/keybase/client/go/libcmdline" 13 "github.com/keybase/client/go/libkb" 14 keybase1 "github.com/keybase/client/go/protocol/keybase1" 15 "github.com/keybase/go-framed-msgpack-rpc/rpc" 16 ) 17 18 type CmdTrack struct { 19 user string 20 skipProofCache bool 21 options keybase1.TrackOptions 22 libkb.Contextified 23 } 24 25 func NewCmdTrack(cl *libcmdline.CommandLine, g *libkb.GlobalContext) cli.Command { 26 return cli.Command{ 27 Name: "follow", 28 ArgumentHelp: "<username>", 29 Usage: "Verify a user's authenticity and optionally follow them", 30 Flags: []cli.Flag{ 31 cli.BoolFlag{ 32 Name: "local, l", 33 Usage: "Only follow locally, don't send a public statement to the server.", 34 }, 35 cli.BoolFlag{ 36 Name: "y", 37 Usage: "Approve remote following without prompting.", 38 }, 39 cli.BoolFlag{ 40 Name: "s, skip-proof-cache", 41 Usage: "Skip cached proofs, force re-check", 42 }, 43 }, 44 Aliases: []string{"track"}, 45 Action: func(c *cli.Context) { 46 cl.ChooseCommand(NewCmdTrackRunner(g), "follow", c) 47 }, 48 } 49 } 50 51 func NewCmdTrackRunner(g *libkb.GlobalContext) *CmdTrack { 52 return &CmdTrack{Contextified: libkb.NewContextified(g)} 53 } 54 55 func (v *CmdTrack) SetUser(user string) { 56 v.user = user 57 } 58 59 func (v *CmdTrack) SetOptions(options keybase1.TrackOptions) { 60 v.options = options 61 } 62 63 func (v *CmdTrack) ParseArgv(ctx *cli.Context) error { 64 if len(ctx.Args()) != 1 { 65 return fmt.Errorf("Follow only takes one argument, the user to follow.") 66 } 67 v.user = ctx.Args()[0] 68 v.options = keybase1.TrackOptions{LocalOnly: ctx.Bool("local"), BypassConfirm: ctx.Bool("y")} 69 v.skipProofCache = ctx.Bool("skip-proof-cache") 70 return nil 71 } 72 73 func (v *CmdTrack) Run() error { 74 cli, err := GetTrackClient(v.G()) 75 if err != nil { 76 return err 77 } 78 79 protocols := []rpc.Protocol{ 80 NewIdentifyTrackUIProtocol(v.G()), 81 NewSecretUIProtocol(v.G()), 82 } 83 if err = RegisterProtocolsWithContext(protocols, v.G()); err != nil { 84 return err 85 } 86 87 _, err = cli.Track(context.TODO(), keybase1.TrackArg{ 88 UserAssertion: v.user, 89 Options: v.options, 90 ForceRemoteCheck: v.skipProofCache, 91 }) 92 return err 93 } 94 95 func (v *CmdTrack) GetUsage() libkb.Usage { 96 return libkb.Usage{ 97 Config: true, 98 API: true, 99 KbKeyring: true, 100 } 101 }