github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/cf/commands/user/set_space_role.go (about) 1 package user 2 3 import ( 4 "errors" 5 . "github.com/cloudfoundry/cli/cf/i18n" 6 7 "github.com/cloudfoundry/cli/cf/api" 8 "github.com/cloudfoundry/cli/cf/api/spaces" 9 "github.com/cloudfoundry/cli/cf/command_metadata" 10 "github.com/cloudfoundry/cli/cf/configuration/core_config" 11 "github.com/cloudfoundry/cli/cf/models" 12 "github.com/cloudfoundry/cli/cf/requirements" 13 "github.com/cloudfoundry/cli/cf/terminal" 14 "github.com/codegangsta/cli" 15 ) 16 17 type SpaceRoleSetter interface { 18 SetSpaceRole(space models.Space, role, userGuid, userName string) (err error) 19 } 20 21 type SetSpaceRole struct { 22 ui terminal.UI 23 config core_config.Reader 24 spaceRepo spaces.SpaceRepository 25 userRepo api.UserRepository 26 userReq requirements.UserRequirement 27 orgReq requirements.OrganizationRequirement 28 } 29 30 func NewSetSpaceRole(ui terminal.UI, config core_config.Reader, spaceRepo spaces.SpaceRepository, userRepo api.UserRepository) (cmd *SetSpaceRole) { 31 cmd = new(SetSpaceRole) 32 cmd.ui = ui 33 cmd.config = config 34 cmd.spaceRepo = spaceRepo 35 cmd.userRepo = userRepo 36 return 37 } 38 39 func (cmd *SetSpaceRole) Metadata() command_metadata.CommandMetadata { 40 return command_metadata.CommandMetadata{ 41 Name: "set-space-role", 42 Description: T("Assign a space role to a user"), 43 Usage: T("CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n") + 44 T("ROLES:\n") + 45 T(" SpaceManager - Invite and manage users, and enable features for a given space\n") + 46 T(" SpaceDeveloper - Create and manage apps and services, and see logs and reports\n") + 47 T(" SpaceAuditor - View logs, reports, and settings on this space\n"), 48 } 49 } 50 51 func (cmd *SetSpaceRole) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { 52 if len(c.Args()) != 4 { 53 cmd.ui.FailWithUsage(c) 54 } 55 56 cmd.userReq = requirementsFactory.NewUserRequirement(c.Args()[0]) 57 cmd.orgReq = requirementsFactory.NewOrganizationRequirement(c.Args()[1]) 58 59 reqs = []requirements.Requirement{ 60 requirementsFactory.NewLoginRequirement(), 61 cmd.userReq, 62 cmd.orgReq, 63 } 64 return 65 } 66 67 func (cmd *SetSpaceRole) Run(c *cli.Context) { 68 spaceName := c.Args()[2] 69 role := models.UserInputToSpaceRole[c.Args()[3]] 70 user := cmd.userReq.GetUser() 71 org := cmd.orgReq.GetOrganization() 72 73 space, apiErr := cmd.spaceRepo.FindByNameInOrg(spaceName, org.Guid) 74 if apiErr != nil { 75 cmd.ui.Failed(apiErr.Error()) 76 return 77 } 78 79 err := cmd.SetSpaceRole(space, role, user.Guid, user.Username) 80 if err != nil { 81 cmd.ui.Failed(err.Error()) 82 return 83 } 84 } 85 86 func (cmd *SetSpaceRole) SetSpaceRole(space models.Space, role, userGuid, userName string) (err error) { 87 cmd.ui.Say(T("Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", 88 map[string]interface{}{ 89 "Role": terminal.EntityNameColor(role), 90 "TargetUser": terminal.EntityNameColor(userName), 91 "TargetOrg": terminal.EntityNameColor(space.Organization.Name), 92 "TargetSpace": terminal.EntityNameColor(space.Name), 93 "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), 94 })) 95 96 apiErr := cmd.userRepo.SetSpaceRole(userGuid, space.Guid, space.Organization.Guid, role) 97 if apiErr != nil { 98 err = errors.New(apiErr.Error()) 99 return 100 } 101 102 cmd.ui.Ok() 103 return 104 }