Coverage for polar/integrations/plain/endpoints.py: 48%

19 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-12-05 15:52 +0000

1import hashlib 1a

2import hmac 1a

3 

4from fastapi import Depends, Header, HTTPException, Request 1a

5 

6from polar.config import settings 1a

7from polar.postgres import AsyncSession, get_db_session 1a

8from polar.routing import APIRouter 1a

9 

10from .schemas import CustomerCardsRequest, CustomerCardsResponse 1a

11from .service import plain as plain_service 1a

12 

13router = APIRouter( 1a

14 prefix="/integrations/plain", tags=["integrations_plain"], include_in_schema=False 

15) 

16 

17 

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) 

28 

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) 

33 

34 return await plain_service.get_cards(session, customer_cards_request)