github.com/vmware/govmomi@v0.51.0/cli/sso/idp/ls.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 idp 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 "io" 12 "strings" 13 "text/tabwriter" 14 15 "github.com/vmware/govmomi/cli" 16 "github.com/vmware/govmomi/cli/flags" 17 "github.com/vmware/govmomi/cli/sso" 18 "github.com/vmware/govmomi/ssoadmin" 19 "github.com/vmware/govmomi/ssoadmin/types" 20 ) 21 22 type ls struct { 23 *flags.ClientFlag 24 *flags.OutputFlag 25 } 26 27 func init() { 28 cli.Register("sso.idp.ls", &ls{}) 29 } 30 31 func (cmd *ls) Register(ctx context.Context, f *flag.FlagSet) { 32 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 33 cmd.ClientFlag.Register(ctx, f) 34 35 cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx) 36 cmd.OutputFlag.Register(ctx, f) 37 } 38 39 func (cmd *ls) Description() string { 40 return `List SSO identity provider sources. 41 42 Examples: 43 govc sso.idp.ls 44 govc sso.idp.ls -json` 45 } 46 47 func (cmd *ls) Process(ctx context.Context) error { 48 if err := cmd.ClientFlag.Process(ctx); err != nil { 49 return err 50 } 51 return cmd.OutputFlag.Process(ctx) 52 } 53 54 type idpInfo struct { 55 IdentitySources *types.IdentitySources 56 } 57 58 func (r *idpInfo) Write(w io.Writer) error { 59 tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0) 60 61 type entry struct { 62 name string 63 url string 64 kind string 65 domain string 66 alias string 67 } 68 69 var entries []entry 70 71 for _, domain := range r.IdentitySources.System.Domains { 72 entries = append(entries, entry{"-", "-", "System Domain", domain.Name, domain.Alias}) 73 } 74 75 if r.IdentitySources.LocalOS != nil { 76 for _, domain := range r.IdentitySources.LocalOS.Domains { 77 entries = append(entries, entry{"-", "-", "Local OS", domain.Name, domain.Alias}) 78 } 79 } 80 81 if ad := r.IdentitySources.NativeAD; ad != nil { 82 for _, domain := range ad.Domains { 83 entries = append(entries, entry{ad.Name, "-", "Active Directory", domain.Name, domain.Alias}) 84 } 85 } 86 87 for _, ldap := range r.IdentitySources.LDAPS { 88 for _, domain := range ldap.Domains { 89 entries = append(entries, entry{ldap.Name, ldap.Details.PrimaryURL, ldap.Type, domain.Name, domain.Alias}) 90 } 91 } 92 93 fmt.Fprintln(tw, "Name\tServer URL\tType\tDomain\tAlias") 94 95 for _, e := range entries { 96 fmt.Fprintf(tw, "%s\t%s\t%s\t%s\t%s\n", e.name, e.url, e.kind, strings.ToLower(e.domain), e.alias) 97 } 98 99 return tw.Flush() 100 } 101 102 func (cmd *ls) Run(ctx context.Context, f *flag.FlagSet) error { 103 return sso.WithClient(ctx, cmd.ClientFlag, func(c *ssoadmin.Client) error { 104 sources, err := c.IdentitySources(ctx) 105 if err != nil { 106 return err 107 } 108 109 return cmd.WriteResult(&idpInfo{sources}) 110 }) 111 }