github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/resource/resourcev1/controller/resource_service_key.go (about) 1 package controller 2 3 import ( 4 "net/url" 5 "strings" 6 7 "github.com/IBM-Cloud/bluemix-go/client" 8 "github.com/IBM-Cloud/bluemix-go/crn" 9 "github.com/IBM-Cloud/bluemix-go/helpers" 10 "github.com/IBM-Cloud/bluemix-go/models" 11 "github.com/IBM-Cloud/bluemix-go/rest" 12 ) 13 14 const ( 15 _Role_Crn = "role_crn" 16 _Service_ID_Crn = "serviceid_crn" 17 ) 18 19 type CreateServiceKeyRequest struct { 20 Name string `json:"name"` 21 SourceCRN crn.CRN `json:"source_crn"` 22 Parameters map[string]interface{} `json:"parameters,omitempty"` 23 } 24 25 //ErrCodeResourceServiceInstanceDoesnotExist ... 26 const ErrCodeResourceServiceKeyDoesnotExist = "ResourceServiceInstanceDoesnotExist" 27 28 //ResourceServiceInstanceQuery ... 29 type ResourceServiceKeyRepository interface { 30 GetKey(keyID string) (models.ServiceKey, error) 31 GetKeys(keyName string) ([]models.ServiceKey, error) 32 CreateKey(CreateServiceKeyRequest) (models.ServiceKey, error) 33 DeleteKey(keyID string) error 34 } 35 36 type resourceServiceKey struct { 37 client *client.Client 38 } 39 40 func newResourceServiceKeyAPI(c *client.Client) ResourceServiceKeyRepository { 41 return &resourceServiceKey{ 42 client: c, 43 } 44 } 45 46 func (r *resourceServiceKey) GetKeys(keyName string) ([]models.ServiceKey, error) { 47 var keys []models.ServiceKey 48 _, err := r.client.GetPaginated( 49 "/v1/resource_keys", 50 NewRCPaginatedResources(models.ServiceKey{}), 51 func(resource interface{}) bool { 52 if key, ok := resource.(models.ServiceKey); ok { 53 keys = append(keys, key) 54 return true 55 } 56 return false 57 }, 58 ) 59 if err != nil { 60 return []models.ServiceKey{}, err 61 } 62 63 if keyName != "" { 64 keys = filterKeysByName(keys, keyName) 65 } 66 67 return keys, nil 68 } 69 70 func filterKeysByName(keys []models.ServiceKey, name string) []models.ServiceKey { 71 ret := []models.ServiceKey{} 72 for _, k := range keys { 73 if strings.EqualFold(k.Name, name) { 74 ret = append(ret, k) 75 } 76 } 77 return ret 78 } 79 80 func (r *resourceServiceKey) GetKey(keyID string) (models.ServiceKey, error) { 81 resp := models.ServiceKey{} 82 request := rest.GetRequest(helpers.GetFullURL(*r.client.Config.Endpoint, "/v1/resource_keys/"+url.PathEscape(keyID))) 83 _, err := r.client.SendRequest(request, &resp) 84 if err != nil { 85 return resp, err 86 } 87 return resp, nil 88 } 89 90 func (r *resourceServiceKey) CreateKey(request CreateServiceKeyRequest) (models.ServiceKey, error) { 91 resp := models.ServiceKey{} 92 _, err := r.client.Post("/v1/resource_keys", request, &resp) 93 if err != nil { 94 return resp, err 95 } 96 return resp, nil 97 } 98 99 func (r *resourceServiceKey) DeleteKey(keyID string) error { 100 request := rest.DeleteRequest(helpers.GetFullURL(*r.client.Config.Endpoint, "/v1/resource_keys/"+url.PathEscape(keyID))).Query("id", url.PathEscape(keyID)) 101 _, err := r.client.SendRequest(request, nil) 102 return err 103 }