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  }