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  }