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 }