from dotenv import load_dotenv from os import getenv import requests load_dotenv() TURNSTILE_SECRET = getenv("CLOUDFLARE_TURNSTILE_SECRET").encode("utf-8") # https://developers.cloudflare.com/turnstile/get-started/server-side-validation/, modified # returns response if success, returns None if unsuccessful. def validate_turnstile(token, remoteip=None) -> tuple: url = 'https://challenges.cloudflare.com/turnstile/v0/siteverify' data = { 'secret': TURNSTILE_SECRET, 'response': token } if remoteip: data['remoteip'] = remoteip try: response = requests.post(url, data=data, timeout=10) response.raise_for_status() return response.json() except requests.RequestException as e: print(f"Turnstile validation error: {e}") return None