From 7f3a0cdcae9aebb119e00253eb581b51e0ef8cc5 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 18 Jan 2016 18:40:54 +0100 Subject: Encapsulate --- desire.go | 7 ------- provider.go | 40 ++++++++++++++++++---------------------- solver.go | 8 ++++++++ 3 files changed, 26 insertions(+), 29 deletions(-) diff --git a/desire.go b/desire.go index 789007c..415a778 100644 --- a/desire.go +++ b/desire.go @@ -17,13 +17,6 @@ type Desire struct { webroot string } -// Solver decribes a solving interface -type Solver interface { - Solve(token, keyAuth string) error -} - -const WellKnown = `/.well-known/acme-challenge/` - func NewDesire(altnames []string, webroot string, size int) (*Desire, error) { key, err := rsa.GenerateKey(rand.Reader, size) if err != nil { diff --git a/provider.go b/provider.go index d160c94..551f8dc 100644 --- a/provider.go +++ b/provider.go @@ -69,17 +69,18 @@ func (p *Provider) postJson(uri string, s Signer, v interface{}) (nextStep, erro if err != nil { return nextStep{}, err } - return p.parseJson(resp, v) + return parseHeader(resp), parseJson(resp, v) } -func (p *Provider) postCert(uri string, s Signer, v interface{}) (*x509.Certificate, nextStep, error) { +func (p *Provider) postCert(uri string, s Signer, v interface{}) (nextStep, *x509.Certificate, error) { log.Println("post cert", uri) resp, err := p.post(uri, s, v) if err != nil { - return nil, nextStep{}, err + return nextStep{}, nil, err } log.Println("post len", resp.ContentLength) - return p.parseCert(resp) + cert, err := parseCert(resp) + return parseHeader(resp), cert, err } func (p *Provider) getJson(uri string, v interface{}) error { @@ -88,8 +89,7 @@ func (p *Provider) getJson(uri string, v interface{}) error { return err } p.nonce(resp) - _, err = p.parseJson(resp, v) - return err + return parseJson(resp, v) } func (p *Provider) getCert(uri string) (*x509.Certificate, error) { @@ -99,8 +99,7 @@ func (p *Provider) getCert(uri string) (*x509.Certificate, error) { } p.nonce(resp) log.Println("get len", resp.ContentLength) - crt, _, err := p.parseCert(resp) - return crt, err + return parseCert(resp) } type nextStep struct { @@ -125,30 +124,27 @@ func parseHeader(resp *http.Response) nextStep { return ns } -func (p *Provider) parseJson(resp *http.Response, v interface{}) (nextStep, error) { - ns := parseHeader(resp) +func parseJson(resp *http.Response, v interface{}) error { defer resp.Body.Close() switch resp.Header.Get("Content-Type") { case "application/problem+json": - return ns, problem(resp.Body) + return problem(resp.Body) case "application/json": - return ns, json.NewDecoder(resp.Body).Decode(v) + return json.NewDecoder(resp.Body).Decode(v) default: - return ns, errContentType + return errContentType } } -func (p *Provider) parseCert(resp *http.Response) (*x509.Certificate, nextStep, error) { - ns := parseHeader(resp) +func parseCert(resp *http.Response) (*x509.Certificate, error) { defer resp.Body.Close() switch resp.Header.Get("Content-Type") { case "application/problem+json": - return nil, ns, problem(resp.Body) + return nil, problem(resp.Body) case "application/pkix-cert": - c, err := readCert(resp.Body) - return c, ns, err + return readCert(resp.Body) default: - return nil, ns, errContentType + return nil, errContentType } } @@ -253,10 +249,10 @@ func (p *Provider) queryStatus(url string) (bool, error) { return r.Status == StatusValid, nil } -func (p *Provider) newCert(uri string, s Signer, d *Desire) (*x509.Certificate, nextStep, error) { +func (p *Provider) newCert(uri string, s Signer, d *Desire) (nextStep, *x509.Certificate, error) { csr, err := d.newCSR() if err != nil { - return nil, nextStep{}, err + return nextStep{}, nil, err } r := &CSR{ Resource: ResNewCert, @@ -266,7 +262,7 @@ func (p *Provider) newCert(uri string, s Signer, d *Desire) (*x509.Certificate, } func (p *Provider) Cert(s Signer, d *Desire) error { - crt, ns, err := p.newCert(p.NewCert, s, d) + ns, crt, err := p.newCert(p.NewCert, s, d) if err != nil { return err } diff --git a/solver.go b/solver.go index 0a4ce08..65d8d24 100644 --- a/solver.go +++ b/solver.go @@ -6,6 +6,14 @@ import ( "path" ) +// WellKnown URL path +const WellKnown = `/.well-known/acme-challenge/` + +// Solver decribes a solving interface +type Solver interface { + Solve(token, keyAuth string) error +} + type httpSolver struct { http.Server } -- cgit v1.2.3