diff options
Diffstat (limited to 'internal')
-rw-r--r-- | internal/handlers/https.go | 6 | ||||
-rw-r--r-- | internal/handlers/https_test.go | 58 |
2 files changed, 63 insertions, 1 deletions
diff --git a/internal/handlers/https.go b/internal/handlers/https.go index 84c7e159..5598a8fc 100644 --- a/internal/handlers/https.go +++ b/internal/handlers/https.go @@ -7,8 +7,12 @@ import ( ) func HTTPSRedirectMiddleware(handler http.Handler, redirect bool) http.Handler { + if !redirect { + return handler + } + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if redirect && !request.IsHTTPS(r) { + if !request.IsHTTPS(r) { redirectToHTTPS(w, r, http.StatusTemporaryRedirect) return } diff --git a/internal/handlers/https_test.go b/internal/handlers/https_test.go new file mode 100644 index 00000000..df78ecbd --- /dev/null +++ b/internal/handlers/https_test.go @@ -0,0 +1,58 @@ +package handlers_test + +import ( + "net/http" + "testing" + + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-pages/internal/handlers" +) + +func TestAcmeMiddleware(t *testing.T) { + h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusAccepted) + }) + + httpsURL := "https://example.com" + httpURL := "http://example.com" + + testCases := []struct { + name string + redirect bool + path string + expectedStatus int + }{ + { + name: "http redirects to https with redirect enabled", + redirect: true, + path: httpURL, + expectedStatus: http.StatusTemporaryRedirect, + }, + { + name: "https handled successfully with redirect enabled", + redirect: true, + path: httpsURL, + expectedStatus: http.StatusAccepted, + }, + { + name: "http does not redirect to https with redirect disabled", + redirect: false, + path: httpURL, + expectedStatus: http.StatusAccepted, + }, + { + name: "https handled successfully with redirect disabled", + redirect: false, + path: httpsURL, + expectedStatus: http.StatusAccepted, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + m := handlers.HTTPSRedirectMiddleware(h, tc.redirect) + require.HTTPStatusCode(t, m.ServeHTTP, http.MethodGet, tc.path, nil, tc.expectedStatus) + }) + } +} |