github.com/vmware/govmomi@v0.51.0/cli/sso/user/id.go (about) 1 // © Broadcom. All Rights Reserved. 2 // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. 3 // SPDX-License-Identifier: Apache-2.0 4 5 package user 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 "io" 12 "strings" 13 14 "github.com/vmware/govmomi/cli" 15 "github.com/vmware/govmomi/cli/flags" 16 "github.com/vmware/govmomi/cli/sso" 17 "github.com/vmware/govmomi/ssoadmin" 18 "github.com/vmware/govmomi/ssoadmin/types" 19 ) 20 21 type id struct { 22 *flags.ClientFlag 23 *flags.OutputFlag 24 } 25 26 func init() { 27 cli.Register("sso.user.id", &id{}) 28 } 29 30 func (cmd *id) Register(ctx context.Context, f *flag.FlagSet) { 31 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 32 cmd.ClientFlag.Register(ctx, f) 33 34 cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx) 35 cmd.OutputFlag.Register(ctx, f) 36 } 37 38 func (cmd *id) Usage() string { 39 return "NAME" 40 } 41 42 func (cmd *id) Description() string { 43 return `Print SSO user and group IDs. 44 45 Examples: 46 govc sso.user.id 47 govc sso.user.id Administrator 48 govc sso.user.id -json Administrator` 49 } 50 51 func (cmd *id) Process(ctx context.Context) error { 52 if err := cmd.ClientFlag.Process(ctx); err != nil { 53 return err 54 } 55 return cmd.OutputFlag.Process(ctx) 56 } 57 58 type userID struct { 59 User *types.AdminUser 60 Group []types.PrincipalId 61 } 62 63 func (r *userID) Write(w io.Writer) error { 64 var groups []string 65 for _, g := range r.Group { 66 groups = append(groups, g.Name) 67 } 68 fmt.Fprintf(w, "%s=%s@%s groups=%s\n", r.User.Kind, r.User.Id.Name, r.User.Id.Domain, strings.Join(groups, ",")) 69 return nil 70 } 71 72 func (r *userID) Dump() any { 73 return struct { 74 User *types.AdminUser 75 Group []types.PrincipalId 76 }{r.User, r.Group} 77 } 78 79 func (cmd *id) Run(ctx context.Context, f *flag.FlagSet) error { 80 arg := f.Arg(0) 81 if arg == "" { 82 arg = cmd.Session.URL.User.Username() 83 } 84 85 return sso.WithClient(ctx, cmd.ClientFlag, func(c *ssoadmin.Client) error { 86 var err error 87 var u userID 88 89 if u.User, err = c.FindUser(ctx, arg); err != nil { 90 return err 91 } 92 if u.User == nil { 93 return fmt.Errorf("%q: no such user", arg) 94 } 95 96 if u.Group, err = c.FindParentGroups(ctx, u.User.Id); err != nil { 97 return err 98 } 99 100 return cmd.WriteResult(&u) 101 }) 102 }