aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--desire.go7
-rw-r--r--provider.go40
-rw-r--r--solver.go8
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
}