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  }