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  }