outposts/proxy: Fix invalid redirect on external hosts containing path components (#8915)

* outposts/proxy: Fix invalid redirect on external hosts containing path components

Signed-off-by: Max <github@germancoding.com>

* outposts/proxy: Fix test for changed redirect logic

Signed-off-by: Max <github@germancoding.com>

---------

Signed-off-by: Max <github@germancoding.com>
This commit is contained in:
Max
2024-03-19 20:31:08 +01:00
committed by GitHub
parent 880ca9a57d
commit 1b81973358
2 changed files with 4 additions and 15 deletions

View File

@ -3,7 +3,6 @@ package application
import (
"net/http"
"net/url"
"path"
"strconv"
"strings"
@ -11,22 +10,12 @@ import (
"goauthentik.io/internal/outpost/proxyv2/constants"
)
func urlPathSet(originalUrl string, newPath string) string {
u, err := url.Parse(originalUrl)
if err != nil {
return originalUrl
}
u.Path = newPath
return u.String()
}
func urlJoin(originalUrl string, newPath string) string {
u, err := url.Parse(originalUrl)
u, err := url.JoinPath(originalUrl, newPath)
if err != nil {
return originalUrl
}
u.Path = path.Join(u.Path, newPath)
return u.String()
return u
}
func (a *Application) redirectToStart(rw http.ResponseWriter, r *http.Request) {
@ -46,7 +35,7 @@ func (a *Application) redirectToStart(rw http.ResponseWriter, r *http.Request) {
}
}
redirectUrl := urlPathSet(a.proxyConfig.ExternalHost, r.URL.Path)
redirectUrl := urlJoin(a.proxyConfig.ExternalHost, r.URL.Path)
if a.Mode() == api.PROXYMODE_FORWARD_DOMAIN {
dom := strings.TrimPrefix(*a.proxyConfig.CookieDomain, ".")