Skip to content

Commit

Permalink
Merge pull request #2209 from DSD-DBS/handle-query-in-auth-redirect
Browse files Browse the repository at this point in the history
fix: Encode query parameters in Grafana & Prometheus auth redirects
  • Loading branch information
MoritzWeber0 authored Feb 17, 2025
2 parents 348d6b7 + c748419 commit 831d636
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 5 deletions.
3 changes: 2 additions & 1 deletion backend/capellacollab/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
from capellacollab.sessions import auth as sessions_auth
from capellacollab.sessions import idletimeout, operators

from . import __version__, metrics
from . import __version__, metrics, redirects

stream_handler = logging.StreamHandler()
stream_handler.setFormatter(core_logging.CustomFormatter())
Expand Down Expand Up @@ -160,6 +160,7 @@ async def healthcheck():

app.add_route("/metrics", starlette_prometheus.metrics)
app.include_router(router, prefix="/api/v1")
app.include_router(redirects.router)


def custom_openapi():
Expand Down
21 changes: 21 additions & 0 deletions backend/capellacollab/redirects.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# SPDX-FileCopyrightText: Copyright DB InfraGO AG and contributors
# SPDX-License-Identifier: Apache-2.0

from urllib import parse as urllib_parse

import fastapi
from fastapi import responses

router = fastapi.APIRouter()


@router.get("/grafana{_:path}", include_in_schema=False)
@router.get("/prometheus{_:path}", include_in_schema=False)
def redirect_unauthorized_grafana_requests(request: fastapi.Request):
path = f"{request.url.path}"
if request.url.query:
path += f"?{request.url.query}"

return responses.RedirectResponse(
url=f"/auth?auto=true&redirectTo={urllib_parse.quote(path)}"
)
4 changes: 2 additions & 2 deletions helm/config/nginx-grafana.conf
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ http {
}

location @error401 {
absolute_redirect off;
return 302 /auth?auto=true&redirectTo=$request_uri;
# Pass request to backend to handle redirect
proxy_pass http://{{ .Release.Name }}-backend:80$request_uri;
}

location /auth {
Expand Down
4 changes: 2 additions & 2 deletions helm/config/nginx-prometheus.conf
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ http {
}

location @error401 {
absolute_redirect off;
return 302 /auth?auto=true&redirectTo=$request_uri;
# Pass request to backend to handle redirect
proxy_pass http://{{ .Release.Name }}-backend:80;
}

location /auth {
Expand Down

0 comments on commit 831d636

Please sign in to comment.