aboutsummaryrefslogtreecommitdiff
path: root/challenge.go
blob: 8357dc8d7f3b10f78b311fac130286d0cb68e2f4 (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
36
37
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")
)

const WellKnown = `/.well-known/acme-challenge/`

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
	}
}