From 8fea5f9b0168880c927517d0d9634947ef158d43 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 20 Jan 2016 16:47:51 +0100 Subject: Extend solver interface --- cmd/acme/solve_http.go | 2 ++ provider.go | 4 +++- solver.go | 17 ++++++++++++----- 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 } -- cgit v1.2.3