github.com/sleungcy/cli@v7.1.0+incompatible/command/v7/set_space_role_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
     5  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant"
     6  	"code.cloudfoundry.org/cli/cf/errors"
     7  	"code.cloudfoundry.org/cli/command/flag"
     8  	"code.cloudfoundry.org/cli/command/translatableerror"
     9  )
    10  
    11  type SetSpaceRoleCommand struct {
    12  	BaseCommand
    13  
    14  	Args            flag.SpaceRoleArgs `positional-args:"yes"`
    15  	IsClient        bool               `long:"client" description:"Assign a space role to a client-id of a (non-user) service account"`
    16  	Origin          string             `long:"origin" description:"Indicates the identity provider to be used for authentication"`
    17  	usage           interface{}        `usage:"CF_NAME set-space-role USERNAME ORG SPACE ROLE\n   CF_NAME set-space-role USERNAME ORG SPACE ROLE [--client]\n   CF_NAME set-space-role USERNAME ORG SPACE ROLE [--origin ORIGIN]\n\nROLES:\n   SpaceManager - Invite and manage users, and enable features for a given space\n   SpaceDeveloper - Create and manage apps and services, and see logs and reports\n   SpaceAuditor - View logs, reports, and settings on this space"`
    18  	relatedCommands interface{}        `related_commands:"space-users, unset-space-role"`
    19  }
    20  
    21  func (cmd *SetSpaceRoleCommand) Execute(args []string) error {
    22  	err := cmd.validateFlags()
    23  	if err != nil {
    24  		return err
    25  	}
    26  
    27  	err = cmd.SharedActor.CheckTarget(false, false)
    28  	if err != nil {
    29  		return err
    30  	}
    31  
    32  	currentUser, err := cmd.Config.CurrentUser()
    33  	if err != nil {
    34  		return err
    35  	}
    36  
    37  	cmd.UI.DisplayTextWithFlavor("Assigning role {{.RoleType}} to user {{.TargetUserName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUserName}}...", map[string]interface{}{
    38  		"RoleType":        cmd.Args.Role.Role,
    39  		"TargetUserName":  cmd.Args.Username,
    40  		"OrgName":         cmd.Args.Organization,
    41  		"SpaceName":       cmd.Args.Space,
    42  		"CurrentUserName": currentUser.Name,
    43  	})
    44  
    45  	roleType, err := convertSpaceRoleType(cmd.Args.Role)
    46  	if err != nil {
    47  		return err
    48  	}
    49  
    50  	org, warnings, err := cmd.Actor.GetOrganizationByName(cmd.Args.Organization)
    51  	cmd.UI.DisplayWarnings(warnings)
    52  	if err != nil {
    53  		return err
    54  	}
    55  
    56  	space, warnings, err := cmd.Actor.GetSpaceByNameAndOrganization(cmd.Args.Space, org.GUID)
    57  	cmd.UI.DisplayWarnings(warnings)
    58  	if err != nil {
    59  		return err
    60  	}
    61  
    62  	warnings, err = cmd.Actor.CreateSpaceRole(roleType, org.GUID, space.GUID, cmd.Args.Username, cmd.Origin, cmd.IsClient)
    63  	cmd.UI.DisplayWarnings(warnings)
    64  	if err != nil {
    65  		if _, ok := err.(ccerror.RoleAlreadyExistsError); ok {
    66  			cmd.UI.DisplayWarning("User '{{.TargetUserName}}' already has role '{{.RoleType}}' in org '{{.OrgName}}' / space '{{.SpaceName}}'.", map[string]interface{}{
    67  				"RoleType":       cmd.Args.Role.Role,
    68  				"TargetUserName": cmd.Args.Username,
    69  				"OrgName":        cmd.Args.Organization,
    70  				"SpaceName":      cmd.Args.Space,
    71  			})
    72  		} else {
    73  			return err
    74  		}
    75  	}
    76  
    77  	cmd.UI.DisplayOK()
    78  
    79  	return nil
    80  }
    81  
    82  func (cmd SetSpaceRoleCommand) validateFlags() error {
    83  	if cmd.IsClient && cmd.Origin != "" {
    84  		return translatableerror.ArgumentCombinationError{
    85  			Args: []string{"--client", "--origin"},
    86  		}
    87  	}
    88  	return nil
    89  }
    90  
    91  func convertSpaceRoleType(givenRole flag.SpaceRole) (constant.RoleType, error) {
    92  	switch givenRole.Role {
    93  	case "SpaceAuditor":
    94  		return constant.SpaceAuditorRole, nil
    95  	case "SpaceManager":
    96  		return constant.SpaceManagerRole, nil
    97  	case "SpaceDeveloper":
    98  		return constant.SpaceDeveloperRole, nil
    99  	default:
   100  		return "", errors.New("Invalid role type.")
   101  	}
   102  }