package acme type CSR struct { Resource Resource `json:"resource"` // new-cert CSR string `json:"csr"` } func (p *Provider) Bundle(s Signer, d *Desire) error { csr, err := d.CSR() if err != nil { return err } crt, up, err := p.RequestCert(s, d, csr) if err != nil { return err } ca, err := p.GetCert(up) if err != nil { return err } d.cert.Certificate = [][]byte{crt, ca} return nil } func (p *Provider) RequestCert(s Signer, d *Desire, csr string) ([]byte, string, error) { req := &CSR{ Resource: ResNewCert, CSR: csr, } resp, err := p.post(p.NewCert, s, req) if err != nil { return nil, "", err } ns := parseHeader(resp) crt, err := parseCert(resp) if err != nil { return nil, "", err } return crt, ns.Link["up"], nil } func (p *Provider) GetCert(uri string) ([]byte, error) { resp, err := p.Get(uri) if err != nil { return nil, err } return parseCert(resp) }