summaryrefslogtreecommitdiff
path: root/internal/middlewares/authelia_context_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/middlewares/authelia_context_test.go')
-rw-r--r--internal/middlewares/authelia_context_test.go47
1 files changed, 46 insertions, 1 deletions
diff --git a/internal/middlewares/authelia_context_test.go b/internal/middlewares/authelia_context_test.go
index f5ea62813..5a26f1c78 100644
--- a/internal/middlewares/authelia_context_test.go
+++ b/internal/middlewares/authelia_context_test.go
@@ -57,7 +57,7 @@ func TestShouldGetOriginalURLFromForwardedHeadersWithoutURI(t *testing.T) {
originalURL, err := mock.Ctx.GetOriginalURL()
assert.NoError(t, err)
- expectedURL, err := url.ParseRequestURI("https://home.example.com")
+ expectedURL, err := url.ParseRequestURI("https://home.example.com/")
assert.NoError(t, err)
assert.Equal(t, expectedURL, originalURL)
}
@@ -70,3 +70,48 @@ func TestShouldGetOriginalURLFromForwardedHeadersWithURI(t *testing.T) {
assert.Error(t, err)
assert.Equal(t, "Unable to parse URL extracted from X-Original-URL header: parse \"htt-ps//home?-.example.com\": invalid URI for request", err.Error())
}
+
+func TestShouldFallbackToNonXForwardedHeaders(t *testing.T) {
+ mock := mocks.NewMockAutheliaCtx(t)
+ defer mock.Close()
+
+ mock.Ctx.RequestCtx.Request.SetRequestURI("/2fa/one-time-password")
+ mock.Ctx.RequestCtx.Request.SetHost("auth.example.com:1234")
+
+ assert.Equal(t, []byte("http"), mock.Ctx.XForwardedProto())
+ assert.Equal(t, []byte("auth.example.com:1234"), mock.Ctx.XForwardedHost())
+ assert.Equal(t, []byte("/2fa/one-time-password"), mock.Ctx.XForwardedURI())
+}
+
+func TestShouldOnlyFallbackToNonXForwardedHeadersWhenNil(t *testing.T) {
+ mock := mocks.NewMockAutheliaCtx(t)
+ defer mock.Close()
+
+ mock.Ctx.RequestCtx.Request.SetRequestURI("/2fa/one-time-password")
+ mock.Ctx.RequestCtx.Request.SetHost("localhost")
+ mock.Ctx.RequestCtx.Request.Header.Set(fasthttp.HeaderXForwardedHost, "auth.example.com:1234")
+ mock.Ctx.RequestCtx.Request.Header.Set("X-Forwarded-URI", "/base/2fa/one-time-password")
+ mock.Ctx.RequestCtx.Request.Header.Set("X-Forwarded-Proto", "https")
+ mock.Ctx.RequestCtx.Request.Header.Set("X-Forwarded-Method", "GET")
+
+ assert.Equal(t, []byte("https"), mock.Ctx.XForwardedProto())
+ assert.Equal(t, []byte("auth.example.com:1234"), mock.Ctx.XForwardedHost())
+ assert.Equal(t, []byte("/base/2fa/one-time-password"), mock.Ctx.XForwardedURI())
+ assert.Equal(t, []byte("GET"), mock.Ctx.XForwardedMethod())
+}
+
+func TestShouldDetectXHR(t *testing.T) {
+ mock := mocks.NewMockAutheliaCtx(t)
+ defer mock.Close()
+
+ mock.Ctx.RequestCtx.Request.Header.Set(fasthttp.HeaderXRequestedWith, "XMLHttpRequest")
+
+ assert.True(t, mock.Ctx.IsXHR())
+}
+
+func TestShouldDetectNonXHR(t *testing.T) {
+ mock := mocks.NewMockAutheliaCtx(t)
+ defer mock.Close()
+
+ assert.False(t, mock.Ctx.IsXHR())
+}