From d8fec0e5d70138f467b87dfe7fc56c374658513a Mon Sep 17 00:00:00 2001 From: Julian Tabel Date: Sun, 22 Mar 2026 12:15:25 +0100 Subject: [PATCH] fix:add debugging endpoint for auth issues --- backend/src/app/api/health.py | 48 ++++++++++++++++++++++++++++++++++- backend/src/app/core/auth.py | 2 +- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/backend/src/app/api/health.py b/backend/src/app/api/health.py index 0fac3f0..e407b84 100644 --- a/backend/src/app/api/health.py +++ b/backend/src/app/api/health.py @@ -1,6 +1,10 @@ -from fastapi import APIRouter +import urllib.request + +from fastapi import APIRouter, Request from sqlalchemy import text +from app.core.auth import _build_jwks_url, _extract_token, _get_jwks_client +from app.core.config import settings from app.core.database import async_session router = APIRouter(tags=["health"]) @@ -23,3 +27,45 @@ async def health_check(): async def root(): """Root endpoint.""" return {"message": "Nuzlocke Tracker API", "docs": "/docs"} + + +@router.get("/auth-debug") +async def auth_debug(request: Request): + """Temporary diagnostic endpoint for auth debugging.""" + result: dict = {} + + # Config + result["supabase_url"] = settings.supabase_url + result["has_jwt_secret"] = bool(settings.supabase_jwt_secret) + result["jwks_url"] = ( + _build_jwks_url(settings.supabase_url) if settings.supabase_url else None + ) + + # JWKS fetch + jwks_url = result["jwks_url"] + if jwks_url: + try: + with urllib.request.urlopen(jwks_url, timeout=5) as resp: + result["jwks_status"] = resp.status + result["jwks_body"] = resp.read().decode() + except Exception as e: + result["jwks_fetch_error"] = str(e) + + # JWKS client + client = _get_jwks_client() + result["jwks_client_exists"] = client is not None + + # Token info (header only, no secrets) + token = _extract_token(request) + if token: + import jwt + + try: + header = jwt.get_unverified_header(token) + result["token_header"] = header + except Exception as e: + result["token_header_error"] = str(e) + else: + result["token"] = "not provided" + + return result diff --git a/backend/src/app/core/auth.py b/backend/src/app/core/auth.py index 8c28b5d..8808d14 100644 --- a/backend/src/app/core/auth.py +++ b/backend/src/app/core/auth.py @@ -90,7 +90,7 @@ def _verify_jwt(token: str) -> dict | None: except PyJWKSetError as e: logger.warning("JWKS set error: %s", e) else: - logger.debug("No JWKS client available (SUPABASE_URL not set?)") + logger.warning("No JWKS client available (SUPABASE_URL not set?)") return _verify_jwt_hs256(token)