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 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) (limited to 'challange_http.go') 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) +} -- cgit v1.2.3