Coverage for polar/integrations/plain/endpoints.py: 48%
19 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 17:15 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 17:15 +0000
1import hashlib 1a
2import hmac 1a
4from fastapi import Depends, Header, HTTPException, Request 1a
6from polar.config import settings 1a
7from polar.postgres import AsyncSession, get_db_session 1a
8from polar.routing import APIRouter 1a
10from .schemas import CustomerCardsRequest, CustomerCardsResponse 1a
11from .service import plain as plain_service 1a
13router = APIRouter( 1a
14 prefix="/integrations/plain", tags=["integrations_plain"], include_in_schema=False
15)
18@router.post("/cards") 1a
19async def get_cards( 1ab
20 request: Request,
21 customer_cards_request: CustomerCardsRequest,
22 plain_request_signature: str = Header(...),
23 session: AsyncSession = Depends(get_db_session),
24) -> CustomerCardsResponse:
25 secret = settings.PLAIN_REQUEST_SIGNING_SECRET
26 if secret is None:
27 raise HTTPException(status_code=404)
29 raw_body = await request.body()
30 signature = hmac.new(secret.encode("utf-8"), raw_body, hashlib.sha256).hexdigest()
31 if not hmac.compare_digest(signature, plain_request_signature):
32 raise HTTPException(status_code=403)
34 return await plain_service.get_cards(session, customer_cards_request)