From 9e7fe6d8dad56c237adb1905e130c1d723131812 Mon Sep 17 00:00:00 2001 From: altaf-creator Date: Sun, 17 May 2026 13:01:57 +0800 Subject: big structural change, altafcreator.com no longer served statically, projects now use md, blog is being reworked, videos removed temp --- captcha.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 captcha.py (limited to 'captcha.py') diff --git a/captcha.py b/captcha.py new file mode 100644 index 0000000..861e3f3 --- /dev/null +++ b/captcha.py @@ -0,0 +1,29 @@ +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 -- cgit v1.2.3