19 lines
525 B
Python
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()
|