github.com/dcarley/cf-cli@v6.24.1-0.20170220111324-4225ff346898+incompatible/command/v2/create_user_command.go (about) 1 package v2 2 3 import ( 4 "strings" 5 6 "code.cloudfoundry.org/cli/actor/sharedaction" 7 "code.cloudfoundry.org/cli/actor/v2action" 8 "code.cloudfoundry.org/cli/api/uaa" 9 "code.cloudfoundry.org/cli/command" 10 "code.cloudfoundry.org/cli/command/flag" 11 "code.cloudfoundry.org/cli/command/v2/shared" 12 ) 13 14 //go:generate counterfeiter . CreateUserActor 15 16 type CreateUserActor interface { 17 NewUser(username string, password string, origin string) (v2action.User, v2action.Warnings, error) 18 } 19 20 type CreateUserCommand struct { 21 Args flag.CreateUser `positional-args:"yes"` 22 Origin string `long:"origin" description:"Origin for mapping a user account to a user in an external identity provider"` 23 usage interface{} `usage:"CF_NAME create-user USERNAME PASSWORD\n CF_NAME create-user USERNAME --origin ORIGIN\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"` 24 relatedCommands interface{} `related_commands:"passwd, set-org-role, set-space-role"` 25 26 UI command.UI 27 Config command.Config 28 SharedActor command.SharedActor 29 Actor CreateUserActor 30 } 31 32 func (cmd *CreateUserCommand) Setup(config command.Config, ui command.UI) error { 33 cmd.UI = ui 34 cmd.Config = config 35 cmd.SharedActor = sharedaction.NewActor() 36 37 ccClient, uaaClient, err := shared.NewClients(config, ui) 38 if err != nil { 39 return err 40 } 41 cmd.Actor = v2action.NewActor(ccClient, uaaClient) 42 43 return nil 44 } 45 46 func (cmd *CreateUserCommand) Execute(args []string) error { 47 // cmd.Args.Password is intentionally set to a pointer such that we can check 48 // if it is passed (otherwise we can't differentiate between the default 49 // empty string and a passed in empty string. 50 var password string 51 52 if (cmd.Origin == "" || strings.ToLower(cmd.Origin) == "uaa") && cmd.Args.Password == nil { 53 return command.RequiredArgumentError{ 54 ArgumentName: "PASSWORD", 55 } 56 } 57 58 if cmd.Args.Password != nil { 59 password = *cmd.Args.Password 60 } else { 61 password = "" 62 } 63 64 err := cmd.SharedActor.CheckTarget(cmd.Config, false, false) 65 if err != nil { 66 return shared.HandleError(err) 67 } 68 69 cmd.UI.DisplayTextWithFlavor("Creating user {{.TargetUser}}...", map[string]interface{}{ 70 "TargetUser": cmd.Args.Username, 71 }) 72 73 _, warnings, err := cmd.Actor.NewUser(cmd.Args.Username, password, cmd.Origin) 74 cmd.UI.DisplayWarnings(warnings) 75 76 if err != nil { 77 if _, ok := err.(uaa.ConflictError); ok { 78 cmd.UI.DisplayWarning("user {{.User}} already exists", map[string]interface{}{ 79 "User": cmd.Args.Username, 80 }) 81 } else { 82 cmd.UI.DisplayTextWithFlavor("Error creating user {{.User}}.", map[string]interface{}{ 83 "User": cmd.Args.Username, 84 }) 85 return err 86 } 87 } 88 89 cmd.UI.DisplayOK() 90 cmd.UI.DisplayNewline() 91 cmd.UI.DisplayText("TIP: Assign roles with '{{.BinaryName}} set-org-role' and '{{.BinaryName}} set-space-role'.", map[string]interface{}{ 92 "BinaryName": cmd.Config.BinaryName(), 93 }) 94 95 return nil 96 }