github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/tools/lxdclient/client_cert.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  // +build go1.3
     5  
     6  package lxdclient
     7  
     8  import (
     9  	"crypto/x509"
    10  
    11  	"github.com/juju/errors"
    12  	"github.com/lxc/lxd/shared"
    13  )
    14  
    15  type rawCertClient interface {
    16  	CertificateList() ([]shared.CertInfo, error)
    17  	CertificateAdd(cert *x509.Certificate, name string) error
    18  	CertificateRemove(fingerprint string) error
    19  }
    20  
    21  type certClient struct {
    22  	raw rawCertClient
    23  }
    24  
    25  // AddCert adds the given certificate to the server.
    26  func (c certClient) AddCert(cert Cert) error {
    27  	x509Cert, err := cert.X509()
    28  	if err != nil {
    29  		return errors.Trace(err)
    30  	}
    31  
    32  	if err := c.raw.CertificateAdd(x509Cert, cert.Name); err != nil {
    33  		return errors.Trace(err)
    34  	}
    35  
    36  	return nil
    37  }
    38  
    39  // ListCerts returns the list of cert fingerprints from the server.
    40  func (c certClient) ListCerts() ([]string, error) {
    41  	certs, err := c.raw.CertificateList()
    42  	if err != nil {
    43  		return nil, errors.Trace(err)
    44  	}
    45  
    46  	var fingerprints []string
    47  	for _, cert := range certs {
    48  		fingerprints = append(fingerprints, cert.Fingerprint)
    49  	}
    50  	return fingerprints, nil
    51  }
    52  
    53  // RemoveCert removes the cert from the server.
    54  func (c certClient) RemoveCert(cert *Cert) error {
    55  	fingerprint, err := cert.Fingerprint()
    56  	if err != nil {
    57  		return errors.Trace(err)
    58  	}
    59  
    60  	if err := c.raw.CertificateRemove(fingerprint); err != nil {
    61  		return errors.Trace(err)
    62  	}
    63  	return nil
    64  }
    65  
    66  // RemoveCertByFingerprint removes the cert from the server.
    67  func (c certClient) RemoveCertByFingerprint(fingerprint string) error {
    68  	if err := c.raw.CertificateRemove(fingerprint); err != nil {
    69  		return errors.Trace(err)
    70  	}
    71  	return nil
    72  }