diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 00000000..8293b695 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,3 @@ +run: + skip-dirs: + components \ No newline at end of file diff --git a/go.mod b/go.mod index 56efb63b..625d5576 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.12 require ( cloud.google.com/go v0.39.0 // indirect github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect - github.com/aerogo/aero v1.3.11 + github.com/aerogo/aero v1.3.14 github.com/aerogo/api v0.2.0 github.com/aerogo/crawler v0.2.5 github.com/aerogo/flow v0.1.4 diff --git a/go.sum b/go.sum index 132cadec..d50333c7 100644 --- a/go.sum +++ b/go.sum @@ -13,6 +13,8 @@ github.com/a8m/mark v0.1.1-0.20170507133748-44f2db618845/go.mod h1:c8Mh99Cw82nrs github.com/aerogo/aero v1.3.1/go.mod h1:5rPhXo2DNMFQ7XhDsuZ3L7Zr6TH/349+WczUbrOUZvM= github.com/aerogo/aero v1.3.11 h1:3kg6cPDwH6/ul6ZU4JMLKJsPaaBGTxy+LzV8lgTW6n0= github.com/aerogo/aero v1.3.11/go.mod h1:iTwPGnf6L6G6+FdvnNHoYyIRk2mDOV2JqI7pqqk9RYM= +github.com/aerogo/aero v1.3.14 h1:Zxx1Wh/OpjujVMUVmMOjZi8jAQAEUWvtnobtXJDZ5ak= +github.com/aerogo/aero v1.3.14/go.mod h1:iTwPGnf6L6G6+FdvnNHoYyIRk2mDOV2JqI7pqqk9RYM= github.com/aerogo/api v0.2.0 h1:mIc/y381e+Qc85eSc2cKPdpDDOmT0hlnEeCw2Dcf7no= github.com/aerogo/api v0.2.0/go.mod h1:6objJn5XiKpYpywQUPrFjxZIXD4NVI2LwcBNYCEcS3Y= github.com/aerogo/cluster v0.1.6 h1:9HYjJwo19uuh9thIc80T3caap9t9b4BXZ1iN8aztjlU= diff --git a/main.go b/main.go index ae2b3a98..c69758e6 100644 --- a/main.go +++ b/main.go @@ -46,6 +46,7 @@ func configure(app *aero.Application) *aero.Application { // Middleware app.Use( middleware.Recover, + middleware.HTTPSRedirect, middleware.OpenGraph, middleware.Log, middleware.Session, diff --git a/middleware/HTTPSRedirect.go b/middleware/HTTPSRedirect.go index b1081cc1..ba2c1b54 100644 --- a/middleware/HTTPSRedirect.go +++ b/middleware/HTTPSRedirect.go @@ -1,20 +1,23 @@ package middleware -// // 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/") +import ( + "net/http" -// if !strings.HasPrefix(request.Protocol(), "HTTP/2") && isBrowser { -// fmt.Println("Redirect to HTTPS") -// ctx.Redirect(http.StatusTemporaryRedirect, "https://" + request.Host() + request.URL().Path) -// ctx.Response().WriteHeader(ctx.Status()) -// return -// } + "github.com/aerogo/aero" +) -// // Handle the request -// next() -// } -// } +// HTTPSRedirect middleware redirects to HTTPS if needed. +func HTTPSRedirect(next aero.Handler) aero.Handler { + return func(ctx aero.Context) error { + request := ctx.Request() + userAgent := request.Header("User-Agent") + isBrowser := userAgent != "" + + if isBrowser && request.Scheme() != "https" { + return ctx.Redirect(http.StatusPermanentRedirect, "https://"+request.Host()+request.Path()) + } + + // Handle the request + return next(ctx) + } +}