From 19ae5a8bf500dd50c23b15c8e52d975f784ffa02 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 11 Jan 2016 18:31:08 +0100 Subject: WIP solver --- challenge.go | 7 ------- cmd/acme/main.go | 3 +-- provider.go | 27 ++++++++++++--------------- 3 files changed, 13 insertions(+), 24 deletions(-) delete mode 100644 challenge.go diff --git a/challenge.go b/challenge.go deleted file mode 100644 index 3b008a3..0000000 --- a/challenge.go +++ /dev/null @@ -1,7 +0,0 @@ -package acme - -var canSolve = make(map[ChallengeType]Solver) - -func RegisterSolver(c ChallengeType, s Solver) { - canSolve[c] = s -} diff --git a/cmd/acme/main.go b/cmd/acme/main.go index 360fb90..df6f7a0 100644 --- a/cmd/acme/main.go +++ b/cmd/acme/main.go @@ -82,9 +82,8 @@ func main() { } } - // TODO des.Register hs := &httpChallenge{Webroot: des.Webroot} - acme.RegisterSolver(acme.ChallengeHTTP, hs) + des.RegisterSolver(acme.ChallengeHTTP, hs) wg.Add(1) go func(k string, des *desire) { diff --git a/provider.go b/provider.go index 5ff00ab..ec765cf 100644 --- a/provider.go +++ b/provider.go @@ -165,22 +165,26 @@ func (p *Provider) Register(s Signer, c Contacts) error { return err } -func pickChallanges(com []int, c []Challenge) bool { +func canSatisfice(d *Desire, com []int, c []Challenge) bool { for _, n := range com { - if _, ok := canSolve[c[n].Type]; !ok { + if _, ok := d.solver[c[n].Type]; !ok { return false } } return true } -func pickCombination(a *Authorization) ([]int, error) { +func (a Authorization) pick(d *Desire) (c []Challenge) { for _, com := range a.Combinations { - if pickChallanges(com, a.Challenges) { - return com, nil + if canSatisfice(d, com, a.Challenges) { + for _, n := range com { + c = append(c, a.Challenges[n]) + } + return } } - return nil, errors.New("cannot solve any challenges") + log.Println("cannot solve any challenges") + return } func (p *Provider) Authorize(s ThumbSigner, d *Desire) error { @@ -203,14 +207,7 @@ func (p *Provider) Authorize(s ThumbSigner, d *Desire) error { return errStatus } - com, err := pickCombination(r) - if err != nil { - return err - } - log.Println("combination", com) - - for _, n := range com { - ch := r.Challenges[n] + for _, ch := range r.pick(d) { ka, _ := KeyAuthorization(s, ch.Token) ans := &Challenge{ @@ -229,7 +226,7 @@ func (p *Provider) Authorize(s ThumbSigner, d *Desire) error { return err } - sol := canSolve[ch.Type] + sol := d.solver[ch.Type] err = sol.Solve(ch.Token, ka) if err != nil { return err -- cgit v1.2.3