forked from TrueCloudLab/lego
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:
parent
00f13f2da0
commit
7475e7f9c2
3 changed files with 32 additions and 12 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue