github.com/orange-cloudfoundry/cli@v7.1.0+incompatible/api/cloudcontroller/ccv3/domain.go (about)

     1  package ccv3
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  
     7  	"code.cloudfoundry.org/cli/api/cloudcontroller"
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/internal"
     9  	"code.cloudfoundry.org/cli/resources"
    10  )
    11  
    12  type SharedOrgs struct {
    13  	GUIDs []string
    14  }
    15  
    16  func (sharedOrgs SharedOrgs) MarshalJSON() ([]byte, error) {
    17  	type Org struct {
    18  		GUID string `json:"guid,omitempty"`
    19  	}
    20  
    21  	type Data = []Org
    22  
    23  	type sharedOrgsRelationship struct {
    24  		Data Data `json:"data"`
    25  	}
    26  
    27  	var orgs []Org
    28  	for _, sharedOrgGUID := range sharedOrgs.GUIDs {
    29  		orgs = append(orgs, Org{GUID: sharedOrgGUID})
    30  	}
    31  
    32  	relationship := sharedOrgsRelationship{
    33  		Data: orgs,
    34  	}
    35  
    36  	return json.Marshal(relationship)
    37  }
    38  
    39  func (sharedOrgs *SharedOrgs) UnmarshalJSON(data []byte) error {
    40  	var alias struct {
    41  		Data []struct {
    42  			GUID string `json:"guid,omitempty"`
    43  		} `json:"data,omitempty"`
    44  	}
    45  
    46  	err := cloudcontroller.DecodeJSON(data, &alias)
    47  	if err != nil {
    48  		return err
    49  	}
    50  
    51  	var guids []string
    52  	for _, org := range alias.Data {
    53  		guids = append(guids, org.GUID)
    54  	}
    55  
    56  	sharedOrgs.GUIDs = guids
    57  	return nil
    58  }
    59  
    60  // CheckRoute checks whether the route with the given domain GUID, hostname,
    61  // and path exists in the foundation.
    62  func (client Client) CheckRoute(domainGUID string, hostname string, path string, port int) (bool, Warnings, error) {
    63  	var query []Query
    64  
    65  	if hostname != "" {
    66  		query = append(query, Query{Key: HostFilter, Values: []string{hostname}})
    67  	}
    68  
    69  	if path != "" {
    70  		query = append(query, Query{Key: PathFilter, Values: []string{path}})
    71  	}
    72  
    73  	if port != 0 {
    74  		query = append(query, Query{Key: PortFilter, Values: []string{fmt.Sprintf("%d", port)}})
    75  	}
    76  
    77  	var responseBody struct {
    78  		MatchingRoute bool `json:"matching_route"`
    79  	}
    80  
    81  	_, warnings, err := client.MakeRequest(RequestParams{
    82  		RequestName:  internal.GetDomainRouteReservationsRequest,
    83  		URIParams:    internal.Params{"domain_guid": domainGUID},
    84  		Query:        query,
    85  		ResponseBody: &responseBody,
    86  	})
    87  
    88  	return responseBody.MatchingRoute, warnings, err
    89  }
    90  
    91  func (client Client) CreateDomain(domain resources.Domain) (resources.Domain, Warnings, error) {
    92  	var responseBody resources.Domain
    93  
    94  	_, warnings, err := client.MakeRequest(RequestParams{
    95  		RequestName:  internal.PostDomainRequest,
    96  		RequestBody:  domain,
    97  		ResponseBody: &responseBody,
    98  	})
    99  
   100  	return responseBody, warnings, err
   101  }
   102  
   103  func (client Client) DeleteDomain(domainGUID string) (JobURL, Warnings, error) {
   104  	jobURL, warnings, err := client.MakeRequest(RequestParams{
   105  		RequestName: internal.DeleteDomainRequest,
   106  		URIParams:   internal.Params{"domain_guid": domainGUID},
   107  	})
   108  
   109  	return jobURL, warnings, err
   110  }
   111  
   112  // GetDomain returns a domain with the given GUID.
   113  func (client *Client) GetDomain(domainGUID string) (resources.Domain, Warnings, error) {
   114  	var responseBody resources.Domain
   115  
   116  	_, warnings, err := client.MakeRequest(RequestParams{
   117  		RequestName:  internal.GetDomainRequest,
   118  		URIParams:    internal.Params{"domain_guid": domainGUID},
   119  		ResponseBody: &responseBody,
   120  	})
   121  
   122  	return responseBody, warnings, err
   123  }
   124  
   125  func (client Client) GetDomains(query ...Query) ([]resources.Domain, Warnings, error) {
   126  	var domains []resources.Domain
   127  
   128  	_, warnings, err := client.MakeListRequest(RequestParams{
   129  		RequestName:  internal.GetDomainsRequest,
   130  		Query:        query,
   131  		ResponseBody: resources.Domain{},
   132  		AppendToList: func(item interface{}) error {
   133  			domains = append(domains, item.(resources.Domain))
   134  			return nil
   135  		},
   136  	})
   137  
   138  	return domains, warnings, err
   139  }
   140  
   141  func (client Client) GetOrganizationDomains(orgGUID string, query ...Query) ([]resources.Domain, Warnings, error) {
   142  	var domains []resources.Domain
   143  
   144  	_, warnings, err := client.MakeListRequest(RequestParams{
   145  		URIParams:    internal.Params{"organization_guid": orgGUID},
   146  		RequestName:  internal.GetOrganizationDomainsRequest,
   147  		Query:        query,
   148  		ResponseBody: resources.Domain{},
   149  		AppendToList: func(item interface{}) error {
   150  			domains = append(domains, item.(resources.Domain))
   151  			return nil
   152  		},
   153  	})
   154  
   155  	return domains, warnings, err
   156  }
   157  
   158  func (client Client) SharePrivateDomainToOrgs(domainGuid string, sharedOrgs SharedOrgs) (Warnings, error) {
   159  	_, warnings, err := client.MakeRequest(RequestParams{
   160  		RequestName: internal.SharePrivateDomainRequest,
   161  		URIParams:   internal.Params{"domain_guid": domainGuid},
   162  		RequestBody: sharedOrgs,
   163  	})
   164  
   165  	return warnings, err
   166  }
   167  
   168  func (client Client) UnsharePrivateDomainFromOrg(domainGuid string, orgGUID string) (Warnings, error) {
   169  	_, warnings, err := client.MakeRequest(RequestParams{
   170  		RequestName: internal.DeleteSharedOrgFromDomainRequest,
   171  		URIParams:   internal.Params{"domain_guid": domainGuid, "org_guid": orgGUID},
   172  	})
   173  
   174  	return warnings, err
   175  }