github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/certificatemanager/certificate.go (about)

     1  package certificatemanager
     2  
     3  import (
     4  	"fmt"
     5  	"net/url"
     6  
     7  	"github.com/IBM-Cloud/bluemix-go/client"
     8  	"github.com/IBM-Cloud/bluemix-go/models"
     9  )
    10  
    11  //Certificate Interface
    12  type Certificate interface {
    13  	ImportCertificate(InstanceID string, importData models.CertificateImportData) (models.CertificateInfo, error)
    14  	OrderCertificate(InstanceID string, orderData models.CertificateOrderData) (models.CertificateInfo, error)
    15  	RenewCertificate(CertID string, RenewData models.CertificateRenewData) (models.CertificateInfo, error)
    16  	GetMetaData(CertID string) (models.CertificateInfo, error)
    17  	GetCertData(CertID string) (models.CertificateGetData, error)
    18  	DeleteCertificate(CertID string) error
    19  	UpdateCertificateMetaData(CertID string, updateData models.CertificateMetadataUpdate) error
    20  	ReimportCertificate(CertID string, reimportData models.CertificateReimportData) (models.CertificateInfo, error)
    21  	ListCertificates(InstanceID string) ([]models.CertificateInfo, error)
    22  	UpdateOrderPolicy(CertID string, autoRenew models.OrderPolicy) (models.OrderPolicy, error)
    23  }
    24  
    25  //Certificates client struct
    26  type Certificates struct {
    27  	client *client.Client
    28  }
    29  
    30  func newCertificateAPI(c *client.Client) Certificate {
    31  	return &Certificates{
    32  		client: c,
    33  	}
    34  }
    35  
    36  //ImportCertificate ..
    37  func (r *Certificates) ImportCertificate(InstanceID string, importData models.CertificateImportData) (models.CertificateInfo, error) {
    38  	certInfo := models.CertificateInfo{}
    39  	_, err := r.client.Post(fmt.Sprintf("/api/v3/%s/certificates/import", url.QueryEscape(InstanceID)), importData, &certInfo)
    40  	if err != nil {
    41  		return certInfo, err
    42  	}
    43  	return certInfo, err
    44  }
    45  
    46  //OrderCertificate ...
    47  func (r *Certificates) OrderCertificate(InstanceID string, orderdata models.CertificateOrderData) (models.CertificateInfo, error) {
    48  	certInfo := models.CertificateInfo{}
    49  	_, err := r.client.Post(fmt.Sprintf("/api/v1/%s/certificates/order", url.QueryEscape(InstanceID)), orderdata, &certInfo)
    50  	if err != nil {
    51  		return certInfo, err
    52  	}
    53  	return certInfo, err
    54  }
    55  
    56  //RenewCertificate ...
    57  func (r *Certificates) RenewCertificate(CertID string, renewdata models.CertificateRenewData) (models.CertificateInfo, error) {
    58  	certInfo := models.CertificateInfo{}
    59  	_, err := r.client.Post(fmt.Sprintf("/api/v1/certificate/%s/renew", url.QueryEscape(CertID)), renewdata, &certInfo)
    60  	if err != nil {
    61  		return certInfo, err
    62  	}
    63  	return certInfo, err
    64  }
    65  
    66  //GetMetaData ...
    67  func (r *Certificates) GetMetaData(CertID string) (models.CertificateInfo, error) {
    68  	certInfo := models.CertificateInfo{}
    69  	_, err := r.client.Get(fmt.Sprintf("/api/v1/certificate/%s/metadata", url.QueryEscape(CertID)), &certInfo)
    70  	if err != nil {
    71  		return certInfo, err
    72  	}
    73  	return certInfo, err
    74  }
    75  
    76  //GetCertData ...
    77  func (r *Certificates) GetCertData(CertID string) (models.CertificateGetData, error) {
    78  	certInfo := models.CertificateGetData{}
    79  	_, err := r.client.Get(fmt.Sprintf("/api/v2/certificate/%s", url.QueryEscape(CertID)), &certInfo)
    80  	if err != nil {
    81  		return certInfo, err
    82  	}
    83  	return certInfo, err
    84  }
    85  
    86  // DeleteCertificate ...
    87  func (r *Certificates) DeleteCertificate(CertID string) error {
    88  	_, err := r.client.Delete(fmt.Sprintf("/api/v2/certificate/%s", url.QueryEscape(CertID)))
    89  	return err
    90  }
    91  
    92  // UpdateCertificateMetaData ...
    93  func (r *Certificates) UpdateCertificateMetaData(CertID string, updatemetaData models.CertificateMetadataUpdate) error {
    94  	_, err := r.client.Post(fmt.Sprintf("/api/v3/certificate/%s", url.QueryEscape(CertID)), updatemetaData, nil)
    95  	return err
    96  }
    97  
    98  // ReimportCertificate ...
    99  func (r *Certificates) ReimportCertificate(CertID string, reimportData models.CertificateReimportData) (models.CertificateInfo, error) {
   100  	certInfo := models.CertificateInfo{}
   101  	_, err := r.client.Put(fmt.Sprintf("/api/v1/certificate/%s", url.QueryEscape(CertID)), reimportData, &certInfo)
   102  	if err != nil {
   103  		return certInfo, err
   104  	}
   105  	return certInfo, err
   106  }
   107  
   108  //ListCertificates ...
   109  func (r *Certificates) ListCertificates(InstanceID string) ([]models.CertificateInfo, error) {
   110  	certificatesInfo := models.CertificatesInfo{}
   111  	rawURL := fmt.Sprintf("/api/v3/%s/certificates?page_size=200", url.QueryEscape(InstanceID))
   112  	if _, err := r.client.GetPaginated(rawURL, NewCMSPaginatedResources(models.CertificateInfo{}), func(resource interface{}) bool {
   113  		if certificate, ok := resource.(models.CertificateInfo); ok {
   114  			certificatesInfo.CertificateList = append(certificatesInfo.CertificateList, certificate)
   115  			return true
   116  		}
   117  		return false
   118  	}); err != nil {
   119  		return nil, fmt.Errorf("failed to list paginated Certificates: %s", err)
   120  	}
   121  	return certificatesInfo.CertificateList, nil
   122  }
   123  
   124  //UpdateOrderPolicy ..
   125  func (r *Certificates) UpdateOrderPolicy(CertID string, autoRenew models.OrderPolicy) (models.OrderPolicy, error) {
   126  	orderPolicyInfo := models.OrderPolicy{}
   127  	_, err := r.client.Put(fmt.Sprintf("/api/v1/certificate/%s/order/policy", url.QueryEscape(CertID)), autoRenew, &orderPolicyInfo)
   128  	if err != nil {
   129  		return orderPolicyInfo, err
   130  	}
   131  	return orderPolicyInfo, err
   132  }