aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-01-20 16:47:51 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-01-20 16:47:51 +0100
commit8fea5f9b0168880c927517d0d9634947ef158d43 (patch)
treefb06df8fd93f4072f394f88f21691b8149492216
parent20f2531b9acbe40e9f8ebda4f9127ab65530c789 (diff)
Extend solver interface
-rw-r--r--cmd/acme/solve_http.go2
-rw-r--r--provider.go4
-rw-r--r--solver.go17
3 files changed, 17 insertions, 6 deletions
diff --git a/cmd/acme/solve_http.go b/cmd/acme/solve_http.go
index a8be5ea..f01f1b4 100644
--- a/cmd/acme/solve_http.go
+++ b/cmd/acme/solve_http.go
@@ -37,3 +37,5 @@ func (c *httpChallenge) Solve(token, keyAuth string) error {
return nil
}
}
+
+func (c *httpChallenge) Solved() error { return nil }
diff --git a/provider.go b/provider.go
index f154a2f..34920c9 100644
--- a/provider.go
+++ b/provider.go
@@ -170,10 +170,12 @@ func (p *Provider) solve(s Signer, ch Challenge) error {
return err
}
ns := parseHeader(resp)
+ log.Println("poke solver", ch.Type, ch.Token, ka)
err = ch.Solve(ch.Token, ka)
if err != nil {
return err
}
+ log.Println("start polling")
t := time.NewTicker(p.poll)
defer t.Stop()
for range t.C {
@@ -185,7 +187,7 @@ func (p *Provider) solve(s Signer, ch Challenge) error {
break
}
}
- return nil
+ return ch.Solved()
}
//func (p *Provider) Authz(s Signer, domain string, sol map[ChallengeType]Solver) error {
diff --git a/solver.go b/solver.go
index 65d8d24..7080b79 100644
--- a/solver.go
+++ b/solver.go
@@ -3,6 +3,7 @@ package acme
import (
"io"
"net/http"
+ "os"
"path"
)
@@ -12,6 +13,7 @@ const WellKnown = `/.well-known/acme-challenge/`
// Solver decribes a solving interface
type Solver interface {
Solve(token, keyAuth string) error
+ Solved() error
}
type httpSolver struct {
@@ -25,7 +27,7 @@ func NewHTTPSolver(addr string) Solver {
return &s
}
-func (s httpSolver) Solve(token, keyAuth string) error {
+func (s *httpSolver) Solve(token, keyAuth string) error {
p := path.Join(WellKnown, token)
http.HandleFunc(p, func(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, keyAuth)
@@ -33,17 +35,20 @@ func (s httpSolver) Solve(token, keyAuth string) error {
return nil
}
+func (s *httpSolver) Solved() error { return nil }
+
type webRootSolver struct {
webroot string
+ file string
}
func NewWebRootSolver(webroot string) Solver {
- return &webRootSolver{webroot}
+ return &webRootSolver{webroot: webroot}
}
-func (s webRootSolver) Solve(token, keyAuth string) error {
- p := path.Join(s.webroot, WellKnown, token)
- fd, err := CreatePubFile(p)
+func (s *webRootSolver) Solve(token, keyAuth string) error {
+ s.file = path.Join(s.webroot, WellKnown, token)
+ fd, err := CreatePubFile(s.file)
if err != nil {
return err
}
@@ -52,6 +57,8 @@ func (s webRootSolver) Solve(token, keyAuth string) error {
return err
}
+func (s *webRootSolver) Solved() error { return os.Remove(s.file) }
+
type tlsSolver struct {
http.Server
}