Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-pages.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'internal/auth/auth.go')
-rw-r--r--internal/auth/auth.go19
1 files changed, 15 insertions, 4 deletions
diff --git a/internal/auth/auth.go b/internal/auth/auth.go
index b4dc73aa..4f085e38 100644
--- a/internal/auth/auth.go
+++ b/internal/auth/auth.go
@@ -38,10 +38,11 @@ const (
callbackPath = "/auth"
authorizeProxyTemplate = "%s?domain=%s&state=%s"
- failAuthErrMsg = "failed to authenticate request"
- fetchAccessTokenErrMsg = "fetching access token failed"
- queryParameterErrMsg = "failed to parse domain query parameter"
- saveSessionErrMsg = "failed to save the session"
+ failAuthErrMsg = "failed to authenticate request"
+ fetchAccessTokenErrMsg = "fetching access token failed"
+ queryParameterErrMsg = "failed to parse domain query parameter"
+ saveSessionErrMsg = "failed to save the session"
+ domainQueryParameterErrMsg = "domain query parameter only supports http/https protocol"
)
var (
@@ -197,6 +198,7 @@ func (a *Auth) domainAllowed(ctx context.Context, name string, domains source.So
return (domain != nil && err == nil)
}
+// nolint: gocyclo // TODO refactor this function https://gitlab.com/gitlab-org/gitlab-pages/-/issues/813
func (a *Auth) handleProxyingAuth(session *hostSession, w http.ResponseWriter, r *http.Request, domains source.Source) bool {
// handle auth callback e.g. https://gitlab.io/auth?domain=domain&state=state
if shouldProxyAuthToGitlab(r) {
@@ -211,6 +213,15 @@ func (a *Auth) handleProxyingAuth(session *hostSession, w http.ResponseWriter, r
httperrors.Serve500(w)
return true
}
+
+ // domain query param can only contain https or http URLs.
+ if proxyurl.Scheme != "http" && proxyurl.Scheme != "https" {
+ logRequest(r).WithField("domain_query", domain).Warn(domainQueryParameterErrMsg)
+
+ httperrors.Serve401(w)
+ return true
+ }
+
host, _, err := net.SplitHostPort(proxyurl.Host)
if err != nil {
host = proxyurl.Host