package main import ( "io" "log" "net/http" "path" "dim13.org/acme" ) type httpChallenge struct { http.Server Webroot string file string started bool } func (c *httpChallenge) Init() error { if !c.started { go c.ListenAndServe() c.started = true } return nil } func (c *httpChallenge) Solve(token, keyAuth string) error { log.Println("solver", c) if c.Webroot != "" { return c.solveWebroot(token, keyAuth) } else { p := path.Join(acme.WellKnown, token) http.HandleFunc(p, func(w http.ResponseWriter, r *http.Request) { io.WriteString(w, keyAuth) }) } return nil } func (c *httpChallenge) solveWebroot(token, keyAuth string) error { log.Println("Solve WebRoot") c.file = path.Join(c.Webroot, acme.WellKnown, token) fd, err := acme.CreatePubFile(c.file) if err != nil { return err } defer fd.Close() _, err = fd.Write([]byte(keyAuth)) return err }