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 }