github.com/keybase/client/go@v0.0.0-20240520164431-4f512a4c85a3/client/cmd_team_edit_member.go (about)

     1  // Copyright 2017 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  	"context"
     8  
     9  	"github.com/keybase/cli"
    10  	"github.com/keybase/client/go/libcmdline"
    11  	"github.com/keybase/client/go/libkb"
    12  	"github.com/keybase/client/go/protocol/chat1"
    13  	"github.com/keybase/client/go/protocol/keybase1"
    14  )
    15  
    16  type CmdTeamEditMember struct {
    17  	libkb.Contextified
    18  	Team        string
    19  	Username    string
    20  	Role        keybase1.TeamRole
    21  	BotSettings *keybase1.TeamBotSettings
    22  }
    23  
    24  func newCmdTeamEditMember(cl *libcmdline.CommandLine, g *libkb.GlobalContext) cli.Command {
    25  	cmd := cli.Command{
    26  		Name:         "edit-member",
    27  		ArgumentHelp: "<team name> --user=<username> --role=<owner|admin|writer|reader|bot|restrictedbot>",
    28  		Usage:        "Change a user's role on a team.",
    29  		Action: func(c *cli.Context) {
    30  			cmd := &CmdTeamEditMember{Contextified: libkb.NewContextified(g)}
    31  			cl.ChooseCommand(cmd, "edit-member", c)
    32  		},
    33  		Flags: []cli.Flag{
    34  			cli.StringFlag{
    35  				Name:  "u, user",
    36  				Usage: "username",
    37  			},
    38  			cli.StringFlag{
    39  				Name:  "r, role",
    40  				Usage: "team role (owner, admin, writer, reader, bot, restrictedbot)",
    41  			},
    42  		},
    43  	}
    44  
    45  	cmd.Flags = append(cmd.Flags, botSettingsFlags...)
    46  	return cmd
    47  }
    48  
    49  func NewCmdTeamEditMemberRunner(g *libkb.GlobalContext) *CmdTeamEditMember {
    50  	return &CmdTeamEditMember{Contextified: libkb.NewContextified(g)}
    51  }
    52  
    53  func (c *CmdTeamEditMember) ParseArgv(ctx *cli.Context) error {
    54  	var err error
    55  	c.Team, err = ParseOneTeamName(ctx)
    56  	if err != nil {
    57  		return err
    58  	}
    59  
    60  	c.Username, c.Role, err = ParseUserAndRole(ctx)
    61  	if err != nil {
    62  		return err
    63  	}
    64  
    65  	if c.Role.IsRestrictedBot() {
    66  		c.BotSettings = ParseBotSettings(ctx)
    67  	}
    68  
    69  	return nil
    70  }
    71  
    72  func (c *CmdTeamEditMember) Run() error {
    73  	cli, err := GetTeamsClient(c.G())
    74  	if err != nil {
    75  		return err
    76  	}
    77  
    78  	if err := ValidateBotSettingsConvs(c.G(), c.Team,
    79  		chat1.ConversationMembersType_TEAM, c.BotSettings); err != nil {
    80  		return err
    81  	}
    82  
    83  	arg := keybase1.TeamEditMemberArg{
    84  		Name:        c.Team,
    85  		Username:    c.Username,
    86  		Role:        c.Role,
    87  		BotSettings: c.BotSettings,
    88  	}
    89  
    90  	if err = cli.TeamEditMember(context.Background(), arg); err != nil {
    91  		return err
    92  	}
    93  
    94  	dui := c.G().UI.GetDumbOutputUI()
    95  	dui.Printf("Success! %s's role in %s is now %s.\n", c.Username, c.Team, c.Role)
    96  
    97  	return nil
    98  }
    99  
   100  func (c *CmdTeamEditMember) GetUsage() libkb.Usage {
   101  	return libkb.Usage{
   102  		Config:    true,
   103  		API:       true,
   104  		KbKeyring: true,
   105  	}
   106  }