package incus
import (
"fmt"
"net/url"
"github.com/lxc/incus/v6/shared/api"
)
func (r *ProtocolIncus) GetCertificateFingerprints() ([]string, error) {
urls := []string{}
baseURL := "/certificates"
_, err := r.queryStruct("GET", baseURL, nil, "", &urls)
if err != nil {
return nil, err
}
return urlsToResourceNames(baseURL, urls...)
}
func (r *ProtocolIncus) GetCertificates() ([]api.Certificate, error) {
certificates := []api.Certificate{}
_, err := r.queryStruct("GET", "/certificates?recursion=1", nil, "", &certificates)
if err != nil {
return nil, err
}
return certificates, nil
}
func (r *ProtocolIncus) GetCertificate(fingerprint string) (*api.Certificate, string, error) {
certificate := api.Certificate{}
etag, err := r.queryStruct("GET", fmt.Sprintf("/certificates/%s", url.PathEscape(fingerprint)), nil, "", &certificate)
if err != nil {
return nil, "", err
}
return &certificate, etag, nil
}
func (r *ProtocolIncus) CreateCertificate(certificate api.CertificatesPost) error {
_, _, err := r.query("POST", "/certificates", certificate, "")
if err != nil {
return err
}
return nil
}
func (r *ProtocolIncus) UpdateCertificate(fingerprint string, certificate api.CertificatePut, ETag string) error {
if !r.HasExtension("certificate_update") {
return fmt.Errorf("The server is missing the required \"certificate_update\" API extension")
}
_, _, err := r.query("PUT", fmt.Sprintf("/certificates/%s", url.PathEscape(fingerprint)), certificate, ETag)
if err != nil {
return err
}
return nil
}
func (r *ProtocolIncus) DeleteCertificate(fingerprint string) error {
_, _, err := r.query("DELETE", fmt.Sprintf("/certificates/%s", url.PathEscape(fingerprint)), nil, "")
if err != nil {
return err
}
return nil
}
func (r *ProtocolIncus) CreateCertificateToken(certificate api.CertificatesPost) (Operation, error) {
if !r.HasExtension("certificate_token") {
return nil, fmt.Errorf("The server is missing the required \"certificate_token\" API extension")
}
if !certificate.Token {
return nil, fmt.Errorf("Token needs to be true if requesting a token")
}
op, _, err := r.queryOperation("POST", "/certificates", certificate, "")
if err != nil {
return nil, err
}
return op, nil
}