summaryrefslogtreecommitdiff
path: root/captcha.py
diff options
context:
space:
mode:
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