"""
Utilidades de Seguridad — Core
================================
Funciones de sanitización y validación (OWASP A03).
"""

import html
import re


def sanitize_string(value):
    """
    Sanitiza una cadena de texto escapando caracteres HTML.
    Protección contra XSS (OWASP A03).
    """
    if not isinstance(value, str):
        return value
    return html.escape(value.strip())


def sanitize_filename(filename):
    """
    Sanitiza un nombre de archivo eliminando caracteres peligrosos.
    Previene path traversal (OWASP A01).
    """
    if not isinstance(filename, str):
        return filename
    # Eliminar path traversal
    filename = filename.replace("..", "").replace("/", "").replace("\\", "")
    # Solo caracteres seguros
    filename = re.sub(r"[^\w\s\-.]", "", filename)
    return filename.strip()


def get_client_ip(request):
    """
    Extrae la IP real del cliente considerando proxies.
    Valida formato para prevenir header injection.
    """
    x_forwarded_for = request.META.get("HTTP_X_FORWARDED_FOR")
    if x_forwarded_for:
        ip = x_forwarded_for.split(",")[0].strip()
    else:
        ip = request.META.get("REMOTE_ADDR", "0.0.0.0")

    # Validar formato básico de IP
    if not re.match(r"^[\d.:a-fA-F]+$", ip):
        return "0.0.0.0"
    return ip
