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

     1  package api
     2  
     3  import (
     4  	"fmt"
     5  	"net/url"
     6  	"strings"
     7  
     8  	"code.cloudfoundry.org/cli/cf/api/resources"
     9  	"code.cloudfoundry.org/cli/cf/configuration/coreconfig"
    10  	"code.cloudfoundry.org/cli/cf/errors"
    11  	"code.cloudfoundry.org/cli/cf/models"
    12  	"code.cloudfoundry.org/cli/cf/net"
    13  )
    14  
    15  //go:generate counterfeiter . ServiceAuthTokenRepository
    16  
    17  type ServiceAuthTokenRepository interface {
    18  	FindAll() (authTokens []models.ServiceAuthTokenFields, apiErr error)
    19  	FindByLabelAndProvider(label, provider string) (authToken models.ServiceAuthTokenFields, apiErr error)
    20  	Create(authToken models.ServiceAuthTokenFields) (apiErr error)
    21  	Update(authToken models.ServiceAuthTokenFields) (apiErr error)
    22  	Delete(authToken models.ServiceAuthTokenFields) (apiErr error)
    23  }
    24  
    25  type CloudControllerServiceAuthTokenRepository struct {
    26  	gateway net.Gateway
    27  	config  coreconfig.Reader
    28  }
    29  
    30  func NewCloudControllerServiceAuthTokenRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerServiceAuthTokenRepository) {
    31  	repo.gateway = gateway
    32  	repo.config = config
    33  	return
    34  }
    35  
    36  func (repo CloudControllerServiceAuthTokenRepository) FindAll() (authTokens []models.ServiceAuthTokenFields, apiErr error) {
    37  	return repo.findAllWithPath("/v2/service_auth_tokens")
    38  }
    39  
    40  func (repo CloudControllerServiceAuthTokenRepository) FindByLabelAndProvider(label, provider string) (authToken models.ServiceAuthTokenFields, apiErr error) {
    41  	path := fmt.Sprintf("/v2/service_auth_tokens?q=%s", url.QueryEscape("label:"+label+";provider:"+provider))
    42  	authTokens, apiErr := repo.findAllWithPath(path)
    43  	if apiErr != nil {
    44  		return
    45  	}
    46  
    47  	if len(authTokens) == 0 {
    48  		apiErr = errors.NewModelNotFoundError("Service Auth Token", label+" "+provider)
    49  		return
    50  	}
    51  
    52  	authToken = authTokens[0]
    53  	return
    54  }
    55  
    56  func (repo CloudControllerServiceAuthTokenRepository) findAllWithPath(path string) ([]models.ServiceAuthTokenFields, error) {
    57  	var authTokens []models.ServiceAuthTokenFields
    58  	apiErr := repo.gateway.ListPaginatedResources(
    59  		repo.config.APIEndpoint(),
    60  		path,
    61  		resources.AuthTokenResource{},
    62  		func(resource interface{}) bool {
    63  			if at, ok := resource.(resources.AuthTokenResource); ok {
    64  				authTokens = append(authTokens, at.ToFields())
    65  			}
    66  			return true
    67  		})
    68  
    69  	return authTokens, apiErr
    70  }
    71  
    72  func (repo CloudControllerServiceAuthTokenRepository) Create(authToken models.ServiceAuthTokenFields) (apiErr error) {
    73  	body := fmt.Sprintf(`{"label":"%s","provider":"%s","token":"%s"}`, authToken.Label, authToken.Provider, authToken.Token)
    74  	path := "/v2/service_auth_tokens"
    75  	return repo.gateway.CreateResource(repo.config.APIEndpoint(), path, strings.NewReader(body))
    76  }
    77  
    78  func (repo CloudControllerServiceAuthTokenRepository) Delete(authToken models.ServiceAuthTokenFields) (apiErr error) {
    79  	path := fmt.Sprintf("/v2/service_auth_tokens/%s", authToken.GUID)
    80  	return repo.gateway.DeleteResource(repo.config.APIEndpoint(), path)
    81  }
    82  
    83  func (repo CloudControllerServiceAuthTokenRepository) Update(authToken models.ServiceAuthTokenFields) (apiErr error) {
    84  	body := fmt.Sprintf(`{"token":"%s"}`, authToken.Token)
    85  	path := fmt.Sprintf("/v2/service_auth_tokens/%s", authToken.GUID)
    86  	return repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, strings.NewReader(body))
    87  }