github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/commands/user/org_users.go (about) 1 package user 2 3 import ( 4 "fmt" 5 6 "github.com/cloudfoundry/cli/cf/api" 7 "github.com/cloudfoundry/cli/cf/command_registry" 8 "github.com/cloudfoundry/cli/cf/configuration/core_config" 9 . "github.com/cloudfoundry/cli/cf/i18n" 10 "github.com/cloudfoundry/cli/cf/models" 11 "github.com/cloudfoundry/cli/cf/requirements" 12 "github.com/cloudfoundry/cli/cf/terminal" 13 "github.com/cloudfoundry/cli/flags" 14 "github.com/cloudfoundry/cli/flags/flag" 15 "github.com/cloudfoundry/cli/plugin/models" 16 ) 17 18 var orgRoles = []string{models.ORG_MANAGER, models.BILLING_MANAGER, models.ORG_AUDITOR} 19 20 type OrgUsers struct { 21 ui terminal.UI 22 config core_config.Reader 23 orgReq requirements.OrganizationRequirement 24 userRepo api.UserRepository 25 pluginModel *[]plugin_models.GetOrgUsers_Model 26 pluginCall bool 27 } 28 29 func init() { 30 command_registry.Register(&OrgUsers{}) 31 } 32 33 func (cmd *OrgUsers) MetaData() command_registry.CommandMetadata { 34 fs := make(map[string]flags.FlagSet) 35 fs["a"] = &cliFlags.BoolFlag{Name: "a", Usage: T("List all users in the org")} 36 37 return command_registry.CommandMetadata{ 38 Name: "org-users", 39 Description: T("Show org users by role"), 40 Usage: T("CF_NAME org-users ORG"), 41 Flags: fs, 42 } 43 } 44 45 func (cmd *OrgUsers) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { 46 if len(fc.Args()) != 1 { 47 cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + command_registry.Commands.CommandUsage("org-users")) 48 } 49 50 cmd.orgReq = requirementsFactory.NewOrganizationRequirement(fc.Args()[0]) 51 52 reqs = []requirements.Requirement{ 53 requirementsFactory.NewLoginRequirement(), 54 cmd.orgReq, 55 } 56 return 57 } 58 59 func (cmd *OrgUsers) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { 60 cmd.ui = deps.Ui 61 cmd.config = deps.Config 62 cmd.userRepo = deps.RepoLocator.GetUserRepository() 63 cmd.pluginCall = pluginCall 64 cmd.pluginModel = deps.PluginModels.OrgUsers 65 return cmd 66 } 67 68 func (cmd *OrgUsers) Execute(c flags.FlagContext) { 69 org := cmd.orgReq.GetOrganization() 70 all := c.Bool("a") 71 72 cmd.ui.Say(T("Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...", 73 map[string]interface{}{ 74 "TargetOrg": terminal.EntityNameColor(org.Name), 75 "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), 76 })) 77 78 roles := orgRoles 79 if all { 80 roles = []string{models.ORG_USER} 81 } 82 83 var orgRoleToDisplayName = map[string]string{ 84 models.ORG_USER: T("USERS"), 85 models.ORG_MANAGER: T("ORG MANAGER"), 86 models.BILLING_MANAGER: T("BILLING MANAGER"), 87 models.ORG_AUDITOR: T("ORG AUDITOR"), 88 } 89 90 var usersMap = make(map[string]plugin_models.GetOrgUsers_Model) 91 var users []models.UserFields 92 var apiErr error 93 94 for _, role := range roles { 95 displayName := orgRoleToDisplayName[role] 96 97 if cmd.config.IsMinApiVersion("2.21.0") { 98 users, apiErr = cmd.userRepo.ListUsersInOrgForRoleWithNoUAA(org.Guid, role) 99 } else { 100 users, apiErr = cmd.userRepo.ListUsersInOrgForRole(org.Guid, role) 101 } 102 103 cmd.ui.Say("") 104 cmd.ui.Say("%s", terminal.HeaderColor(displayName)) 105 106 if len(users) == 0 { 107 cmd.ui.Say(fmt.Sprintf(" "+T("No %s found"), displayName)) 108 continue 109 } 110 111 for _, user := range users { 112 if cmd.pluginCall { 113 fillInUsersMapDetail(user, usersMap, role) 114 } else { 115 cmd.ui.Say(" %s", user.Username) 116 } 117 } 118 119 if apiErr != nil { 120 cmd.ui.Failed(T("Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}", 121 map[string]interface{}{ 122 "Error": apiErr.Error(), 123 "OrgRoleToDisplayName": displayName, 124 })) 125 return 126 } 127 } 128 129 if cmd.pluginCall { 130 for _, v := range usersMap { 131 *(cmd.pluginModel) = append(*(cmd.pluginModel), v) 132 } 133 } 134 } 135 136 func fillInUsersMapDetail(user models.UserFields, usersMap map[string]plugin_models.GetOrgUsers_Model, role string) { 137 u, found := usersMap[user.Username] 138 if !found { 139 u = plugin_models.GetOrgUsers_Model{} 140 u.Username = user.Username 141 u.Guid = user.Guid 142 u.IsAdmin = user.IsAdmin 143 u.Roles = make([]string, 1) 144 u.Roles[0] = role 145 usersMap[user.Username] = u 146 } else { 147 u.Roles = append(u.Roles, role) 148 usersMap[user.Username] = u 149 } 150 }