fooder-api/fooder/captcha.py

19 lines
525 B
Python

import httpx
from fooder.exc import CaptchaFailed
from fooder.settings import settings
async def verify_turnstile(token: str, ip: str | None = None) -> None:
data = {"secret": settings.TURNSTILE_SECRET_KEY, "response": token}
if ip:
data["remoteip"] = ip
async with httpx.AsyncClient() as client:
r = await client.post(
"https://challenges.cloudflare.com/turnstile/v0/siteverify",
data=data,
)
if not r.json().get("success"):
raise CaptchaFailed()