Move the HTTP-01 and TLS-SNI-01 default solvers to a more unified layout.

Made the solvers exported and added New... functions to them.
This commit is contained in:
xenolf 2016-02-14 16:56:14 +01:00
parent 00f13f2da0
commit 7475e7f9c2
3 changed files with 32 additions and 12 deletions

View file

@ -126,7 +126,7 @@ func (c *Client) SetHTTPAddress(iface string) error {
} }
if chlng, ok := c.solvers[HTTP01]; ok { if chlng, ok := c.solvers[HTTP01]; ok {
chlng.(*httpChallenge).provider = &httpChallengeServer{iface: host, port: port} chlng.(*httpChallenge).provider = NewHTTPProviderServer(host, port)
} }
return nil return nil
@ -142,7 +142,7 @@ func (c *Client) SetTLSAddress(iface string) error {
} }
if chlng, ok := c.solvers[TLSSNI01]; ok { if chlng, ok := c.solvers[TLSSNI01]; ok {
chlng.(*tlsSNIChallenge).provider = &tlsSNIChallengeServer{iface: host, port: port} chlng.(*tlsSNIChallenge).provider = NewTLSProviderServer(host, port)
} }
return nil return nil
} }

View file

@ -7,16 +7,25 @@ import (
"strings" "strings"
) )
// httpChallengeServer implements ChallengeProvider for `http-01` challenge // HTTPProviderServer implements ChallengeProvider for `http-01` challenge
type httpChallengeServer struct { // It may be instantiated without using the NewHTTPProviderServer function if
// you want only to use the default values.
type HTTPProviderServer struct {
iface string iface string
port string port string
done chan bool done chan bool
listener net.Listener listener net.Listener
} }
// Present makes the token available at `HTTP01ChallengePath(token)` // NewHTTPProviderServer creates a new HTTPProviderServer on the selected interface and port.
func (s *httpChallengeServer) Present(domain, token, keyAuth string) error { // Setting iface and / or port to an empty string will make the server fall back to
// the "any" interface and port 80 respectively.
func NewHTTPProviderServer(iface, port string) *HTTPProviderServer {
return &HTTPProviderServer{iface: iface, port: port}
}
// Present starts a web server and makes the token available at `HTTP01ChallengePath(token)` for web requests.
func (s *HTTPProviderServer) Present(domain, token, keyAuth string) error {
if s.port == "" { if s.port == "" {
s.port = "80" s.port = "80"
} }
@ -32,7 +41,8 @@ func (s *httpChallengeServer) Present(domain, token, keyAuth string) error {
return nil return nil
} }
func (s *httpChallengeServer) CleanUp(domain, token, keyAuth string) error { // CleanUp closes the HTTP server and removes the token from `HTTP01ChallengePath(token)`
func (s *HTTPProviderServer) CleanUp(domain, token, keyAuth string) error {
if s.listener == nil { if s.listener == nil {
return nil return nil
} }
@ -41,7 +51,7 @@ func (s *httpChallengeServer) CleanUp(domain, token, keyAuth string) error {
return nil return nil
} }
func (s *httpChallengeServer) serve(domain, token, keyAuth string) { func (s *HTTPProviderServer) serve(domain, token, keyAuth string) {
path := HTTP01ChallengePath(token) path := HTTP01ChallengePath(token)
// The handler validates the HOST header and request type. // The handler validates the HOST header and request type.

View file

@ -7,16 +7,25 @@ import (
"net/http" "net/http"
) )
// tlsSNIChallengeServer implements ChallengeProvider for `TLS-SNI-01` challenge // TLSProviderServer implements ChallengeProvider for `TLS-SNI-01` challenge
type tlsSNIChallengeServer struct { // It may be instantiated without using the NewTLSProviderServer function if
// you want only to use the default values.
type TLSProviderServer struct {
iface string iface string
port string port string
done chan bool done chan bool
listener net.Listener listener net.Listener
} }
// NewTLSProviderServer creates a new TLSProviderServer on the selected interface and port.
// Setting iface and / or port to an empty string will make the server fall back to
// the "any" interface and port 443 respectively.
func NewTLSProviderServer(iface, port string) *TLSProviderServer {
return &TLSProviderServer{iface: iface, port: port}
}
// Present makes the keyAuth available as a cert // Present makes the keyAuth available as a cert
func (s *tlsSNIChallengeServer) Present(domain, token, keyAuth string) error { func (s *TLSProviderServer) Present(domain, token, keyAuth string) error {
if s.port == "" { if s.port == "" {
s.port = "443" s.port = "443"
} }
@ -42,7 +51,8 @@ func (s *tlsSNIChallengeServer) Present(domain, token, keyAuth string) error {
return nil return nil
} }
func (s *tlsSNIChallengeServer) CleanUp(domain, token, keyAuth string) error { // CleanUp closes the HTTP server.
func (s *TLSProviderServer) CleanUp(domain, token, keyAuth string) error {
if s.listener == nil { if s.listener == nil {
return nil return nil
} }