25 lines
606 B
Go
25 lines
606 B
Go
package webutil
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"golang.org/x/crypto/acme/autocert"
|
|
)
|
|
|
|
// Serve requests using the given http.Server. If srv.Addr has the format
|
|
// `hostname:https`, then use autocert to manage certificates for the domain.
|
|
//
|
|
// For http on port 80, you can use :http.
|
|
func ListenAndServe(srv *http.Server) error {
|
|
if strings.HasSuffix(srv.Addr, ":https") {
|
|
hostname := strings.TrimSuffix(srv.Addr, ":https")
|
|
if len(hostname) == 0 {
|
|
return errors.New("https requires a hostname")
|
|
}
|
|
return srv.Serve(autocert.NewListener(hostname))
|
|
}
|
|
return srv.ListenAndServe()
|
|
}
|