aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge.go7
-rw-r--r--cmd/acme/main.go3
-rw-r--r--provider.go27
3 files changed, 13 insertions, 24 deletions
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