package acme import ( "io" "net/http" "path" ) // WellKnown URL path const WellKnown = `/.well-known/acme-challenge/` // Solver decribes a solving interface type Solver interface { Solve(token, keyAuth string) error } type httpSolver struct { http.Server } func NewHTTPSolver(addr string) Solver { var s httpSolver s.Server = http.Server{Addr: addr} go s.ListenAndServe() return &s } func (s httpSolver) Solve(token, keyAuth string) error { p := path.Join(WellKnown, token) http.HandleFunc(p, func(w http.ResponseWriter, r *http.Request) { io.WriteString(w, keyAuth) }) return nil } type webRootSolver struct { webroot string } func NewWebRootSolver(webroot string) Solver { return &webRootSolver{webroot} } func (s webRootSolver) Solve(token, keyAuth string) error { p := path.Join(s.webroot, WellKnown, token) fd, err := CreatePubFile(p) if err != nil { return err } defer fd.Close() _, err = io.WriteString(fd, keyAuth) return err } type tlsSolver struct { http.Server } func (s tlsSolver) Solve(token, keyAuth string) error { return nil }