github.com/cloudfoundry/cli@v7.1.0+incompatible/cf/api/service_brokers.go (about)

     1  package api
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"fmt"
     7  	"net/url"
     8  	"strings"
     9  
    10  	"code.cloudfoundry.org/cli/cf/api/resources"
    11  	"code.cloudfoundry.org/cli/cf/configuration/coreconfig"
    12  	"code.cloudfoundry.org/cli/cf/errors"
    13  	"code.cloudfoundry.org/cli/cf/models"
    14  	"code.cloudfoundry.org/cli/cf/net"
    15  )
    16  
    17  //go:generate counterfeiter . ServiceBrokerRepository
    18  
    19  type ServiceBrokerRepository interface {
    20  	ListServiceBrokers(callback func(models.ServiceBroker) bool) error
    21  	FindByName(name string) (serviceBroker models.ServiceBroker, apiErr error)
    22  	FindByGUID(guid string) (serviceBroker models.ServiceBroker, apiErr error)
    23  	Create(name, url, username, password, spaceGUID string) (apiErr error)
    24  	Update(serviceBroker models.ServiceBroker) (apiErr error)
    25  	Rename(guid, name string) (apiErr error)
    26  	Delete(guid string) (apiErr error)
    27  }
    28  
    29  type CloudControllerServiceBrokerRepository struct {
    30  	config  coreconfig.Reader
    31  	gateway net.Gateway
    32  }
    33  
    34  func NewCloudControllerServiceBrokerRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerServiceBrokerRepository) {
    35  	repo.config = config
    36  	repo.gateway = gateway
    37  	return
    38  }
    39  
    40  func (repo CloudControllerServiceBrokerRepository) ListServiceBrokers(callback func(models.ServiceBroker) bool) error {
    41  	return repo.gateway.ListPaginatedResources(
    42  		repo.config.APIEndpoint(),
    43  		"/v2/service_brokers",
    44  		resources.ServiceBrokerResource{},
    45  		func(resource interface{}) bool {
    46  			callback(resource.(resources.ServiceBrokerResource).ToFields())
    47  			return true
    48  		})
    49  }
    50  
    51  func (repo CloudControllerServiceBrokerRepository) FindByName(name string) (serviceBroker models.ServiceBroker, apiErr error) {
    52  	foundBroker := false
    53  	apiErr = repo.gateway.ListPaginatedResources(
    54  		repo.config.APIEndpoint(),
    55  		fmt.Sprintf("/v2/service_brokers?q=%s", url.QueryEscape("name:"+name)),
    56  		resources.ServiceBrokerResource{},
    57  		func(resource interface{}) bool {
    58  			serviceBroker = resource.(resources.ServiceBrokerResource).ToFields()
    59  			foundBroker = true
    60  			return false
    61  		})
    62  
    63  	if !foundBroker && (apiErr == nil) {
    64  		apiErr = errors.NewModelNotFoundError("Service Broker", name)
    65  	}
    66  
    67  	return
    68  }
    69  func (repo CloudControllerServiceBrokerRepository) FindByGUID(guid string) (serviceBroker models.ServiceBroker, apiErr error) {
    70  	broker := new(resources.ServiceBrokerResource)
    71  	apiErr = repo.gateway.GetResource(repo.config.APIEndpoint()+fmt.Sprintf("/v2/service_brokers/%s", guid), broker)
    72  	serviceBroker = broker.ToFields()
    73  	return
    74  }
    75  
    76  func (repo CloudControllerServiceBrokerRepository) Create(name, url, username, password, spaceGUID string) error {
    77  	path := "/v2/service_brokers"
    78  	args := struct {
    79  		Name      string `json:"name"`
    80  		URL       string `json:"broker_url"`
    81  		Username  string `json:"auth_username"`
    82  		Password  string `json:"auth_password"`
    83  		SpaceGUID string `json:"space_guid,omitempty"`
    84  	}{
    85  		name,
    86  		url,
    87  		username,
    88  		password,
    89  		spaceGUID,
    90  	}
    91  	bs, err := json.Marshal(args)
    92  	if err != nil {
    93  		return err
    94  	}
    95  	return repo.gateway.CreateResource(repo.config.APIEndpoint(), path, bytes.NewReader(bs))
    96  }
    97  
    98  func (repo CloudControllerServiceBrokerRepository) Update(serviceBroker models.ServiceBroker) (apiErr error) {
    99  	path := fmt.Sprintf("/v2/service_brokers/%s", serviceBroker.GUID)
   100  	body := fmt.Sprintf(
   101  		`{"broker_url":"%s","auth_username":"%s","auth_password":"%s"}`,
   102  		serviceBroker.URL, serviceBroker.Username, serviceBroker.Password,
   103  	)
   104  	return repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, strings.NewReader(body))
   105  }
   106  
   107  func (repo CloudControllerServiceBrokerRepository) Rename(guid, name string) (apiErr error) {
   108  	path := fmt.Sprintf("/v2/service_brokers/%s", guid)
   109  	body := fmt.Sprintf(`{"name":"%s"}`, name)
   110  	return repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, strings.NewReader(body))
   111  }
   112  
   113  func (repo CloudControllerServiceBrokerRepository) Delete(guid string) (apiErr error) {
   114  	path := fmt.Sprintf("/v2/service_brokers/%s", guid)
   115  	return repo.gateway.DeleteResource(repo.config.APIEndpoint(), path)
   116  }