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 }