mirror of
https://github.com/steveiliop56/tinyauth.git
synced 2026-03-13 10:12:06 +00:00
fix: make a x forwarded uri an non required header
This commit is contained in:
@@ -90,10 +90,13 @@ func (controller *ProxyController) proxyHandler(c *gin.Context) {
|
|||||||
tlog.App.Debug().Msg("Request identified as (most likely) coming from a non-browser client")
|
tlog.App.Debug().Msg("Request identified as (most likely) coming from a non-browser client")
|
||||||
}
|
}
|
||||||
|
|
||||||
uri, ok := controller.requireHeader(c, "x-forwarded-uri")
|
uri, ok := controller.getHeader(c, "x-forwarded-uri")
|
||||||
|
|
||||||
if !ok {
|
if !ok {
|
||||||
return
|
originalUri, ok := controller.getHeader(c, "x-original-uri")
|
||||||
|
if ok {
|
||||||
|
uri = originalUri
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
host, ok := controller.requireHeader(c, "x-forwarded-host")
|
host, ok := controller.requireHeader(c, "x-forwarded-host")
|
||||||
@@ -334,8 +337,8 @@ func (controller *ProxyController) handleError(c *gin.Context, req Proxy, isBrow
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (controller *ProxyController) requireHeader(c *gin.Context, header string) (string, bool) {
|
func (controller *ProxyController) requireHeader(c *gin.Context, header string) (string, bool) {
|
||||||
val := c.Request.Header.Get(header)
|
val, ok := controller.getHeader(c, header)
|
||||||
if strings.TrimSpace(val) == "" {
|
if !ok {
|
||||||
tlog.App.Error().Str("header", header).Msg("Header not found")
|
tlog.App.Error().Str("header", header).Msg("Header not found")
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": 400,
|
"status": 400,
|
||||||
@@ -345,3 +348,8 @@ func (controller *ProxyController) requireHeader(c *gin.Context, header string)
|
|||||||
}
|
}
|
||||||
return val, true
|
return val, true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (controller *ProxyController) getHeader(c *gin.Context, header string) (string, bool) {
|
||||||
|
val := c.Request.Header.Get(header)
|
||||||
|
return val, strings.TrimSpace(val) != ""
|
||||||
|
}
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ func TestProxyHandler(t *testing.T) {
|
|||||||
req = httptest.NewRequest("GET", "/api/auth/nginx", nil)
|
req = httptest.NewRequest("GET", "/api/auth/nginx", nil)
|
||||||
req.Header.Set("X-Forwarded-Proto", "https")
|
req.Header.Set("X-Forwarded-Proto", "https")
|
||||||
req.Header.Set("X-Forwarded-Host", "example.com")
|
req.Header.Set("X-Forwarded-Host", "example.com")
|
||||||
req.Header.Set("X-Forwarded-Uri", "/somepath")
|
// we won't set X-Forwarded-Uri to test that the controller can work without it
|
||||||
router.ServeHTTP(recorder, req)
|
router.ServeHTTP(recorder, req)
|
||||||
|
|
||||||
assert.Equal(t, 401, recorder.Code)
|
assert.Equal(t, 401, recorder.Code)
|
||||||
@@ -171,7 +171,7 @@ func TestProxyHandler(t *testing.T) {
|
|||||||
req = httptest.NewRequest("GET", "/api/auth/traefik", nil)
|
req = httptest.NewRequest("GET", "/api/auth/traefik", nil)
|
||||||
req.Header.Set("X-Forwarded-Proto", "https")
|
req.Header.Set("X-Forwarded-Proto", "https")
|
||||||
req.Header.Set("X-Forwarded-Host", "example.com")
|
req.Header.Set("X-Forwarded-Host", "example.com")
|
||||||
req.Header.Set("X-Forwarded-Uri", "/somepath")
|
req.Header.Set("X-Original-Uri", "/somepath") // Test with original URI for kubernetes ingress
|
||||||
req.Header.Set("Accept", "text/html")
|
req.Header.Set("Accept", "text/html")
|
||||||
|
|
||||||
router.ServeHTTP(recorder, req)
|
router.ServeHTTP(recorder, req)
|
||||||
|
|||||||
Reference in New Issue
Block a user