aboutsummaryrefslogtreecommitdiff
path: root/challange_http.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-12-23 22:10:09 +0100
committerDimitri Sokolyuk <demon@dim13.org>2015-12-23 22:10:09 +0100
commitfde15aa0cca6160cfbc698354321a961932a7f86 (patch)
tree85e7aef6c15c1a00e647677f427cad0de66a7e3d /challange_http.go
parenta7af67e068e9dd035397f818a112a6755d51f54c (diff)
Bikeshading
Diffstat (limited to 'challange_http.go')
-rw-r--r--challange_http.go31
1 files changed, 18 insertions, 13 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)
+}