github.com/vmware/govmomi@v0.51.0/cli/sso/lpp/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 lpp 6 7 import ( 8 "context" 9 "flag" 10 11 "github.com/vmware/govmomi/cli" 12 "github.com/vmware/govmomi/cli/flags" 13 "github.com/vmware/govmomi/cli/sso" 14 "github.com/vmware/govmomi/ssoadmin" 15 "github.com/vmware/govmomi/ssoadmin/types" 16 ) 17 18 type policyDetails struct { 19 *flags.ClientFlag 20 21 pol types.AdminPasswordPolicy 22 MinLength *int32 23 MinAlphabeticCount *int32 24 MinUppercaseCount *int32 25 MinLowercaseCount *int32 26 MinNumericCount *int32 27 MinSpecialCharCount *int32 28 PasswordLifetimeDays *int32 29 } 30 31 func (cmd *policyDetails) Usage() string { 32 return "NAME" 33 } 34 35 func (cmd *policyDetails) Register(ctx context.Context, f *flag.FlagSet) { 36 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 37 cmd.ClientFlag.Register(ctx, f) 38 39 f.StringVar(&cmd.pol.Description, "Description", "", "Description") 40 f.Var(flags.NewOptionalInt32(&cmd.MinLength), "MinLength", "Minimim length") 41 f.Var(flags.NewInt32(&cmd.pol.PasswordFormat.LengthRestriction.MaxLength), "MaxLength", "Maximum length") 42 f.Var(flags.NewOptionalInt32(&cmd.MinAlphabeticCount), "MinAlphabeticCount", "Minimum alphabetic count") 43 f.Var(flags.NewOptionalInt32(&cmd.MinUppercaseCount), "MinUppercaseCount", "Minimum uppercase count") 44 f.Var(flags.NewOptionalInt32(&cmd.MinLowercaseCount), "MinLowercaseCount", "Minimum lowercase count") 45 f.Var(flags.NewOptionalInt32(&cmd.MinNumericCount), "MinNumericCount", "Minimum numeric count") 46 f.Var(flags.NewOptionalInt32(&cmd.MinSpecialCharCount), "MinSpecialCharCount", "Minimum special characters count") 47 f.Var(flags.NewInt32(&cmd.pol.PasswordFormat.MaxIdenticalAdjacentCharacters), "MaxIdenticalAdjacentCharacters", "Maximum identical adjacent characters") 48 f.Var(flags.NewInt32(&cmd.pol.ProhibitedPreviousPasswordsCount), "ProhibitedPreviousPasswordsCount", "Prohibited previous passwords count") 49 f.Var(flags.NewOptionalInt32(&cmd.PasswordLifetimeDays), "PasswordLifetimeDays", "Password lifetime days") 50 } 51 52 type update struct { 53 policyDetails 54 } 55 56 func init() { 57 cli.Register("sso.lpp.update", &update{}) 58 } 59 60 func (cmd *update) Description() string { 61 return `Update SSO local password policy. 62 63 Examples: 64 govc sso.lpp.update -PasswordLifetimeDays 0` 65 } 66 67 func smerge(src *string, current string) { 68 if *src == "" { 69 *src = current 70 } 71 } 72 73 func imerge(src *int32, current int32) { 74 if *src == 0 { 75 *src = current 76 } 77 } 78 79 func oimerge(src *int32, flag *int32, current int32) { 80 if flag == nil { 81 *src = current 82 } else { 83 *src = *flag 84 } 85 } 86 87 func (cmd *update) Run(ctx context.Context, f *flag.FlagSet) error { 88 return sso.WithClient(ctx, cmd.ClientFlag, func(c *ssoadmin.Client) error { 89 current, err := c.GetLocalPasswordPolicy(ctx) 90 if err != nil { 91 return err 92 } 93 94 smerge(&cmd.pol.Description, current.Description) 95 oimerge(&cmd.pol.PasswordFormat.LengthRestriction.MinLength, cmd.MinLength, current.PasswordFormat.LengthRestriction.MinLength) 96 imerge(&cmd.pol.PasswordFormat.LengthRestriction.MaxLength, current.PasswordFormat.LengthRestriction.MaxLength) 97 oimerge(&cmd.pol.PasswordFormat.AlphabeticRestriction.MinAlphabeticCount, cmd.MinAlphabeticCount, current.PasswordFormat.AlphabeticRestriction.MinAlphabeticCount) 98 oimerge(&cmd.pol.PasswordFormat.AlphabeticRestriction.MinUppercaseCount, cmd.MinUppercaseCount, current.PasswordFormat.AlphabeticRestriction.MinUppercaseCount) 99 oimerge(&cmd.pol.PasswordFormat.AlphabeticRestriction.MinLowercaseCount, cmd.MinLowercaseCount, current.PasswordFormat.AlphabeticRestriction.MinLowercaseCount) 100 oimerge(&cmd.pol.PasswordFormat.MinNumericCount, cmd.MinNumericCount, current.PasswordFormat.MinNumericCount) 101 oimerge(&cmd.pol.PasswordFormat.MinSpecialCharCount, cmd.MinSpecialCharCount, current.PasswordFormat.MinSpecialCharCount) 102 imerge(&cmd.pol.PasswordFormat.MaxIdenticalAdjacentCharacters, current.PasswordFormat.MaxIdenticalAdjacentCharacters) 103 imerge(&cmd.pol.ProhibitedPreviousPasswordsCount, current.ProhibitedPreviousPasswordsCount) 104 oimerge(&cmd.pol.PasswordLifetimeDays, cmd.PasswordLifetimeDays, current.PasswordLifetimeDays) 105 106 return c.UpdateLocalPasswordPolicy(ctx, cmd.pol) 107 }) 108 }