github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/api/cloudcontroller/ccv2/domain.go (about)

     1  package ccv2
     2  
     3  import (
     4  	"encoding/json"
     5  
     6  	"code.cloudfoundry.org/cli/api/cloudcontroller"
     7  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/internal"
     9  )
    10  
    11  // Domain represents a Cloud Controller Domain.
    12  type Domain struct {
    13  	GUID string
    14  	Name string
    15  }
    16  
    17  // UnmarshalJSON helps unmarshal a Cloud Controller Domain response.
    18  func (domain *Domain) UnmarshalJSON(data []byte) error {
    19  	var ccDomain struct {
    20  		Metadata internal.Metadata `json:"metadata"`
    21  		Entity   struct {
    22  			Name string `json:"name"`
    23  		} `json:"entity"`
    24  	}
    25  	if err := json.Unmarshal(data, &ccDomain); err != nil {
    26  		return err
    27  	}
    28  
    29  	domain.GUID = ccDomain.Metadata.GUID
    30  	domain.Name = ccDomain.Entity.Name
    31  	return nil
    32  }
    33  
    34  // GetSharedDomain returns the Shared Domain associated with the provided
    35  // Domain GUID.
    36  func (client *Client) GetSharedDomain(domainGUID string) (Domain, Warnings, error) {
    37  	request, err := client.newHTTPRequest(requestOptions{
    38  		RequestName: internal.GetSharedDomainRequest,
    39  		URIParams:   map[string]string{"shared_domain_guid": domainGUID},
    40  	})
    41  	if err != nil {
    42  		return Domain{}, nil, err
    43  	}
    44  
    45  	var domain Domain
    46  	response := cloudcontroller.Response{
    47  		Result: &domain,
    48  	}
    49  
    50  	err = client.connection.Make(request, &response)
    51  	if err != nil {
    52  		return Domain{}, response.Warnings, err
    53  	}
    54  
    55  	return domain, response.Warnings, nil
    56  }
    57  
    58  // GetPrivateDomain returns the Private Domain associated with the provided
    59  // Domain GUID.
    60  func (client *Client) GetPrivateDomain(domainGUID string) (Domain, Warnings, error) {
    61  	request, err := client.newHTTPRequest(requestOptions{
    62  		RequestName: internal.GetPrivateDomainRequest,
    63  		URIParams:   map[string]string{"private_domain_guid": domainGUID},
    64  	})
    65  	if err != nil {
    66  		return Domain{}, nil, err
    67  	}
    68  
    69  	var domain Domain
    70  	response := cloudcontroller.Response{
    71  		Result: &domain,
    72  	}
    73  
    74  	err = client.connection.Make(request, &response)
    75  	if err != nil {
    76  		return Domain{}, response.Warnings, err
    77  	}
    78  
    79  	return domain, response.Warnings, nil
    80  }
    81  
    82  // GetSharedDomains returns the global shared domains.
    83  func (client *Client) GetSharedDomains() ([]Domain, Warnings, error) {
    84  	request, err := client.newHTTPRequest(requestOptions{
    85  		RequestName: internal.GetSharedDomainsRequest,
    86  	})
    87  	if err != nil {
    88  		return []Domain{}, nil, err
    89  	}
    90  
    91  	fullDomainsList := []Domain{}
    92  	warnings, err := client.paginate(request, Domain{}, func(item interface{}) error {
    93  		if domain, ok := item.(Domain); ok {
    94  			fullDomainsList = append(fullDomainsList, domain)
    95  		} else {
    96  			return ccerror.UnknownObjectInListError{
    97  				Expected:   Domain{},
    98  				Unexpected: item,
    99  			}
   100  		}
   101  		return nil
   102  	})
   103  
   104  	return fullDomainsList, warnings, err
   105  }
   106  
   107  // GetOrganizationPrivateDomains returns the private domains associated with an organization.
   108  func (client *Client) GetOrganizationPrivateDomains(orgGUID string, queries []Query) ([]Domain, Warnings, error) {
   109  	request, err := client.newHTTPRequest(requestOptions{
   110  		RequestName: internal.GetOrganizationPrivateDomainsRequest,
   111  		Query:       FormatQueryParameters(queries),
   112  		URIParams:   map[string]string{"organization_guid": orgGUID},
   113  	})
   114  	if err != nil {
   115  		return []Domain{}, nil, err
   116  	}
   117  
   118  	fullDomainsList := []Domain{}
   119  	warnings, err := client.paginate(request, Domain{}, func(item interface{}) error {
   120  		if domain, ok := item.(Domain); ok {
   121  			fullDomainsList = append(fullDomainsList, domain)
   122  		} else {
   123  			return ccerror.UnknownObjectInListError{
   124  				Expected:   Domain{},
   125  				Unexpected: item,
   126  			}
   127  		}
   128  		return nil
   129  	})
   130  
   131  	return fullDomainsList, warnings, err
   132  }