github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+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_metadata"
     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/codegangsta/cli"
    13  )
    14  
    15  var spaceRoles = []string{models.SPACE_MANAGER, models.SPACE_DEVELOPER, models.SPACE_AUDITOR}
    16  
    17  type SpaceUsers struct {
    18  	ui        terminal.UI
    19  	config    core_config.Reader
    20  	spaceRepo spaces.SpaceRepository
    21  	userRepo  api.UserRepository
    22  	orgReq    requirements.OrganizationRequirement
    23  }
    24  
    25  func NewSpaceUsers(ui terminal.UI, config core_config.Reader, spaceRepo spaces.SpaceRepository, userRepo api.UserRepository) (cmd *SpaceUsers) {
    26  	cmd = new(SpaceUsers)
    27  	cmd.ui = ui
    28  	cmd.config = config
    29  	cmd.spaceRepo = spaceRepo
    30  	cmd.userRepo = userRepo
    31  	return
    32  }
    33  
    34  func (cmd *SpaceUsers) Metadata() command_metadata.CommandMetadata {
    35  	return command_metadata.CommandMetadata{
    36  		Name:        "space-users",
    37  		Description: T("Show space users by role"),
    38  		Usage:       T("CF_NAME space-users ORG SPACE"),
    39  	}
    40  }
    41  
    42  func (cmd *SpaceUsers) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) {
    43  	if len(c.Args()) != 2 {
    44  		cmd.ui.FailWithUsage(c)
    45  	}
    46  
    47  	orgName := c.Args()[0]
    48  	cmd.orgReq = requirementsFactory.NewOrganizationRequirement(orgName)
    49  	reqs = append(reqs, requirementsFactory.NewLoginRequirement(), cmd.orgReq)
    50  
    51  	return
    52  }
    53  
    54  func (cmd *SpaceUsers) Run(c *cli.Context) {
    55  	spaceName := c.Args()[1]
    56  	org := cmd.orgReq.GetOrganization()
    57  
    58  	space, apiErr := cmd.spaceRepo.FindByNameInOrg(spaceName, org.Guid)
    59  	if apiErr != nil {
    60  		cmd.ui.Failed(apiErr.Error())
    61  	}
    62  
    63  	cmd.ui.Say(T("Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}",
    64  		map[string]interface{}{
    65  			"TargetOrg":   terminal.EntityNameColor(org.Name),
    66  			"TargetSpace": terminal.EntityNameColor(space.Name),
    67  			"CurrentUser": terminal.EntityNameColor(cmd.config.Username()),
    68  		}))
    69  
    70  	var spaceRoleToDisplayName = map[string]string{
    71  		models.SPACE_MANAGER:   T("SPACE MANAGER"),
    72  		models.SPACE_DEVELOPER: T("SPACE DEVELOPER"),
    73  		models.SPACE_AUDITOR:   T("SPACE AUDITOR"),
    74  	}
    75  
    76  	for _, role := range spaceRoles {
    77  		displayName := spaceRoleToDisplayName[role]
    78  
    79  		users, apiErr := cmd.userRepo.ListUsersInSpaceForRole(space.Guid, role)
    80  
    81  		cmd.ui.Say("")
    82  		cmd.ui.Say("%s", terminal.HeaderColor(displayName))
    83  
    84  		for _, user := range users {
    85  			cmd.ui.Say("  %s", user.Username)
    86  		}
    87  
    88  		if apiErr != nil {
    89  			cmd.ui.Failed(T("Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}",
    90  				map[string]interface{}{
    91  					"Error":                  apiErr.Error(),
    92  					"SpaceRoleToDisplayName": displayName,
    93  				}))
    94  			return
    95  		}
    96  	}
    97  }