aboutsummaryrefslogtreecommitdiff
path: root/challenge.go
diff options
context:
space:
mode:
Diffstat (limited to 'challenge.go')
-rw-r--r--challenge.go22
1 files changed, 19 insertions, 3 deletions
diff --git a/challenge.go b/challenge.go
index 7fee500..2571012 100644
--- a/challenge.go
+++ b/challenge.go
@@ -1,17 +1,33 @@
package acme
+import (
+ "errors"
+ "time"
+)
+
// Solver decribes a solving interface
type Solver interface {
Solve() error
- Solved() error
+ Abort() error
}
var canSolve = make(map[ChallengeType]bool)
+var errTimeOut = errors.New("time out")
func registerChallenge(c ChallengeType) {
canSolve[c] = true
}
-func Solve(s Solver) error {
- return s.Solve()
+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
+ }
}