github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/cf/commands/user/org_users.go (about)

     1  package user
     2  
     3  import (
     4  	"errors"
     5  	"github.com/cloudfoundry/cli/cf/api"
     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 orgRoles = []string{models.ORG_MANAGER, models.BILLING_MANAGER, models.ORG_AUDITOR}
    16  
    17  type OrgUsers struct {
    18  	ui       terminal.UI
    19  	config   core_config.Reader
    20  	orgReq   requirements.OrganizationRequirement
    21  	userRepo api.UserRepository
    22  }
    23  
    24  func NewOrgUsers(ui terminal.UI, config core_config.Reader, userRepo api.UserRepository) (cmd *OrgUsers) {
    25  	cmd = new(OrgUsers)
    26  	cmd.ui = ui
    27  	cmd.config = config
    28  	cmd.userRepo = userRepo
    29  	return
    30  }
    31  
    32  func (cmd *OrgUsers) Metadata() command_metadata.CommandMetadata {
    33  	return command_metadata.CommandMetadata{
    34  		Name:        "org-users",
    35  		Description: T("Show org users by role"),
    36  		Usage:       T("CF_NAME org-users ORG"),
    37  		Flags: []cli.Flag{
    38  			cli.BoolFlag{Name: "a", Usage: T("List all users in the org")},
    39  		},
    40  	}
    41  }
    42  
    43  func (cmd *OrgUsers) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) {
    44  	if len(c.Args()) != 1 {
    45  		err = errors.New(T("Incorrect usage"))
    46  		cmd.ui.FailWithUsage(c)
    47  		return
    48  	}
    49  
    50  	orgName := c.Args()[0]
    51  	cmd.orgReq = requirementsFactory.NewOrganizationRequirement(orgName)
    52  	reqs = append(reqs, requirementsFactory.NewLoginRequirement(), cmd.orgReq)
    53  
    54  	return
    55  }
    56  
    57  func (cmd *OrgUsers) Run(c *cli.Context) {
    58  	org := cmd.orgReq.GetOrganization()
    59  	all := c.Bool("a")
    60  
    61  	cmd.ui.Say(T("Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...",
    62  		map[string]interface{}{
    63  			"TargetOrg":   terminal.EntityNameColor(org.Name),
    64  			"CurrentUser": terminal.EntityNameColor(cmd.config.Username()),
    65  		}))
    66  
    67  	roles := orgRoles
    68  	if all {
    69  		roles = []string{models.ORG_USER}
    70  	}
    71  
    72  	var orgRoleToDisplayName = map[string]string{
    73  		models.ORG_USER:        T("USERS"),
    74  		models.ORG_MANAGER:     T("ORG MANAGER"),
    75  		models.BILLING_MANAGER: T("BILLING MANAGER"),
    76  		models.ORG_AUDITOR:     T("ORG AUDITOR"),
    77  	}
    78  
    79  	for _, role := range roles {
    80  		displayName := orgRoleToDisplayName[role]
    81  
    82  		users, apiErr := cmd.userRepo.ListUsersInOrgForRole(org.Guid, role)
    83  
    84  		cmd.ui.Say("")
    85  		cmd.ui.Say("%s", terminal.HeaderColor(displayName))
    86  
    87  		for _, user := range users {
    88  			cmd.ui.Say("  %s", user.Username)
    89  		}
    90  
    91  		if apiErr != nil {
    92  			cmd.ui.Failed(T("Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}",
    93  				map[string]interface{}{
    94  					"Error":                apiErr.Error(),
    95  					"OrgRoleToDisplayName": displayName,
    96  				}))
    97  			return
    98  		}
    99  	}
   100  }