github.com/elopio/cli@v6.21.2-0.20160902224010-ea909d1fdb2f+incompatible/cf/commands/user/space_users.go (about) 1 package user 2 3 import ( 4 "fmt" 5 6 "code.cloudfoundry.org/cli/cf" 7 "code.cloudfoundry.org/cli/cf/actors/userprint" 8 "code.cloudfoundry.org/cli/cf/api" 9 "code.cloudfoundry.org/cli/cf/api/spaces" 10 "code.cloudfoundry.org/cli/cf/commandregistry" 11 "code.cloudfoundry.org/cli/cf/configuration/coreconfig" 12 "code.cloudfoundry.org/cli/cf/flags" 13 . "code.cloudfoundry.org/cli/cf/i18n" 14 "code.cloudfoundry.org/cli/cf/models" 15 "code.cloudfoundry.org/cli/cf/requirements" 16 "code.cloudfoundry.org/cli/cf/terminal" 17 "code.cloudfoundry.org/cli/plugin/models" 18 ) 19 20 type SpaceUsers struct { 21 ui terminal.UI 22 config coreconfig.Reader 23 spaceRepo spaces.SpaceRepository 24 userRepo api.UserRepository 25 orgReq requirements.OrganizationRequirement 26 pluginModel *[]plugin_models.GetSpaceUsers_Model 27 pluginCall bool 28 } 29 30 func init() { 31 commandregistry.Register(&SpaceUsers{}) 32 } 33 34 func (cmd *SpaceUsers) MetaData() commandregistry.CommandMetadata { 35 return commandregistry.CommandMetadata{ 36 Name: "space-users", 37 Description: T("Show space users by role"), 38 Usage: []string{ 39 T("CF_NAME space-users ORG SPACE"), 40 }, 41 } 42 } 43 44 func (cmd *SpaceUsers) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) ([]requirements.Requirement, error) { 45 if len(fc.Args()) != 2 { 46 cmd.ui.Failed(T("Incorrect Usage. Requires arguments\n\n") + commandregistry.Commands.CommandUsage("space-users")) 47 return nil, fmt.Errorf("Incorrect usage: %d arguments of %d required", len(fc.Args()), 2) 48 } 49 50 cmd.orgReq = requirementsFactory.NewOrganizationRequirement(fc.Args()[0]) 51 52 reqs := []requirements.Requirement{ 53 requirementsFactory.NewLoginRequirement(), 54 cmd.orgReq, 55 } 56 57 return reqs, nil 58 } 59 60 func (cmd *SpaceUsers) SetDependency(deps commandregistry.Dependency, pluginCall bool) commandregistry.Command { 61 cmd.ui = deps.UI 62 cmd.config = deps.Config 63 cmd.userRepo = deps.RepoLocator.GetUserRepository() 64 cmd.spaceRepo = deps.RepoLocator.GetSpaceRepository() 65 cmd.pluginCall = pluginCall 66 cmd.pluginModel = deps.PluginModels.SpaceUsers 67 68 return cmd 69 } 70 71 func (cmd *SpaceUsers) Execute(c flags.FlagContext) error { 72 spaceName := c.Args()[1] 73 org := cmd.orgReq.GetOrganization() 74 75 space, err := cmd.spaceRepo.FindByNameInOrg(spaceName, org.GUID) 76 if err != nil { 77 return err 78 } 79 80 printer := cmd.printer(org, space, cmd.config.Username()) 81 printer.PrintUsers(space.GUID, cmd.config.Username()) 82 return nil 83 } 84 85 func (cmd *SpaceUsers) printer(org models.Organization, space models.Space, username string) userprint.UserPrinter { 86 var roles = []models.Role{models.RoleSpaceManager, models.RoleSpaceDeveloper, models.RoleSpaceAuditor} 87 88 if cmd.pluginCall { 89 return userprint.NewSpaceUsersPluginPrinter( 90 cmd.pluginModel, 91 cmd.userLister(), 92 roles, 93 ) 94 } 95 96 cmd.ui.Say(T("Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", 97 map[string]interface{}{ 98 "TargetOrg": terminal.EntityNameColor(org.Name), 99 "TargetSpace": terminal.EntityNameColor(space.Name), 100 "CurrentUser": terminal.EntityNameColor(username), 101 })) 102 103 return &userprint.SpaceUsersUIPrinter{ 104 UI: cmd.ui, 105 UserLister: cmd.userLister(), 106 Roles: roles, 107 RoleDisplayNames: map[models.Role]string{ 108 models.RoleSpaceManager: T("SPACE MANAGER"), 109 models.RoleSpaceDeveloper: T("SPACE DEVELOPER"), 110 models.RoleSpaceAuditor: T("SPACE AUDITOR"), 111 }, 112 } 113 } 114 115 func (cmd *SpaceUsers) userLister() func(spaceGUID string, role models.Role) ([]models.UserFields, error) { 116 if cmd.config.IsMinAPIVersion(cf.ListUsersInOrgOrSpaceWithoutUAAMinimumAPIVersion) { 117 return cmd.userRepo.ListUsersInSpaceForRoleWithNoUAA 118 } 119 return cmd.userRepo.ListUsersInSpaceForRole 120 }