Log TeamSnap token exchange failures
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import logging
|
||||||
import secrets
|
import secrets
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
@@ -13,6 +14,8 @@ from .config import settings
|
|||||||
from .database import get_db
|
from .database import get_db
|
||||||
from .models import UserSession
|
from .models import UserSession
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def utcnow() -> datetime:
|
def utcnow() -> datetime:
|
||||||
return datetime.now(timezone.utc)
|
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 def exchange_code_for_token(code: str) -> dict:
|
||||||
async with httpx.AsyncClient(timeout=15.0) as client:
|
try:
|
||||||
response = await client.post(
|
async with httpx.AsyncClient(timeout=15.0) as client:
|
||||||
settings.teamsnap_token_url,
|
response = await client.post(
|
||||||
data={
|
settings.teamsnap_token_url,
|
||||||
"grant_type": "authorization_code",
|
data={
|
||||||
"code": code,
|
"grant_type": "authorization_code",
|
||||||
"redirect_uri": settings.teamsnap_redirect_uri,
|
"code": code,
|
||||||
"client_id": settings.teamsnap_client_id,
|
"redirect_uri": settings.teamsnap_redirect_uri,
|
||||||
"client_secret": settings.teamsnap_client_secret,
|
"client_id": settings.teamsnap_client_id,
|
||||||
},
|
"client_secret": settings.teamsnap_client_secret,
|
||||||
headers={"Accept": "application/json"},
|
},
|
||||||
)
|
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:
|
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")
|
raise HTTPException(status_code=status.HTTP_502_BAD_GATEWAY, detail="TeamSnap token exchange failed")
|
||||||
return response.json()
|
return response.json()
|
||||||
|
|
||||||
|
|
||||||
async def refresh_access_token(refresh_token: str) -> dict:
|
async def refresh_access_token(refresh_token: str) -> dict:
|
||||||
async with httpx.AsyncClient(timeout=15.0) as client:
|
try:
|
||||||
response = await client.post(
|
async with httpx.AsyncClient(timeout=15.0) as client:
|
||||||
settings.teamsnap_token_url,
|
response = await client.post(
|
||||||
data={
|
settings.teamsnap_token_url,
|
||||||
"grant_type": "refresh_token",
|
data={
|
||||||
"refresh_token": refresh_token,
|
"grant_type": "refresh_token",
|
||||||
"client_id": settings.teamsnap_client_id,
|
"refresh_token": refresh_token,
|
||||||
"client_secret": settings.teamsnap_client_secret,
|
"client_id": settings.teamsnap_client_id,
|
||||||
},
|
"client_secret": settings.teamsnap_client_secret,
|
||||||
headers={"Accept": "application/json"},
|
},
|
||||||
)
|
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:
|
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")
|
raise HTTPException(status_code=status.HTTP_502_BAD_GATEWAY, detail="TeamSnap token refresh failed")
|
||||||
return response.json()
|
return response.json()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user