github.com/vmware/govmomi@v0.51.0/cli/sso/idp/ldap_update.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 "reflect" 11 12 "github.com/vmware/govmomi/cli" 13 "github.com/vmware/govmomi/cli/flags" 14 "github.com/vmware/govmomi/cli/sso" 15 "github.com/vmware/govmomi/ssoadmin" 16 "github.com/vmware/govmomi/ssoadmin/types" 17 ) 18 19 type ldapUpdate struct { 20 *flags.ClientFlag 21 serverType string 22 alias string 23 idpDetails types.LdapIdentitySourceDetails 24 auth types.SsoAdminIdentitySourceManagementServiceAuthenticationCredentails 25 } 26 27 func (cmd *ldapUpdate) Usage() string { 28 return "NAME" 29 } 30 31 func (cmd *ldapUpdate) Register(ctx context.Context, f *flag.FlagSet) { 32 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 33 cmd.ClientFlag.Register(ctx, f) 34 35 f.StringVar(&cmd.serverType, "ServerType", "ActiveDirectory", "ServerType") 36 f.StringVar(&cmd.alias, "DomainAlias", "", "DomainAlias") 37 f.StringVar(&cmd.idpDetails.FriendlyName, "FriendlyName", "", "FriendlyName") 38 f.StringVar(&cmd.idpDetails.UserBaseDn, "UserBaseDn", "", "UserBaseDn") 39 f.StringVar(&cmd.idpDetails.GroupBaseDn, "GroupBaseDn", "", "GroupBaseDn") 40 f.StringVar(&cmd.idpDetails.PrimaryURL, "PrimaryUrl", "", "PrimaryUrl") 41 f.StringVar(&cmd.idpDetails.FailoverURL, "FailoverUrl", "", "FailoverUrl") 42 f.StringVar(&cmd.auth.Username, "AuthUsername", "", "Username") 43 f.StringVar(&cmd.auth.Password, "AuthPassword", "", "Password") 44 } 45 46 type lidpupd struct { 47 ldapUpdate 48 } 49 50 func init() { 51 cli.Register("sso.idp.ldap.update", &lidpupd{}) 52 } 53 54 func (cmd *lidpupd) Description() string { 55 return `Update SSO ldap identity provider source. 56 57 Examples: 58 govc sso.idp.ldap.update -FriendlyName CORPLOCAL corp.local` 59 } 60 61 func smerge(src *string, current string) { 62 if *src == "" { 63 *src = current 64 } 65 } 66 67 func (cmd *lidpupd) Run(ctx context.Context, f *flag.FlagSet) error { 68 if f.NArg() != 1 { 69 return flag.ErrHelp 70 } 71 idpname := f.Arg(0) 72 return sso.WithClient(ctx, cmd.ClientFlag, func(c *ssoadmin.Client) error { 73 sources, err := c.IdentitySources(ctx) 74 if err != nil { 75 return err 76 } 77 78 GetLdapIdentitySourceByName := func(i []types.LdapIdentitySource, name string) *types.LdapIdentitySource { 79 var n []types.LdapIdentitySource 80 for _, e := range i { 81 if e.Name == name { 82 n = append(n, e) 83 } 84 } 85 if len(n) != 1 { 86 return nil 87 } 88 return &n[0] 89 } 90 91 currentidp := GetLdapIdentitySourceByName(sources.LDAPS, idpname) 92 if currentidp == nil { 93 return c.RegisterLdap(ctx, cmd.serverType, idpname, cmd.alias, cmd.idpDetails, cmd.auth) 94 } 95 96 if cmd.auth.Username != "" && cmd.auth.Password != "" { 97 updateLdapAuthnErr := c.UpdateLdapAuthnType(ctx, idpname, cmd.auth) 98 if updateLdapAuthnErr != nil { 99 return updateLdapAuthnErr 100 } 101 } 102 103 IsAnyIdpDetails := func(d types.LdapIdentitySourceDetails) bool { 104 values := reflect.ValueOf(cmd.idpDetails) 105 for i := 0; i < values.NumField(); i++ { 106 if values.Field(i).Interface() != "" { 107 return true 108 } 109 } 110 return false 111 } 112 if IsAnyIdpDetails(cmd.idpDetails) { 113 smerge(&cmd.idpDetails.FriendlyName, currentidp.Details.FriendlyName) 114 smerge(&cmd.idpDetails.UserBaseDn, currentidp.Details.UserBaseDn) 115 smerge(&cmd.idpDetails.GroupBaseDn, currentidp.Details.GroupBaseDn) 116 smerge(&cmd.idpDetails.PrimaryURL, currentidp.Details.PrimaryURL) 117 smerge(&cmd.idpDetails.FailoverURL, currentidp.Details.FailoverURL) 118 updateLdapErr := c.UpdateLdap(ctx, idpname, cmd.idpDetails) 119 if updateLdapErr != nil { 120 return updateLdapErr 121 } 122 } 123 return nil 124 }) 125 }