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