github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/api/organizations/organizations.go (about)

     1  package organizations
     2  
     3  import (
     4  	"fmt"
     5  	"net/url"
     6  	"strings"
     7  
     8  	"github.com/cloudfoundry/cli/cf/api/resources"
     9  	"github.com/cloudfoundry/cli/cf/configuration/core_config"
    10  	"github.com/cloudfoundry/cli/cf/errors"
    11  	"github.com/cloudfoundry/cli/cf/models"
    12  	"github.com/cloudfoundry/cli/cf/net"
    13  )
    14  
    15  //go:generate counterfeiter -o fakes/fake_organization_repository.go . OrganizationRepository
    16  type OrganizationRepository interface {
    17  	ListOrgs() (orgs []models.Organization, apiErr error)
    18  	GetManyOrgsByGuid(orgGuids []string) (orgs []models.Organization, apiErr error)
    19  	FindByName(name string) (org models.Organization, apiErr error)
    20  	Create(org models.Organization) (apiErr error)
    21  	Rename(orgGuid string, name string) (apiErr error)
    22  	Delete(orgGuid string) (apiErr error)
    23  	SharePrivateDomain(orgGuid string, domainGuid string) (apiErr error)
    24  	UnsharePrivateDomain(orgGuid string, domainGuid string) (apiErr error)
    25  }
    26  
    27  type CloudControllerOrganizationRepository struct {
    28  	config  core_config.Reader
    29  	gateway net.Gateway
    30  }
    31  
    32  func NewCloudControllerOrganizationRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerOrganizationRepository) {
    33  	repo.config = config
    34  	repo.gateway = gateway
    35  	return
    36  }
    37  
    38  func (repo CloudControllerOrganizationRepository) ListOrgs() ([]models.Organization, error) {
    39  	orgs := []models.Organization{}
    40  	err := repo.gateway.ListPaginatedResources(
    41  		repo.config.ApiEndpoint(),
    42  		"/v2/organizations",
    43  		resources.OrganizationResource{},
    44  		func(resource interface{}) bool {
    45  			orgResource, ok := resource.(resources.OrganizationResource)
    46  			if ok {
    47  				orgs = append(orgs, orgResource.ToModel())
    48  				return true
    49  			} else {
    50  				return false
    51  			}
    52  		})
    53  	return orgs, err
    54  }
    55  
    56  func (repo CloudControllerOrganizationRepository) GetManyOrgsByGuid(orgGuids []string) (orgs []models.Organization, err error) {
    57  	for _, orgGuid := range orgGuids {
    58  		url := fmt.Sprintf("%s/v2/organizations/%s", repo.config.ApiEndpoint(), orgGuid)
    59  		orgResource := resources.OrganizationResource{}
    60  		err = repo.gateway.GetResource(url, &orgResource)
    61  		if err != nil {
    62  			return nil, err
    63  		} else {
    64  			orgs = append(orgs, orgResource.ToModel())
    65  		}
    66  	}
    67  	return
    68  }
    69  
    70  func (repo CloudControllerOrganizationRepository) FindByName(name string) (org models.Organization, apiErr error) {
    71  	found := false
    72  	apiErr = repo.gateway.ListPaginatedResources(
    73  		repo.config.ApiEndpoint(),
    74  		fmt.Sprintf("/v2/organizations?q=%s&inline-relations-depth=1", url.QueryEscape("name:"+strings.ToLower(name))),
    75  		resources.OrganizationResource{},
    76  		func(resource interface{}) bool {
    77  			org = resource.(resources.OrganizationResource).ToModel()
    78  			found = true
    79  			return false
    80  		})
    81  
    82  	if apiErr == nil && !found {
    83  		apiErr = errors.NewModelNotFoundError("Organization", name)
    84  	}
    85  
    86  	return
    87  }
    88  
    89  func (repo CloudControllerOrganizationRepository) Create(org models.Organization) (apiErr error) {
    90  	data := fmt.Sprintf(`{"name":"%s"`, org.Name)
    91  	if org.QuotaDefinition.Guid != "" {
    92  		data = data + fmt.Sprintf(`, "quota_definition_guid":"%s"`, org.QuotaDefinition.Guid)
    93  	}
    94  	data = data + "}"
    95  	return repo.gateway.CreateResource(repo.config.ApiEndpoint(), "/v2/organizations", strings.NewReader(data))
    96  }
    97  
    98  func (repo CloudControllerOrganizationRepository) Rename(orgGuid string, name string) (apiErr error) {
    99  	url := fmt.Sprintf("/v2/organizations/%s", orgGuid)
   100  	data := fmt.Sprintf(`{"name":"%s"}`, name)
   101  	return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), url, strings.NewReader(data))
   102  }
   103  
   104  func (repo CloudControllerOrganizationRepository) Delete(orgGuid string) (apiErr error) {
   105  	url := fmt.Sprintf("/v2/organizations/%s?recursive=true", orgGuid)
   106  	return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), url)
   107  }
   108  
   109  func (repo CloudControllerOrganizationRepository) SharePrivateDomain(orgGuid string, domainGuid string) error {
   110  	url := fmt.Sprintf("/v2/organizations/%s/private_domains/%s", orgGuid, domainGuid)
   111  	return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), url, nil)
   112  }
   113  
   114  func (repo CloudControllerOrganizationRepository) UnsharePrivateDomain(orgGuid string, domainGuid string) error {
   115  	url := fmt.Sprintf("/v2/organizations/%s/private_domains/%s", orgGuid, domainGuid)
   116  	return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), url)
   117  }