From c5c1c1edaf05b9239888cbe8c2edc82f0c2e76d8 Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Sat, 2 Dec 2017 17:03:36 +0100 Subject: [PATCH] HTTPS redirect --- main.go | 1 + middleware/HTTPSRedirect.go | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 middleware/HTTPSRedirect.go diff --git a/main.go b/main.go index 8e01f2b2..ce571542 100644 --- a/main.go +++ b/main.go @@ -40,6 +40,7 @@ func configure(app *aero.Application) *aero.Application { middleware.Log(), middleware.Session(), middleware.UserInfo(), + middleware.HTTPSRedirect(), ) // API diff --git a/middleware/HTTPSRedirect.go b/middleware/HTTPSRedirect.go new file mode 100644 index 00000000..cb94bbf9 --- /dev/null +++ b/middleware/HTTPSRedirect.go @@ -0,0 +1,27 @@ +package middleware + +import ( + "fmt" + "strings" + + "github.com/aerogo/aero" +) + +// HTTPSRedirect middleware redirects to HTTPS if needed. +func HTTPSRedirect() aero.Middleware { + return func(ctx *aero.Context, next func()) { + request := ctx.Request() + userAgent := request.Header().Get("User-Agent") + isBrowser := strings.Contains(userAgent, "Mozilla/") || strings.Contains(userAgent, "Chrome/") || strings.Contains(userAgent, "AppleWebKit/") + + if !strings.HasPrefix(request.Protocol(), "HTTP/2") && isBrowser { + fmt.Println("Redirect to HTTPS") + ctx.Redirect("https://" + request.Host() + request.URL().Path) + ctx.Response().WriteHeader(ctx.StatusCode) + return + } + + // Handle the request + next() + } +}