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,6 +122,7 @@ 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:
|
||||||
|
try:
|
||||||
async with httpx.AsyncClient(timeout=15.0) as client:
|
async with httpx.AsyncClient(timeout=15.0) as client:
|
||||||
response = await client.post(
|
response = await client.post(
|
||||||
settings.teamsnap_token_url,
|
settings.teamsnap_token_url,
|
||||||
@@ -131,12 +135,23 @@ async def exchange_code_for_token(code: str) -> dict:
|
|||||||
},
|
},
|
||||||
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:
|
||||||
|
try:
|
||||||
async with httpx.AsyncClient(timeout=15.0) as client:
|
async with httpx.AsyncClient(timeout=15.0) as client:
|
||||||
response = await client.post(
|
response = await client.post(
|
||||||
settings.teamsnap_token_url,
|
settings.teamsnap_token_url,
|
||||||
@@ -148,7 +163,16 @@ async def refresh_access_token(refresh_token: str) -> dict:
|
|||||||
},
|
},
|
||||||
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