github.com/cloudfoundry-community/cloudfoundry-cli@v6.44.1-0.20240130060226-cda5ed8e89a5+incompatible/actor/v7action/domain.go (about)

     1  package v7action
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/resources"
     5  	"fmt"
     6  
     7  	"code.cloudfoundry.org/cli/actor/actionerror"
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
     9  	"code.cloudfoundry.org/cli/types"
    10  )
    11  
    12  type Domain resources.Domain
    13  
    14  type SharedOrgs ccv3.SharedOrgs
    15  
    16  func (domain Domain) Shared() bool {
    17  	return domain.OrganizationGUID == ""
    18  }
    19  
    20  func (actor Actor) CreateSharedDomain(domainName string, internal bool) (Warnings, error) {
    21  	_, warnings, err := actor.CloudControllerClient.CreateDomain(resources.Domain{
    22  		Name:     domainName,
    23  		Internal: types.NullBool{IsSet: true, Value: internal},
    24  	})
    25  	return Warnings(warnings), err
    26  }
    27  
    28  func (actor Actor) CreatePrivateDomain(domainName string, orgName string) (Warnings, error) {
    29  	allWarnings := Warnings{}
    30  	organization, warnings, err := actor.GetOrganizationByName(orgName)
    31  	allWarnings = append(allWarnings, warnings...)
    32  
    33  	if err != nil {
    34  		return allWarnings, err
    35  	}
    36  	_, apiWarnings, err := actor.CloudControllerClient.CreateDomain(resources.Domain{
    37  		Name:             domainName,
    38  		OrganizationGUID: organization.GUID,
    39  	})
    40  
    41  	actorWarnings := Warnings(apiWarnings)
    42  	allWarnings = append(allWarnings, actorWarnings...)
    43  
    44  	return allWarnings, err
    45  }
    46  
    47  func (actor Actor) DeleteSharedDomain(domainName string) (Warnings, error) {
    48  	allWarnings := Warnings{}
    49  	domain, warnings, err := actor.GetDomainByName(domainName)
    50  	allWarnings = append(allWarnings, warnings...)
    51  
    52  	if err != nil {
    53  		return allWarnings, err
    54  	}
    55  
    56  	_, apiWarnings, err := actor.CloudControllerClient.DeleteDomain(domain.GUID)
    57  
    58  	actorWarnings := Warnings(apiWarnings)
    59  	allWarnings = append(allWarnings, actorWarnings...)
    60  
    61  	return allWarnings, err
    62  }
    63  
    64  func (actor Actor) DeletePrivateDomain(domainName string) (Warnings, error) {
    65  	allWarnings := Warnings{}
    66  	domain, warnings, err := actor.GetDomainByName(domainName)
    67  
    68  	allWarnings = append(allWarnings, warnings...)
    69  
    70  	if err != nil {
    71  		return allWarnings, err
    72  	}
    73  	_, apiWarnings, err := actor.CloudControllerClient.DeleteDomain(domain.GUID)
    74  
    75  	actorWarnings := Warnings(apiWarnings)
    76  	allWarnings = append(allWarnings, actorWarnings...)
    77  
    78  	return allWarnings, err
    79  }
    80  
    81  func (actor Actor) CheckSharedDomain(domainName string) (Warnings, error) {
    82  	allWarnings := Warnings{}
    83  	domain, warnings, err := actor.GetDomainByName(domainName)
    84  
    85  	allWarnings = append(allWarnings, warnings...)
    86  
    87  	if err != nil {
    88  		return allWarnings, err
    89  	}
    90  	if domain.Shared() {
    91  		err = fmt.Errorf("Domain '%s' is a shared domain, not a private domain.", domainName)
    92  	}
    93  
    94  	return allWarnings, err
    95  }
    96  
    97  func (actor Actor) GetOrganizationDomains(orgGuid string) ([]Domain, Warnings, error) {
    98  	ccv3Domains, warnings, err := actor.CloudControllerClient.GetOrganizationDomains(orgGuid)
    99  
   100  	if err != nil {
   101  		return nil, Warnings(warnings), err
   102  	}
   103  
   104  	var domains []Domain
   105  	for _, domain := range ccv3Domains {
   106  		domains = append(domains, Domain(domain))
   107  	}
   108  
   109  	return domains, Warnings(warnings), nil
   110  }
   111  
   112  func (actor Actor) GetDomainByName(domainName string) (Domain, Warnings, error) {
   113  	domains, warnings, err := actor.CloudControllerClient.GetDomains(
   114  		ccv3.Query{Key: ccv3.NameFilter, Values: []string{domainName}},
   115  	)
   116  
   117  	if err != nil {
   118  		return Domain{}, Warnings(warnings), err
   119  	}
   120  
   121  	if len(domains) == 0 {
   122  		return Domain{}, Warnings(warnings), actionerror.DomainNotFoundError{Name: domainName}
   123  	}
   124  
   125  	return Domain(domains[0]), Warnings(warnings), nil
   126  }
   127  
   128  func (actor Actor) SharePrivateDomain(domainName string, orgName string) (Warnings, error) {
   129  	orgGUID, domainGUID, warnings, err := actor.GetDomainAndOrgGUIDsByName(domainName, orgName)
   130  
   131  	if err != nil {
   132  		return warnings, err
   133  	}
   134  
   135  	apiWarnings, err := actor.CloudControllerClient.SharePrivateDomainToOrgs(
   136  		domainGUID,
   137  		ccv3.SharedOrgs{GUIDs: []string{orgGUID}},
   138  	)
   139  
   140  	allWarnings := append(warnings, Warnings(apiWarnings)...)
   141  
   142  	return allWarnings, err
   143  }
   144  
   145  func (actor Actor) UnsharePrivateDomain(domainName string, orgName string) (Warnings, error) {
   146  	orgGUID, domainGUID, warnings, err := actor.GetDomainAndOrgGUIDsByName(domainName, orgName)
   147  
   148  	if err != nil {
   149  		return warnings, err
   150  	}
   151  
   152  	apiWarnings, err := actor.CloudControllerClient.UnsharePrivateDomainFromOrg(
   153  		domainGUID,
   154  		orgGUID,
   155  	)
   156  
   157  	allWarnings := append(warnings, Warnings(apiWarnings)...)
   158  
   159  	return allWarnings, err
   160  }
   161  
   162  func (actor Actor) GetDomainAndOrgGUIDsByName(domainName string, orgName string) (string, string, Warnings, error) {
   163  	org, getOrgWarnings, err := actor.GetOrganizationByName(orgName)
   164  
   165  	if err != nil {
   166  		return "", "", getOrgWarnings, err
   167  	}
   168  
   169  	domain, getDomainWarnings, err := actor.GetDomainByName(domainName)
   170  	allWarnings := append(getOrgWarnings, getDomainWarnings...)
   171  
   172  	if err != nil {
   173  		return "", "", allWarnings, err
   174  	}
   175  
   176  	return org.GUID, domain.GUID, allWarnings, nil
   177  }