summaryrefslogtreecommitdiff
path: root/captcha.py
diff options
context:
space:
mode:
authoraltaf-creator <dev@altafcreator.com>2026-05-17 13:01:57 +0800
committeraltaf-creator <dev@altafcreator.com>2026-05-17 13:01:57 +0800
commit9e7fe6d8dad56c237adb1905e130c1d723131812 (patch)
treedd067e14b3ec5af719d748427bb322320c248879 /captcha.py
parentd04598ba59d7267ee4db3745ff90eaa1a990072a (diff)
big structural change, altafcreator.com no longer served statically, projects now use md, blog is being reworked, videos removed temp
Diffstat (limited to 'captcha.py')
-rw-r--r--captcha.py29
1 files changed, 29 insertions, 0 deletions
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