github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v7/create_user_command.go (about) 1 package v7 2 3 import ( 4 "strings" 5 6 "code.cloudfoundry.org/cli/actor/sharedaction" 7 "code.cloudfoundry.org/cli/actor/v7action" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 9 "code.cloudfoundry.org/cli/api/uaa" 10 "code.cloudfoundry.org/cli/command" 11 "code.cloudfoundry.org/cli/command/flag" 12 "code.cloudfoundry.org/cli/command/translatableerror" 13 "code.cloudfoundry.org/cli/command/v7/shared" 14 "code.cloudfoundry.org/clock" 15 ) 16 17 //go:generate counterfeiter . CreateUserActor 18 19 type CreateUserActor interface { 20 CreateUser(username string, password string, origin string) (v7action.User, v7action.Warnings, error) 21 GetUser(username, origin string) (v7action.User, error) 22 } 23 24 type CreateUserCommand struct { 25 Args flag.CreateUser `positional-args:"yes"` 26 Origin string `long:"origin" description:"Origin for mapping a user account to a user in an external identity provider"` 27 PasswordPrompt bool `long:"password-prompt" description:"Prompt interactively for password"` 28 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"` 29 relatedCommands interface{} `related_commands:"passwd, set-org-role, set-space-role"` 30 31 UI command.UI 32 Config command.Config 33 SharedActor command.SharedActor 34 Actor CreateUserActor 35 } 36 37 func (cmd *CreateUserCommand) Setup(config command.Config, ui command.UI) error { 38 cmd.UI = ui 39 cmd.Config = config 40 sharedActor := sharedaction.NewActor(config) 41 cmd.SharedActor = sharedActor 42 43 ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui, "") 44 if err != nil { 45 return err 46 } 47 cmd.Actor = v7action.NewActor(ccClient, config, sharedActor, uaaClient, clock.NewClock()) 48 return nil 49 } 50 51 func (cmd *CreateUserCommand) Execute(args []string) error { 52 var password string 53 var err error 54 55 if cmd.passwordRequired() { 56 return translatableerror.RequiredArgumentError{ 57 ArgumentName: "PASSWORD", 58 } 59 } 60 61 // Is the admin logged in? 62 err = cmd.SharedActor.CheckTarget(false, false) 63 if err != nil { 64 return err 65 } 66 67 origin := cmd.Origin 68 if cmd.Origin == "" { 69 origin = constant.DefaultOriginUaa 70 } 71 72 // Does the new user already exist? 73 _, err = cmd.Actor.GetUser(cmd.Args.Username, origin) 74 if err == nil { 75 // User already exists 76 cmd.UI.DisplayTextWithFlavor("Creating user {{.TargetUser}}...", map[string]interface{}{ 77 "TargetUser": cmd.Args.Username, 78 }) 79 80 cmd.UI.DisplayWarning("User '{{.User}}' already exists.", map[string]interface{}{ 81 "User": cmd.Args.Username, 82 }) 83 84 cmd.UI.DisplayOK() 85 return nil 86 } 87 88 // Get the password 89 if cmd.Args.Password != nil { 90 password = *cmd.Args.Password 91 } 92 93 if cmd.PasswordPrompt { 94 password, err = cmd.UI.DisplayPasswordPrompt("Password") 95 if err != nil { 96 return err 97 } 98 } 99 100 // Create the user! 101 cmd.UI.DisplayTextWithFlavor("Creating user {{.TargetUser}}...", map[string]interface{}{ 102 "TargetUser": cmd.Args.Username, 103 }) 104 105 _, warnings, err := cmd.Actor.CreateUser(cmd.Args.Username, password, cmd.Origin) 106 cmd.UI.DisplayWarnings(warnings) 107 108 if err != nil { 109 if _, ok := err.(uaa.ConflictError); ok { 110 cmd.UI.DisplayWarning("User '{{.User}}' already exists.", map[string]interface{}{ 111 "User": cmd.Args.Username, 112 }) 113 cmd.UI.DisplayOK() 114 return nil 115 } else { 116 return err 117 } 118 } 119 120 cmd.UI.DisplayOK() 121 cmd.UI.DisplayText("TIP: Assign roles with '{{.BinaryName}} set-org-role' and '{{.BinaryName}} set-space-role'.", map[string]interface{}{ 122 "BinaryName": cmd.Config.BinaryName(), 123 }) 124 125 return nil 126 } 127 128 func (cmd *CreateUserCommand) passwordRequired() bool { 129 if (cmd.Origin == "" || strings.ToLower(cmd.Origin) == constant.DefaultOriginUaa) && !cmd.PasswordPrompt { 130 if cmd.Args.Password == nil { 131 return true 132 } 133 } 134 return false 135 }