From 19ae5a8bf500dd50c23b15c8e52d975f784ffa02 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 11 Jan 2016 18:31:08 +0100 Subject: WIP solver --- provider.go | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) (limited to 'provider.go') 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