Added HTTPS support.

This commit is contained in:
mikestefanello 2021-12-20 12:33:14 -05:00
parent 337ebb67b4
commit 502e146f92
3 changed files with 28 additions and 4 deletions

View File

@ -58,6 +58,11 @@ type (
ReadTimeout time.Duration `env:"HTTP_READ_TIMEOUT,default=5s"`
WriteTimeout time.Duration `env:"HTTP_WRITE_TIMEOUT,default=10s"`
IdleTimeout time.Duration `env:"HTTP_IDLE_TIMEOUT,default=2m"`
TLS struct {
Enabled bool `env:"HTTP_TLS_ENABLED,default=false"`
Certificate string `env:"HTTP_TLS_CERTIFICATE"`
Key string `env:"HTTP_TLS_KEY"`
}
}
// AppConfig stores application configuration

12
main.go
View File

@ -2,6 +2,7 @@ package main
import (
"context"
"crypto/tls"
"fmt"
"net/http"
"os"
@ -34,6 +35,17 @@ func main() {
IdleTimeout: c.Config.HTTP.IdleTimeout,
}
if c.Config.HTTP.TLS.Enabled {
certs, err := tls.LoadX509KeyPair(c.Config.HTTP.TLS.Certificate, c.Config.HTTP.TLS.Key)
if err != nil {
c.Web.Logger.Fatalf("cannot load TLS certificate: %v", err)
}
srv.TLSConfig = &tls.Config{
Certificates: []tls.Certificate{certs},
}
}
if err := c.Web.StartServer(&srv); err != http.ErrServerClosed {
c.Web.Logger.Fatalf("shutting down the server: v", err)
}

View File

@ -37,8 +37,15 @@ func BuildRouter(c *services.Container) {
c.Web.Group("", middleware.CacheControl(c.Config.Cache.Expiration.StaticFile)).
Static(config.StaticPrefix, config.StaticDir)
// Middleware
g := c.Web.Group("",
// Non static file route group
g := c.Web.Group("")
// Force HTTPS, if enabled
if c.Config.HTTP.TLS.Enabled {
g.Use(echomw.HTTPSRedirect())
}
g.Use(
echomw.RemoveTrailingSlashWithConfig(echomw.TrailingSlashConfig{
RedirectCode: http.StatusMovedPermanently,
}),
@ -51,12 +58,12 @@ func BuildRouter(c *services.Container) {
echomw.TimeoutWithConfig(echomw.TimeoutConfig{
Timeout: c.Config.App.Timeout,
}),
middleware.ServeCachedPage(c.Cache),
session.Middleware(sessions.NewCookieStore([]byte(c.Config.App.EncryptionKey))),
middleware.LoadAuthenticatedUser(c.Auth),
middleware.ServeCachedPage(c.Cache),
echomw.CSRFWithConfig(echomw.CSRFConfig{
TokenLookup: "form:csrf",
}),
middleware.LoadAuthenticatedUser(c.Auth),
)
// Base controller