aboutsummaryrefslogtreecommitdiff
path: root/challenge.go
blob: dc4a5ebb42ac57273917dde627e4801d03eb9a2f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package acme

import (
	"errors"
	"time"
)

// Solver decribes a solving interface
type Solver interface {
	Solve() error
	Abort() error
}

var (
	canSolve   = make(map[ChallengeType]bool)
	errTimeOut = errors.New("time out")
)

func registerSolver(c ChallengeType) {
	canSolve[c] = true
}

func Solve(s Solver, timeout time.Duration) error {
	errc := make(chan error)
	go func() {
		errc <- s.Solve()
	}()
	select {
	case err := <-errc:
		return err
	case <-time.After(timeout):
		s.Abort()
		return errTimeOut
	}
}