aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challange_http.go31
-rw-r--r--challenge.go5
-rw-r--r--client.go5
-rw-r--r--docker.toml8
4 files changed, 31 insertions, 18 deletions
diff --git a/challange_http.go b/challange_http.go
index bd53ebf..09f1db1 100644
--- a/challange_http.go
+++ b/challange_http.go
@@ -18,30 +18,30 @@ func init() {
type httpChallenge struct {
Challenge
Addr string
+ done chan bool
}
-func (c httpChallenge) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+func (c *httpChallenge) ServeHTTP(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, c.KeyAuthorization)
+ c.done <- true
}
-func (c httpChallenge) Solve() error {
- done := make(chan bool)
+func (c *httpChallenge) Solve() error {
+ c.done = make(chan bool)
l, err := net.Listen("tcp", c.Addr)
if err != nil {
return err
}
defer l.Close()
- s := &http.Server{
- Handler: c,
- ConnState: func(_ net.Conn, st http.ConnState) {
- if st == http.StateClosed {
- done <- true
- }
- },
- }
+ s := &http.Server{Handler: c}
s.SetKeepAlivesEnabled(false)
go s.Serve(l)
- <-done
+ <-c.done
+ return nil
+}
+
+func (c *httpChallenge) Solved() error {
+ c.done <- true
return nil
}
@@ -50,10 +50,15 @@ type webRoot struct {
Webroot string
}
-func (c webRoot) Solve() error {
+func (c *webRoot) Solve() error {
file := path.Join(c.Webroot, wellKnown, c.Token)
if err := os.MkdirAll(path.Dir(file), 0755); err != nil {
return err
}
return ioutil.WriteFile(file, []byte(c.KeyAuthorization), 0644)
}
+
+func (c *webRoot) Solved() error {
+ file := path.Join(c.Webroot, wellKnown, c.Token)
+ return os.Remove(file)
+}
diff --git a/challenge.go b/challenge.go
index ccd9622..7fee500 100644
--- a/challenge.go
+++ b/challenge.go
@@ -3,6 +3,7 @@ package acme
// Solver decribes a solving interface
type Solver interface {
Solve() error
+ Solved() error
}
var canSolve = make(map[ChallengeType]bool)
@@ -10,3 +11,7 @@ var canSolve = make(map[ChallengeType]bool)
func registerChallenge(c ChallengeType) {
canSolve[c] = true
}
+
+func Solve(s Solver) error {
+ return s.Solve()
+}
diff --git a/client.go b/client.go
index c1e0e91..401fcfb 100644
--- a/client.go
+++ b/client.go
@@ -228,7 +228,10 @@ func (c *Client) Authorize(a *Account, domain []string) error {
_, err = c.post(ch.URI, a, ans)
switch ch.Type {
case ChallengeHTTP:
- httpChallenge{Addr: ":8080", Challenge: *ans}.Solve()
+ c := &httpChallenge{Addr: ":8080", Challenge: *ans}
+ if err := Solve(c); err != nil {
+ return err
+ }
}
}
}
diff --git a/docker.toml b/docker.toml
index 29029b9..b4e571e 100644
--- a/docker.toml
+++ b/docker.toml
@@ -1,5 +1,5 @@
[defaults]
-gracetime = "168h" # 1 week
+gracetime = "168h" # 1 week
listen = ":8080"
basedir = ".acme" # usually "/etc/ssl"
provider = "les"
@@ -13,9 +13,6 @@ directory = "https://acme-staging.api.letsencrypt.org/directory"
mail = "webmaster@docker.moccu.com"
key = "private/webmaster.key"
-[hook.nginx]
-cmd = "sudo service nginx reload"
-
[desire.docker]
provider = "les"
account = "webmaster"
@@ -24,3 +21,6 @@ key = "private/docker_moccu_com.key"
cert = "certs/docker_moccu_com.pem"
#webroot = "/var/www/htdocs"
#hooks = [ "nginx" ]
+
+[hook.nginx]
+cmd = "sudo service nginx reload"