cac0d28aa9
- Backend: helper verify_turnstile en _base (verifica el token contra challenges.cloudflare.com/siteverify; fail-closed ante error de red; si no hay secreto configurado, no bloquea). Se exige en el POST de login_view, register_view y recover_account_view -> rechazo con mensaje si falla. - settings: TURNSTILE_SITE_KEY / TURNSTILE_SECRET_KEY desde .env (el secreto NO se commitea). La clave de sitio se expone a las plantillas por el context processor (TURNSTILE_SITE_KEY). - Frontend: hook useTurnstile (carga el script de Cloudflare una vez y renderiza el widget, devuelve el token). LoginForm/RegisterForm/RecoverForm incluyen el widget, mandan cf-turnstile-response y deshabilitan el submit hasta tener token. El sitekey llega por data-sitekey en el div de montaje. Verificado: sin token los 3 POST se rechazan; siteverify acepta la clave secreta (error invalid-input-response con token falso, no invalid-input-secret). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
from django.conf import settings
|
|
from .models import ServerSelection
|
|
from django.db import connections
|
|
import socket
|
|
|
|
def url_principal(request):
|
|
"""Devuelve la URL principal del sitio."""
|
|
current_domain = f"{request.scheme}://{request.get_host()}"
|
|
return {'URL_PRINCIPAL': current_domain}
|
|
|
|
def configuracion_global(request):
|
|
"""Devuelve configuraciones globales como el nombre del servidor y el año actual."""
|
|
return {
|
|
'NOMBRE_SERVIDOR': settings.NOMBRE_SERVIDOR,
|
|
'ANIO_ACTUAL': settings.ANIO_ACTUAL,
|
|
'TURNSTILE_SITE_KEY': settings.TURNSTILE_SITE_KEY,
|
|
}
|
|
|
|
def get_server_info(request):
|
|
"""Devuelve información del servidor para que esté disponible en todas las plantillas."""
|
|
server_selection = ServerSelection.objects.first()
|
|
|
|
online_count = 0
|
|
if server_selection:
|
|
# Obtener la cantidad de personajes en línea
|
|
try:
|
|
with connections['acore_characters'].cursor() as cursor:
|
|
cursor.execute("SELECT COUNT(*) FROM characters WHERE online = 1")
|
|
result = cursor.fetchone()
|
|
if result is not None:
|
|
online_count = result[0]
|
|
except Exception as e:
|
|
# Manejar errores de conexión o consulta
|
|
print(f"Error al obtener personajes en línea: {e}")
|
|
|
|
return {
|
|
'server': server_selection,
|
|
'online_characters': online_count,
|
|
'expansion': server_selection.expansion if server_selection else 'Unknown',
|
|
}
|