From ab44298d0c23c02d4c4736073be86bcffb669a7b Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 12 Jan 2016 13:41:36 +0100 Subject: Move solver into challenge --- desire.go | 25 +++++++++++++++++++++++++ messages.go | 1 + provider.go | 27 +++------------------------ 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/desire.go b/desire.go index cfb691c..c631548 100644 --- a/desire.go +++ b/desire.go @@ -81,3 +81,28 @@ func (d *Desire) AddCert(der []byte) error { d.cert = append(d.cert, cert) return nil } + +func (d Desire) satisficed(c []Challenge, com []int) bool { + for _, n := range com { + if _, ok := d.solver[c[n].Type]; !ok { + return false + } + } + return true +} + +func (d Desire) Pick(a *Authorization) []Challenge { + var c []Challenge + for _, com := range a.Combinations { + if d.satisficed(a.Challenges, com) { + for _, n := range com { + ch := a.Challenges[n] + ch.Solver = d.solver[ch.Type] + a.Challenges[n] = ch + c = append(c, ch) + } + return c + } + } + return c +} diff --git a/messages.go b/messages.go index bd673ba..ad2b741 100644 --- a/messages.go +++ b/messages.go @@ -63,6 +63,7 @@ type Challenge struct { Validated *time.Time `json:"validated,omitempty"` KeyAuthorization string `json:"keyAuthorization,omitempty"` Error *Problem `json:"error,omitempty"` + Solver `json:"-"` } // Problem description diff --git a/provider.go b/provider.go index dc53abd..4e69783 100644 --- a/provider.go +++ b/provider.go @@ -188,28 +188,6 @@ func (p *Provider) Register(s Signer, c Contacts) error { return err } -func canSatisfice(d *Desire, com []int, c []Challenge) bool { - for _, n := range com { - if _, ok := d.solver[c[n].Type]; !ok { - return false - } - } - return true -} - -func (a Authorization) pick(d *Desire) (c []Challenge) { - for _, com := range a.Combinations { - if canSatisfice(d, com, a.Challenges) { - for _, n := range com { - c = append(c, a.Challenges[n]) - } - return - } - } - log.Println("cannot solve any challenges") - return -} - func (p *Provider) Authorize(s ThumbSigner, d *Desire) error { for _, domain := range d.altnames { r := &Authorization{ @@ -222,7 +200,7 @@ func (p *Provider) Authorize(s ThumbSigner, d *Desire) error { return err } - for _, ch := range r.pick(d) { + for _, ch := range d.Pick(r) { ka, _ := KeyAuthorization(s, ch.Token) ans := &Challenge{ @@ -236,7 +214,8 @@ func (p *Provider) Authorize(s ThumbSigner, d *Desire) error { return err } - err = d.solver[ch.Type].Solve(ch.Token, ka) + //err = d.solver[ch.Type].Solve(ch.Token, ka) + err = ch.Solve(ch.Token, ka) if err != nil { return err } -- cgit v1.2.3