github.com/loafoe/cli@v7.1.0+incompatible/command/v7/create_user_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"strings"
     5  
     6  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant"
     7  	"code.cloudfoundry.org/cli/api/uaa"
     8  	"code.cloudfoundry.org/cli/command/flag"
     9  	"code.cloudfoundry.org/cli/command/translatableerror"
    10  )
    11  
    12  type CreateUserCommand struct {
    13  	BaseCommand
    14  
    15  	Args            flag.CreateUser `positional-args:"yes"`
    16  	Origin          string          `long:"origin" description:"Origin for mapping a user account to a user in an external identity provider"`
    17  	PasswordPrompt  bool            `long:"password-prompt" description:"Prompt interactively for password"`
    18  	usage           interface{}     `usage:"CF_NAME create-user USERNAME PASSWORD\n   CF_NAME create-user USERNAME [--origin ORIGIN]\n   CF_NAME create-user USERNAME --password-prompt\n\nEXAMPLES:\n   cf create-user j.smith@example.com S3cr3t                  # internal user\n   cf create-user j.smith@example.com --origin ldap           # LDAP user\n   cf create-user j.smith@example.com --origin provider-alias # SAML or OpenID Connect federated user"`
    19  	relatedCommands interface{}     `related_commands:"passwd, set-org-role, set-space-role"`
    20  }
    21  
    22  func (cmd *CreateUserCommand) Execute(args []string) error {
    23  	var password string
    24  	var err error
    25  
    26  	if cmd.passwordRequired() {
    27  		return translatableerror.RequiredArgumentError{
    28  			ArgumentName: "PASSWORD",
    29  		}
    30  	}
    31  
    32  	//	Is the admin logged in?
    33  	err = cmd.SharedActor.CheckTarget(false, false)
    34  	if err != nil {
    35  		return err
    36  	}
    37  
    38  	origin := cmd.Origin
    39  	if cmd.Origin == "" {
    40  		origin = constant.DefaultOriginUaa
    41  	}
    42  
    43  	//	Does the new user already exist?
    44  	_, err = cmd.Actor.GetUser(cmd.Args.Username, origin)
    45  	if err == nil {
    46  		// User already exists
    47  		cmd.UI.DisplayTextWithFlavor("Creating user {{.TargetUser}}...", map[string]interface{}{
    48  			"TargetUser": cmd.Args.Username,
    49  		})
    50  
    51  		cmd.UI.DisplayWarning("User '{{.User}}' already exists.", map[string]interface{}{
    52  			"User": cmd.Args.Username,
    53  		})
    54  
    55  		cmd.UI.DisplayOK()
    56  		return nil
    57  	}
    58  
    59  	//	Get the password
    60  	if cmd.Args.Password != nil {
    61  		password = *cmd.Args.Password
    62  	}
    63  
    64  	if cmd.PasswordPrompt {
    65  		password, err = cmd.UI.DisplayPasswordPrompt("Password")
    66  		if err != nil {
    67  			return err
    68  		}
    69  	}
    70  
    71  	//	Create the user!
    72  	cmd.UI.DisplayTextWithFlavor("Creating user {{.TargetUser}}...", map[string]interface{}{
    73  		"TargetUser": cmd.Args.Username,
    74  	})
    75  
    76  	_, warnings, err := cmd.Actor.CreateUser(cmd.Args.Username, password, cmd.Origin)
    77  	cmd.UI.DisplayWarnings(warnings)
    78  
    79  	if err != nil {
    80  		if _, ok := err.(uaa.ConflictError); ok {
    81  			cmd.UI.DisplayWarning("User '{{.User}}' already exists.", map[string]interface{}{
    82  				"User": cmd.Args.Username,
    83  			})
    84  			cmd.UI.DisplayOK()
    85  			return nil
    86  		} else {
    87  			return err
    88  		}
    89  	}
    90  
    91  	cmd.UI.DisplayOK()
    92  	cmd.UI.DisplayText("TIP: Assign roles with '{{.BinaryName}} set-org-role' and '{{.BinaryName}} set-space-role'.", map[string]interface{}{
    93  		"BinaryName": cmd.Config.BinaryName(),
    94  	})
    95  
    96  	return nil
    97  }
    98  
    99  func (cmd *CreateUserCommand) passwordRequired() bool {
   100  	if (cmd.Origin == "" || strings.ToLower(cmd.Origin) == constant.DefaultOriginUaa) && !cmd.PasswordPrompt {
   101  		if cmd.Args.Password == nil {
   102  			return true
   103  		}
   104  	}
   105  	return false
   106  }