github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/space_users_command.go (about) 1 package v7 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/sharedaction" 5 "code.cloudfoundry.org/cli/actor/v7action" 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 7 "code.cloudfoundry.org/cli/command" 8 "code.cloudfoundry.org/cli/command/flag" 9 "code.cloudfoundry.org/cli/command/v7/shared" 10 "code.cloudfoundry.org/clock" 11 ) 12 13 //go:generate counterfeiter . SpaceUsersActor 14 15 type SpaceUsersActor interface { 16 GetOrganizationByName(name string) (v7action.Organization, v7action.Warnings, error) 17 GetSpaceByNameAndOrganization(spaceName string, orgGUID string) (v7action.Space, v7action.Warnings, error) 18 GetSpaceUsersByRoleType(spaceGuid string) (map[constant.RoleType][]v7action.User, v7action.Warnings, error) 19 } 20 21 type SpaceUsersCommand struct { 22 RequiredArgs flag.SpaceUsersArgs `positional-args:"yes"` 23 usage interface{} `usage:"CF_NAME space-users ORG SPACE"` 24 relatedCommands interface{} `related_commands:"org-users, orgs, set-space-role, spaces, unset-space-role"` 25 26 UI command.UI 27 Config command.Config 28 SharedActor command.SharedActor 29 Actor SpaceUsersActor 30 } 31 32 func (cmd *SpaceUsersCommand) Setup(config command.Config, ui command.UI) error { 33 cmd.UI = ui 34 cmd.Config = config 35 cmd.SharedActor = sharedaction.NewActor(config) 36 37 ccClient, _, err := shared.GetNewClientsAndConnectToCF(config, ui, "") 38 if err != nil { 39 return err 40 } 41 cmd.Actor = v7action.NewActor(ccClient, config, nil, nil, clock.NewClock()) 42 43 return nil 44 } 45 46 func (cmd *SpaceUsersCommand) Execute(args []string) error { 47 err := cmd.SharedActor.CheckTarget(false, false) 48 if err != nil { 49 return err 50 } 51 52 user, err := cmd.Config.CurrentUser() 53 if err != nil { 54 return err 55 } 56 57 cmd.UI.DisplayTextWithFlavor("Getting users in org {{.Org}} / space {{.Space}} as {{.CurrentUser}}...", map[string]interface{}{ 58 "Org": cmd.RequiredArgs.Organization, 59 "Space": cmd.RequiredArgs.Space, 60 "CurrentUser": user.Name, 61 }) 62 cmd.UI.DisplayNewline() 63 64 org, warnings, err := cmd.Actor.GetOrganizationByName(cmd.RequiredArgs.Organization) 65 cmd.UI.DisplayWarnings(warnings) 66 if err != nil { 67 return err 68 } 69 space, warnings, err := cmd.Actor.GetSpaceByNameAndOrganization(cmd.RequiredArgs.Space, org.GUID) 70 cmd.UI.DisplayWarnings(warnings) 71 if err != nil { 72 return err 73 } 74 75 spaceUsersByRoleType, warnings, err := cmd.Actor.GetSpaceUsersByRoleType(space.GUID) 76 cmd.UI.DisplayWarnings(warnings) 77 if err != nil { 78 return err 79 } 80 81 cmd.displaySpaceUsers(spaceUsersByRoleType) 82 83 return nil 84 } 85 86 func (cmd SpaceUsersCommand) displaySpaceUsers(orgUsersByRoleType map[constant.RoleType][]v7action.User) { 87 cmd.displayRoleGroup(orgUsersByRoleType[constant.SpaceManagerRole], "SPACE MANAGER") 88 cmd.displayRoleGroup(orgUsersByRoleType[constant.SpaceDeveloperRole], "SPACE DEVELOPER") 89 cmd.displayRoleGroup(orgUsersByRoleType[constant.SpaceAuditorRole], "SPACE AUDITOR") 90 } 91 92 func (cmd SpaceUsersCommand) displayRoleGroup(usersWithRole []v7action.User, roleLabel string) { 93 v7action.SortUsers(usersWithRole) 94 95 cmd.UI.DisplayHeader(roleLabel) 96 if len(usersWithRole) > 0 { 97 for _, userWithRole := range usersWithRole { 98 cmd.UI.DisplayText(" {{.PresentationName}} ({{.Origin}})", map[string]interface{}{ 99 "PresentationName": userWithRole.PresentationName, 100 "Origin": v7action.GetHumanReadableOrigin(userWithRole), 101 }) 102 } 103 } else { 104 cmd.UI.DisplayText(" No {{.RoleLabel}} found", map[string]interface{}{ 105 "RoleLabel": roleLabel, 106 }) 107 } 108 109 cmd.UI.DisplayNewline() 110 }