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  }