github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+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_registry" 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/cloudfoundry/cli/flags" 13 "github.com/cloudfoundry/cli/plugin/models" 14 ) 15 16 var spaceRoles = []string{models.SPACE_MANAGER, models.SPACE_DEVELOPER, models.SPACE_AUDITOR} 17 18 type SpaceUsers struct { 19 ui terminal.UI 20 config core_config.Reader 21 spaceRepo spaces.SpaceRepository 22 userRepo api.UserRepository 23 orgReq requirements.OrganizationRequirement 24 pluginModel *[]plugin_models.GetSpaceUsers_Model 25 pluginCall bool 26 } 27 28 func init() { 29 command_registry.Register(&SpaceUsers{}) 30 } 31 32 func (cmd *SpaceUsers) MetaData() command_registry.CommandMetadata { 33 return command_registry.CommandMetadata{ 34 Name: "space-users", 35 Description: T("Show space users by role"), 36 Usage: T("CF_NAME space-users ORG SPACE"), 37 } 38 } 39 40 func (cmd *SpaceUsers) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { 41 if len(fc.Args()) != 2 { 42 cmd.ui.Failed(T("Incorrect Usage. Requires arguments\n\n") + command_registry.Commands.CommandUsage("space-users")) 43 } 44 45 cmd.orgReq = requirementsFactory.NewOrganizationRequirement(fc.Args()[0]) 46 47 reqs = []requirements.Requirement{ 48 requirementsFactory.NewLoginRequirement(), 49 cmd.orgReq, 50 } 51 return 52 } 53 54 func (cmd *SpaceUsers) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { 55 cmd.ui = deps.Ui 56 cmd.config = deps.Config 57 cmd.userRepo = deps.RepoLocator.GetUserRepository() 58 cmd.spaceRepo = deps.RepoLocator.GetSpaceRepository() 59 cmd.pluginCall = pluginCall 60 cmd.pluginModel = deps.PluginModels.SpaceUsers 61 62 return cmd 63 } 64 65 func (cmd *SpaceUsers) Execute(c flags.FlagContext) { 66 spaceName := c.Args()[1] 67 org := cmd.orgReq.GetOrganization() 68 69 space, apiErr := cmd.spaceRepo.FindByNameInOrg(spaceName, org.Guid) 70 if apiErr != nil { 71 cmd.ui.Failed(apiErr.Error()) 72 } 73 74 cmd.ui.Say(T("Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", 75 map[string]interface{}{ 76 "TargetOrg": terminal.EntityNameColor(org.Name), 77 "TargetSpace": terminal.EntityNameColor(space.Name), 78 "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), 79 })) 80 81 var spaceRoleToDisplayName = map[string]string{ 82 models.SPACE_MANAGER: T("SPACE MANAGER"), 83 models.SPACE_DEVELOPER: T("SPACE DEVELOPER"), 84 models.SPACE_AUDITOR: T("SPACE AUDITOR"), 85 } 86 87 var usersMap = make(map[string]plugin_models.GetSpaceUsers_Model) 88 89 var users []models.UserFields 90 for _, role := range spaceRoles { 91 displayName := spaceRoleToDisplayName[role] 92 93 if cmd.config.IsMinApiVersion("2.21.0") { 94 users, apiErr = cmd.userRepo.ListUsersInSpaceForRoleWithNoUAA(space.Guid, role) 95 } else { 96 users, apiErr = cmd.userRepo.ListUsersInSpaceForRole(space.Guid, role) 97 } 98 99 cmd.ui.Say("") 100 cmd.ui.Say("%s", terminal.HeaderColor(displayName)) 101 102 for _, user := range users { 103 cmd.ui.Say(" %s", user.Username) 104 105 if cmd.pluginCall { 106 u, found := usersMap[user.Username] 107 if !found { 108 u = plugin_models.GetSpaceUsers_Model{} 109 u.Username = user.Username 110 u.Guid = user.Guid 111 u.IsAdmin = user.IsAdmin 112 u.Roles = make([]string, 1) 113 u.Roles[0] = role 114 usersMap[user.Username] = u 115 } else { 116 u.Roles = append(u.Roles, role) 117 usersMap[user.Username] = u 118 } 119 } 120 } 121 122 if apiErr != nil { 123 cmd.ui.Failed(T("Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", 124 map[string]interface{}{ 125 "Error": apiErr.Error(), 126 "SpaceRoleToDisplayName": displayName, 127 })) 128 return 129 } 130 } 131 132 if cmd.pluginCall { 133 for _, v := range usersMap { 134 *(cmd.pluginModel) = append(*(cmd.pluginModel), v) 135 } 136 } 137 }