github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/commands/servicekey/service_key.go (about)

     1  package servicekey
     2  
     3  import (
     4  	"encoding/json"
     5  
     6  	"github.com/cloudfoundry/cli/cf/api"
     7  	"github.com/cloudfoundry/cli/cf/command_registry"
     8  	"github.com/cloudfoundry/cli/cf/configuration/core_config"
     9  	"github.com/cloudfoundry/cli/cf/errors"
    10  	"github.com/cloudfoundry/cli/cf/requirements"
    11  	"github.com/cloudfoundry/cli/cf/terminal"
    12  	"github.com/cloudfoundry/cli/flags"
    13  	"github.com/cloudfoundry/cli/flags/flag"
    14  
    15  	. "github.com/cloudfoundry/cli/cf/i18n"
    16  )
    17  
    18  type ServiceKey struct {
    19  	ui                         terminal.UI
    20  	config                     core_config.Reader
    21  	serviceRepo                api.ServiceRepository
    22  	serviceKeyRepo             api.ServiceKeyRepository
    23  	serviceInstanceRequirement requirements.ServiceInstanceRequirement
    24  }
    25  
    26  func init() {
    27  	command_registry.Register(&ServiceKey{})
    28  }
    29  
    30  func (cmd *ServiceKey) MetaData() command_registry.CommandMetadata {
    31  	fs := make(map[string]flags.FlagSet)
    32  	fs["guid"] = &cliFlags.BoolFlag{Name: "guid", Usage: T("Retrieve and display the given service-key's guid.  All other output for the service is suppressed.")}
    33  
    34  	return command_registry.CommandMetadata{
    35  		Name:        "service-key",
    36  		Description: T("Show service key info"),
    37  		Usage: T(`CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY
    38  
    39  EXAMPLE:
    40     CF_NAME service-key mydb mykey`),
    41  		Flags: fs,
    42  	}
    43  }
    44  
    45  func (cmd *ServiceKey) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) ([]requirements.Requirement, error) {
    46  	if len(fc.Args()) != 2 {
    47  		cmd.ui.Failed(T("Incorrect Usage. Requires SERVICE_INSTANCE SERVICE_KEY as arguments\n\n") + command_registry.Commands.CommandUsage("service-key"))
    48  	}
    49  
    50  	loginRequirement := requirementsFactory.NewLoginRequirement()
    51  	cmd.serviceInstanceRequirement = requirementsFactory.NewServiceInstanceRequirement(fc.Args()[0])
    52  	targetSpaceRequirement := requirementsFactory.NewTargetedSpaceRequirement()
    53  
    54  	reqs := []requirements.Requirement{loginRequirement, cmd.serviceInstanceRequirement, targetSpaceRequirement}
    55  	return reqs, nil
    56  }
    57  
    58  func (cmd *ServiceKey) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command {
    59  	cmd.ui = deps.Ui
    60  	cmd.config = deps.Config
    61  	cmd.serviceRepo = deps.RepoLocator.GetServiceRepository()
    62  	cmd.serviceKeyRepo = deps.RepoLocator.GetServiceKeyRepository()
    63  	return cmd
    64  }
    65  
    66  func (cmd *ServiceKey) Execute(c flags.FlagContext) {
    67  	serviceInstance := cmd.serviceInstanceRequirement.GetServiceInstance()
    68  	serviceKeyName := c.Args()[1]
    69  
    70  	if !c.Bool("guid") {
    71  		cmd.ui.Say(T("Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...",
    72  			map[string]interface{}{
    73  				"ServiceKeyName":      terminal.EntityNameColor(serviceKeyName),
    74  				"ServiceInstanceName": terminal.EntityNameColor(serviceInstance.Name),
    75  				"CurrentUser":         terminal.EntityNameColor(cmd.config.Username()),
    76  			}))
    77  	}
    78  
    79  	serviceKey, err := cmd.serviceKeyRepo.GetServiceKey(serviceInstance.Guid, serviceKeyName)
    80  	if err != nil {
    81  		switch err.(type) {
    82  		case *errors.NotAuthorizedError:
    83  			cmd.ui.Say(T("No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}",
    84  				map[string]interface{}{
    85  					"ServiceKeyName":      terminal.EntityNameColor(serviceKeyName),
    86  					"ServiceInstanceName": terminal.EntityNameColor(serviceInstance.Name)}))
    87  			return
    88  		default:
    89  			cmd.ui.Failed(err.Error())
    90  			return
    91  		}
    92  	}
    93  
    94  	if c.Bool("guid") {
    95  		cmd.ui.Say(serviceKey.Fields.Guid)
    96  	} else {
    97  		if serviceKey.Fields.Name == "" {
    98  			cmd.ui.Say(T("No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}",
    99  				map[string]interface{}{
   100  					"ServiceKeyName":      terminal.EntityNameColor(serviceKeyName),
   101  					"ServiceInstanceName": terminal.EntityNameColor(serviceInstance.Name)}))
   102  			return
   103  		}
   104  
   105  		jsonBytes, err := json.MarshalIndent(serviceKey.Credentials, "", " ")
   106  		if err != nil {
   107  			cmd.ui.Failed(err.Error())
   108  			return
   109  		}
   110  
   111  		cmd.ui.Say("")
   112  		cmd.ui.Say(string(jsonBytes))
   113  	}
   114  }