Log TeamSnap token exchange failures

This commit is contained in:
Codex
2026-04-24 09:52:29 -05:00
parent 2574dc52c5
commit 022609191f

View File

@@ -1,5 +1,6 @@
from __future__ import annotations
import logging
import secrets
from datetime import datetime, timedelta, timezone
from urllib.parse import urlencode
@@ -13,6 +14,8 @@ from .config import settings
from .database import get_db
from .models import UserSession
logger = logging.getLogger(__name__)
def utcnow() -> datetime:
return datetime.now(timezone.utc)
@@ -119,36 +122,57 @@ async def fetch_teamsnap_user_id(access_token: str) -> str | None:
async def exchange_code_for_token(code: str) -> dict:
async with httpx.AsyncClient(timeout=15.0) as client:
response = await client.post(
settings.teamsnap_token_url,
data={
"grant_type": "authorization_code",
"code": code,
"redirect_uri": settings.teamsnap_redirect_uri,
"client_id": settings.teamsnap_client_id,
"client_secret": settings.teamsnap_client_secret,
},
headers={"Accept": "application/json"},
)
try:
async with httpx.AsyncClient(timeout=15.0) as client:
response = await client.post(
settings.teamsnap_token_url,
data={
"grant_type": "authorization_code",
"code": code,
"redirect_uri": settings.teamsnap_redirect_uri,
"client_id": settings.teamsnap_client_id,
"client_secret": settings.teamsnap_client_secret,
},
headers={"Accept": "application/json"},
)
except httpx.HTTPError as exc:
logger.exception("TeamSnap token exchange request failed")
raise HTTPException(status_code=status.HTTP_502_BAD_GATEWAY, detail="TeamSnap token exchange failed") from exc
if response.status_code >= 400:
logger.error(
"TeamSnap token exchange rejected: status=%s body=%s redirect_uri=%s client_id_suffix=%s",
response.status_code,
response.text,
settings.teamsnap_redirect_uri,
settings.teamsnap_client_id[-6:] if settings.teamsnap_client_id else "",
)
raise HTTPException(status_code=status.HTTP_502_BAD_GATEWAY, detail="TeamSnap token exchange failed")
return response.json()
async def refresh_access_token(refresh_token: str) -> dict:
async with httpx.AsyncClient(timeout=15.0) as client:
response = await client.post(
settings.teamsnap_token_url,
data={
"grant_type": "refresh_token",
"refresh_token": refresh_token,
"client_id": settings.teamsnap_client_id,
"client_secret": settings.teamsnap_client_secret,
},
headers={"Accept": "application/json"},
)
try:
async with httpx.AsyncClient(timeout=15.0) as client:
response = await client.post(
settings.teamsnap_token_url,
data={
"grant_type": "refresh_token",
"refresh_token": refresh_token,
"client_id": settings.teamsnap_client_id,
"client_secret": settings.teamsnap_client_secret,
},
headers={"Accept": "application/json"},
)
except httpx.HTTPError as exc:
logger.exception("TeamSnap token refresh request failed")
raise HTTPException(status_code=status.HTTP_502_BAD_GATEWAY, detail="TeamSnap token refresh failed") from exc
if response.status_code >= 400:
logger.error(
"TeamSnap token refresh rejected: status=%s body=%s client_id_suffix=%s",
response.status_code,
response.text,
settings.teamsnap_client_id[-6:] if settings.teamsnap_client_id else "",
)
raise HTTPException(status_code=status.HTTP_502_BAD_GATEWAY, detail="TeamSnap token refresh failed")
return response.json()