aboutsummaryrefslogtreecommitdiff
path: root/provider.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-01-11 19:14:07 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-01-11 19:14:07 +0100
commit83804cb3971d32b460783eb934592a6e6c821e6d (patch)
treebe7183725f893145383328057bcce79ef68a2432 /provider.go
parent19ae5a8bf500dd50c23b15c8e52d975f784ffa02 (diff)
Split a bit
Diffstat (limited to 'provider.go')
-rw-r--r--provider.go65
1 files changed, 35 insertions, 30 deletions
diff --git a/provider.go b/provider.go
index ec765cf..7b2b1bd 100644
--- a/provider.go
+++ b/provider.go
@@ -132,36 +132,36 @@ func cert(r io.Reader) (*x509.Certificate, error) {
return x509.ParseCertificate(der)
}
-func (p *Provider) Register(s Signer, c Contacts) error {
+func (p *Provider) newReg(uri string, s Signer, c Contacts) (nextStep, error) {
r := &Registration{
Resource: ResNewReg,
Contact: c,
}
-
- resp, err := p.post(p.NewReg, s, r)
+ resp, err := p.post(uri, s, r)
if err != nil {
- return err
- }
-
- ns, err := p.parseJson(resp, r)
-
- if err != nil && err.(Problem).Err != ErrMalformed {
- return err
+ return nextStep{}, err
}
+ return p.parseJson(resp, r)
+}
- r = &Registration{
+func (p *Provider) agree(uri string, s Signer, tos string) (nextStep, error) {
+ r := &Registration{
Resource: ResReg,
- Contact: c,
- Agreement: ns.Link["terms-of-service"],
+ Agreement: tos,
}
-
- resp, err = p.post(ns.Location, s, r)
+ resp, err := p.post(uri, s, r)
if err != nil {
- return err
+ return nextStep{}, err
}
+ return p.parseJson(resp, r)
+}
- _, err = p.parseJson(resp, r)
-
+func (p *Provider) Register(s Signer, c Contacts) error {
+ ns, err := p.newReg(p.NewReg, s, c)
+ if err != nil && err.(Problem).Err != ErrMalformed {
+ return err
+ }
+ _, err = p.agree(ns.Location, s, ns.Link["terms-of-service"])
return err
}
@@ -226,8 +226,7 @@ func (p *Provider) Authorize(s ThumbSigner, d *Desire) error {
return err
}
- sol := d.solver[ch.Type]
- err = sol.Solve(ch.Token, ka)
+ err = d.solver[ch.Type].Solve(ch.Token, ka)
if err != nil {
return err
}
@@ -259,33 +258,39 @@ func (p *Provider) queryStatus(url string) (bool, error) {
return r.Status == StatusValid, nil
}
-func (p *Provider) Cert(s Signer, d *Desire) error {
+func (p *Provider) newCert(uri string, s Signer, d *Desire) (*x509.Certificate, nextStep, error) {
csr, err := NewCSR(d.altnames, d.key)
if err != nil {
- return err
+ return nil, nextStep{}, err
}
r := &CSR{
Resource: ResNewCert,
CSR: csr,
}
-
- resp, err := p.post(p.NewCert, s, r)
+ resp, err := p.post(uri, s, r)
if err != nil {
- return err
+ return nil, nextStep{}, err
}
+ return p.parseCert(resp)
+}
- crt, ns, err := p.parseCert(resp)
+func (p *Provider) newCA(uri string) (*x509.Certificate, nextStep, error) {
+ resp, err := p.Get(uri)
if err != nil {
- return err
+ return nil, nextStep{}, err
}
- d.cert = append(d.cert, crt)
+ return p.parseCert(resp)
+}
- resp, err = p.Get(ns.Link["up"])
+func (p *Provider) Cert(s Signer, d *Desire) error {
+ crt, ns, err := p.newCert(p.NewCert, s, d)
if err != nil {
return err
}
+ d.cert = append(d.cert, crt)
+ // TODO Get cert on empty response
- crt, _, err = p.parseCert(resp)
+ crt, _, err = p.newCA(ns.Link["up"])
if err != nil {
return err
}