Add let's encrypt support
This commit is contained in:
@@ -2,6 +2,7 @@ package config
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
"regexp"
|
||||
"time"
|
||||
@@ -21,11 +22,26 @@ var NameFilter = regexp.MustCompile(PWDHostPortGroupRegex)
|
||||
var AliasFilter = regexp.MustCompile(AliasPortGroupRegex)
|
||||
|
||||
var SSLPortNumber, PortNumber, Key, Cert, SessionsFile, PWDContainerName, L2ContainerName, L2Subdomain, PWDCName, HashKey, SSHKeyPath, L2RouterIP string
|
||||
var UseLetsEncrypt bool
|
||||
var LetsEncryptCertsDir string
|
||||
var LetsEncryptDomains stringslice
|
||||
var MaxLoadAvg float64
|
||||
|
||||
type stringslice []string
|
||||
|
||||
func (i *stringslice) String() string {
|
||||
return fmt.Sprintf("%s", *i)
|
||||
}
|
||||
func (i *stringslice) Set(value string) error {
|
||||
*i = append(*i, value)
|
||||
return nil
|
||||
}
|
||||
|
||||
func ParseFlags() {
|
||||
flag.Var(&LetsEncryptDomains, "letsencrypt-domain", "List of domains to validate with let's encrypt")
|
||||
flag.StringVar(&LetsEncryptCertsDir, "letsencrypt-certs-dir", "/certs", "Path where let's encrypt certs will be stored")
|
||||
flag.BoolVar(&UseLetsEncrypt, "use-letsencrypt", false, "Enabled let's encrypt tls certificates")
|
||||
flag.StringVar(&PortNumber, "port", "3000", "Give a TCP port to run the application")
|
||||
flag.StringVar(&SSLPortNumber, "sslPort", "3001", "Give a SSL TCP port")
|
||||
flag.StringVar(&Key, "key", "./pwd/server-key.pem", "Server key for SSL")
|
||||
flag.StringVar(&Cert, "cert", "./pwd/server.pem", "Give a SSL cert")
|
||||
flag.StringVar(&SessionsFile, "save", "./pwd/sessions", "Tell where to store sessions file")
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"golang.org/x/crypto/acme/autocert"
|
||||
|
||||
"github.com/googollee/go-socket.io"
|
||||
gh "github.com/gorilla/handlers"
|
||||
"github.com/gorilla/mux"
|
||||
@@ -91,11 +94,25 @@ func Register() {
|
||||
IdleTimeout: 30 * time.Second,
|
||||
ReadHeaderTimeout: 5 * time.Second,
|
||||
}
|
||||
if config.UseLetsEncrypt {
|
||||
certManager := autocert.Manager{
|
||||
Prompt: autocert.AcceptTOS,
|
||||
HostPolicy: autocert.HostWhitelist(config.LetsEncryptDomains...),
|
||||
Cache: autocert.DirCache(config.LetsEncryptCertsDir),
|
||||
}
|
||||
|
||||
httpServer.TLSConfig = &tls.Config{
|
||||
GetCertificate: certManager.GetCertificate,
|
||||
}
|
||||
log.Println("Listening on port " + config.PortNumber)
|
||||
log.Fatal(httpServer.ListenAndServeTLS("", ""))
|
||||
} else {
|
||||
log.Println("Listening on port " + config.PortNumber)
|
||||
log.Fatal(httpServer.ListenAndServe())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func RegisterEvents(s *socketio.Server) {
|
||||
ws = s
|
||||
e.OnAny(broadcastEvent)
|
||||
|
||||
Reference in New Issue
Block a user