95 lines
3.1 KiB
Python
95 lines
3.1 KiB
Python
from django.http import JsonResponse
|
|
from .acciones import Admin
|
|
import logging
|
|
import json
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
|
|
from django.utils import timezone
|
|
from .models import Log
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def status_view(request):
|
|
# BLOQUE 1: Log de iniciación
|
|
logger.info("INICIO - Ejecutando Health Check de Administración.")
|
|
|
|
# BLOQUE 2: Limpieza y validación de datos
|
|
# Para un status simple, el diccionario de limpieza está vacío
|
|
data_cleaned = {}
|
|
|
|
# BLOQUE 3: Llamada a la acción
|
|
try:
|
|
# Instanciamos la clase Admin y llamamos al método
|
|
admin_logic = Admin()
|
|
response_data = admin_logic.get_status_action()
|
|
status_code = 200
|
|
except Exception as e:
|
|
logger.error(f"ERROR - Fallo en get_status_action: {str(e)}")
|
|
response_data = {"status": "error", "message": "Internal Server Error"}
|
|
status_code = 500
|
|
|
|
# BLOQUE 4: Log de cierre y retorno
|
|
logger.info(f"FIN - Health Check completado. Status: {status_code}")
|
|
return JsonResponse(response_data, status=status_code)
|
|
|
|
@csrf_exempt
|
|
@staticmethod
|
|
def api_token(request):
|
|
"""
|
|
Endpoint: api/token/
|
|
Patrón: 4 bloques con persistencia en Log DB.
|
|
"""
|
|
# --- BLOQUE 1: LOG INITIATION ---
|
|
logger.info("INICIO - Petición de JWT (api/token/)")
|
|
|
|
# Iniciamos el registro en la base de datos (Estándar compañeros)
|
|
log_entry = Log.objects.create(
|
|
user='anonimo',
|
|
path='api/token/',
|
|
method='POST',
|
|
createdAt=timezone.now(),
|
|
status_code='0'
|
|
)
|
|
|
|
try:
|
|
if request.method == 'POST':
|
|
# --- BLOQUE 2: DATA CLEANING ---
|
|
body_data = json.loads(request.body)
|
|
log_entry.request = body_data # Guardamos lo que entró
|
|
log_entry.save()
|
|
|
|
params = {
|
|
'username': body_data.get('username'),
|
|
'password': body_data.get('password')
|
|
}
|
|
|
|
# --- BLOQUE 3: ACTION CALL ---
|
|
admin_logic = Admin()
|
|
resultado = admin_logic.obtener_token_action(params)
|
|
|
|
# --- BLOQUE 4: LOG CLOSURE & RESPONSE ---
|
|
if resultado:
|
|
status = 200
|
|
log_entry.user = resultado['user']
|
|
log_entry.response = resultado
|
|
log_entry.status_code = str(status)
|
|
log_entry.updatedAt = timezone.now()
|
|
log_entry.save()
|
|
|
|
logger.info(f"FIN - JWT generado para: {log_entry.user}")
|
|
return JsonResponse(resultado, status=status)
|
|
else:
|
|
status = 401
|
|
response_error = {"error": "Credenciales inválidas"}
|
|
log_entry.status_code = str(status)
|
|
log_entry.response = response_error
|
|
log_entry.save()
|
|
return JsonResponse(response_error, status=status)
|
|
|
|
except Exception as e:
|
|
logger.error(f"ERROR CRÍTICO en api_token: {str(e)}")
|
|
log_entry.status_code = '500'
|
|
log_entry.response = {'error': str(e)}
|
|
log_entry.save()
|
|
return JsonResponse({'error': 'Error interno'}, status=500) |