github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v7/unset_space_role_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/v7action"
     5  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant"
     6  	"code.cloudfoundry.org/cli/command/translatableerror"
     7  	"code.cloudfoundry.org/clock"
     8  
     9  	"code.cloudfoundry.org/cli/actor/sharedaction"
    10  	"code.cloudfoundry.org/cli/command"
    11  	"code.cloudfoundry.org/cli/command/flag"
    12  	"code.cloudfoundry.org/cli/command/v7/shared"
    13  )
    14  
    15  //go:generate counterfeiter . UnsetSpaceRoleActor
    16  
    17  type UnsetSpaceRoleActor interface {
    18  	DeleteSpaceRole(roleType constant.RoleType, spaceGUID string, userNameOrGUID string, userOrigin string, isClient bool) (v7action.Warnings, error)
    19  	GetOrganizationByName(name string) (v7action.Organization, v7action.Warnings, error)
    20  	GetSpaceByNameAndOrganization(spaceName string, orgGUID string) (v7action.Space, v7action.Warnings, error)
    21  	GetUser(username, origin string) (v7action.User, error)
    22  }
    23  
    24  type UnsetSpaceRoleCommand struct {
    25  	Args            flag.SpaceRoleArgs `positional-args:"yes"`
    26  	IsClient        bool               `long:"client" description:"Remove space role from a client-id of a (non-user) service account"`
    27  	Origin          string             `long:"origin" description:"Indicates the identity provider to be used for authentication"`
    28  	usage           interface{}        `usage:"CF_NAME unset-space-role USERNAME ORG SPACE ROLE\n   CF_NAME unset-space-role USERNAME ORG SPACE ROLE [--client]\n   CF_NAME unset-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"`
    29  	relatedCommands interface{}        `related_commands:"set-space-role, space-users"`
    30  
    31  	UI          command.UI
    32  	Config      command.Config
    33  	SharedActor command.SharedActor
    34  	Actor       UnsetSpaceRoleActor
    35  }
    36  
    37  func (cmd *UnsetSpaceRoleCommand) Setup(config command.Config, ui command.UI) error {
    38  	cmd.UI = ui
    39  	cmd.Config = config
    40  	sharedActor := sharedaction.NewActor(config)
    41  	cmd.SharedActor = sharedActor
    42  
    43  	ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui, "")
    44  	if err != nil {
    45  		return err
    46  	}
    47  	cmd.Actor = v7action.NewActor(ccClient, config, sharedActor, uaaClient, clock.NewClock())
    48  	return nil
    49  }
    50  
    51  func (cmd *UnsetSpaceRoleCommand) Execute(args []string) error {
    52  	err := cmd.validateFlags()
    53  	if err != nil {
    54  		return err
    55  	}
    56  
    57  	err = cmd.SharedActor.CheckTarget(false, false)
    58  	if err != nil {
    59  		return err
    60  	}
    61  
    62  	currentUser, err := cmd.Config.CurrentUser()
    63  	if err != nil {
    64  		return err
    65  	}
    66  
    67  	cmd.UI.DisplayTextWithFlavor("Removing role {{.RoleType}} from user {{.TargetUserName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUserName}}...", map[string]interface{}{
    68  		"RoleType":        cmd.Args.Role.Role,
    69  		"TargetUserName":  cmd.Args.Username,
    70  		"OrgName":         cmd.Args.Organization,
    71  		"SpaceName":       cmd.Args.Space,
    72  		"CurrentUserName": currentUser.Name,
    73  	})
    74  
    75  	roleType, err := convertSpaceRoleType(cmd.Args.Role)
    76  	if err != nil {
    77  		return err
    78  	}
    79  
    80  	org, warnings, err := cmd.Actor.GetOrganizationByName(cmd.Args.Organization)
    81  	cmd.UI.DisplayWarnings(warnings)
    82  	if err != nil {
    83  		return err
    84  	}
    85  
    86  	space, warnings, err := cmd.Actor.GetSpaceByNameAndOrganization(cmd.Args.Space, org.GUID)
    87  	cmd.UI.DisplayWarnings(warnings)
    88  	if err != nil {
    89  		return err
    90  	}
    91  
    92  	origin := cmd.Origin
    93  	if origin == "" {
    94  		origin = constant.DefaultOriginUaa
    95  	}
    96  
    97  	warnings, err = cmd.Actor.DeleteSpaceRole(roleType, space.GUID, cmd.Args.Username, origin, cmd.IsClient)
    98  	cmd.UI.DisplayWarnings(warnings)
    99  	if err != nil {
   100  		return err
   101  	}
   102  
   103  	cmd.UI.DisplayOK()
   104  
   105  	return nil
   106  }
   107  
   108  func (cmd UnsetSpaceRoleCommand) validateFlags() error {
   109  	if cmd.IsClient && cmd.Origin != "" {
   110  		return translatableerror.ArgumentCombinationError{
   111  			Args: []string{"--client", "--origin"},
   112  		}
   113  	}
   114  	return nil
   115  }