Log TeamSnap token exchange failures
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user