aboutsummaryrefslogtreecommitdiff
path: root/certificate.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-01-31 23:15:27 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-01-31 23:15:27 +0100
commitc49a0bf48ea10b54dbac3480716d9786a0ce8411 (patch)
tree3ce88f2422f3484aa95f77669fdafdfb6b2e63d9 /certificate.go
parentc9038d2f35945774f6cd32ade7b3abd1cd5ba952 (diff)
Split files (experimental)
Diffstat (limited to 'certificate.go')
-rw-r--r--certificate.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/certificate.go b/certificate.go
new file mode 100644
index 0000000..4421061
--- /dev/null
+++ b/certificate.go
@@ -0,0 +1,42 @@
+package acme
+
+import "crypto/x509"
+
+type CSR struct {
+ Resource Resource `json:"resource"` // new-cert
+ CSR string `json:"csr"`
+}
+
+func (p *Provider) Bundle(s Signer, d *Desire) error {
+ d.cert = make([]*x509.Certificate, 2)
+ // first step: post csr
+ csr, err := d.CSR()
+ if err != nil {
+ return err
+ }
+ req := &CSR{
+ Resource: ResNewCert,
+ CSR: csr,
+ }
+ resp, err := p.post(p.NewCert, s, req)
+ if err != nil {
+ return err
+ }
+ d.cert[0], err = parseCert(resp)
+ if err != nil {
+ return err
+ }
+ ns := parseHeader(resp)
+
+ // second step: cet CA
+ resp, err = p.Get(ns.Link["up"])
+ if err != nil {
+ return err
+ }
+ d.cert[1], err = parseCert(resp)
+ if err != nil {
+ return err
+ }
+
+ return nil
+}