github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/cf/commands/user/space_users.go (about) 1 package user 2 3 import ( 4 "github.com/cloudfoundry/cli/cf/api" 5 "github.com/cloudfoundry/cli/cf/api/spaces" 6 "github.com/cloudfoundry/cli/cf/command_metadata" 7 "github.com/cloudfoundry/cli/cf/configuration/core_config" 8 . "github.com/cloudfoundry/cli/cf/i18n" 9 "github.com/cloudfoundry/cli/cf/models" 10 "github.com/cloudfoundry/cli/cf/requirements" 11 "github.com/cloudfoundry/cli/cf/terminal" 12 "github.com/codegangsta/cli" 13 ) 14 15 var spaceRoles = []string{models.SPACE_MANAGER, models.SPACE_DEVELOPER, models.SPACE_AUDITOR} 16 17 type SpaceUsers struct { 18 ui terminal.UI 19 config core_config.Reader 20 spaceRepo spaces.SpaceRepository 21 userRepo api.UserRepository 22 orgReq requirements.OrganizationRequirement 23 } 24 25 func NewSpaceUsers(ui terminal.UI, config core_config.Reader, spaceRepo spaces.SpaceRepository, userRepo api.UserRepository) (cmd *SpaceUsers) { 26 cmd = new(SpaceUsers) 27 cmd.ui = ui 28 cmd.config = config 29 cmd.spaceRepo = spaceRepo 30 cmd.userRepo = userRepo 31 return 32 } 33 34 func (cmd *SpaceUsers) Metadata() command_metadata.CommandMetadata { 35 return command_metadata.CommandMetadata{ 36 Name: "space-users", 37 Description: T("Show space users by role"), 38 Usage: T("CF_NAME space-users ORG SPACE"), 39 } 40 } 41 42 func (cmd *SpaceUsers) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { 43 if len(c.Args()) != 2 { 44 cmd.ui.FailWithUsage(c) 45 } 46 47 orgName := c.Args()[0] 48 cmd.orgReq = requirementsFactory.NewOrganizationRequirement(orgName) 49 reqs = append(reqs, requirementsFactory.NewLoginRequirement(), cmd.orgReq) 50 51 return 52 } 53 54 func (cmd *SpaceUsers) Run(c *cli.Context) { 55 spaceName := c.Args()[1] 56 org := cmd.orgReq.GetOrganization() 57 58 space, apiErr := cmd.spaceRepo.FindByNameInOrg(spaceName, org.Guid) 59 if apiErr != nil { 60 cmd.ui.Failed(apiErr.Error()) 61 } 62 63 cmd.ui.Say(T("Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", 64 map[string]interface{}{ 65 "TargetOrg": terminal.EntityNameColor(org.Name), 66 "TargetSpace": terminal.EntityNameColor(space.Name), 67 "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), 68 })) 69 70 var spaceRoleToDisplayName = map[string]string{ 71 models.SPACE_MANAGER: T("SPACE MANAGER"), 72 models.SPACE_DEVELOPER: T("SPACE DEVELOPER"), 73 models.SPACE_AUDITOR: T("SPACE AUDITOR"), 74 } 75 76 for _, role := range spaceRoles { 77 displayName := spaceRoleToDisplayName[role] 78 79 users, apiErr := cmd.userRepo.ListUsersInSpaceForRole(space.Guid, role) 80 81 cmd.ui.Say("") 82 cmd.ui.Say("%s", terminal.HeaderColor(displayName)) 83 84 for _, user := range users { 85 cmd.ui.Say(" %s", user.Username) 86 } 87 88 if apiErr != nil { 89 cmd.ui.Failed(T("Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", 90 map[string]interface{}{ 91 "Error": apiErr.Error(), 92 "SpaceRoleToDisplayName": displayName, 93 })) 94 return 95 } 96 } 97 }