mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 03:51:09 -05:00
- Cleaned up and standardized assertions in ApiTestMixin for API response validation. - Updated ASGI settings to use os.environ for setting the DJANGO_SETTINGS_MODULE. - Removed unused imports and improved formatting in settings.py. - Refactored URL patterns in urls.py for better readability and organization. - Enhanced view functions in views.py for consistency and clarity. - Added .flake8 configuration for linting and style enforcement. - Introduced type stubs for django-environ to improve type checking with Pylance.
36 lines
1.0 KiB
Python
36 lines
1.0 KiB
Python
import requests
|
|
from django.conf import settings
|
|
from django.core.exceptions import ValidationError
|
|
|
|
|
|
class TurnstileMixin:
|
|
"""
|
|
Mixin to handle Cloudflare Turnstile validation.
|
|
Bypasses validation when DEBUG is True.
|
|
"""
|
|
|
|
def validate_turnstile(self, request):
|
|
"""
|
|
Validate the Turnstile response token.
|
|
Skips validation when DEBUG is True.
|
|
"""
|
|
if settings.DEBUG:
|
|
return
|
|
|
|
token = request.POST.get("cf-turnstile-response")
|
|
if not token:
|
|
raise ValidationError("Please complete the Turnstile challenge.")
|
|
|
|
# Verify the token with Cloudflare
|
|
data = {
|
|
"secret": settings.TURNSTILE_SECRET_KEY,
|
|
"response": token,
|
|
"remoteip": request.META.get("REMOTE_ADDR"),
|
|
}
|
|
|
|
response = requests.post(settings.TURNSTILE_VERIFY_URL, data=data, timeout=60)
|
|
result = response.json()
|
|
|
|
if not result.get("success"):
|
|
raise ValidationError("Turnstile validation failed. Please try again.")
|