From fde15aa0cca6160cfbc698354321a961932a7f86 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 23 Dec 2015 22:10:09 +0100 Subject: Bikeshading --- challange_http.go | 31 ++++++++++++++++++------------- challenge.go | 5 +++++ client.go | 5 ++++- docker.toml | 8 ++++---- 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" -- cgit v1.2.3