/**
 * Configuración reforzada de Shield para Adonis.js
 * 
 * Cumple OWASP + buenas prácticas de cabeceras HTTP.
 * Compatible con AdonisJS 5 y React frontend.
 */

import { ShieldConfig } from '@ioc:Adonis/Addons/Shield'

/*
|--------------------------------------------------------------------------
| Content Security Policy (CSP)
|--------------------------------------------------------------------------
| Bloquea la ejecución de scripts o recursos externos no autorizados.
| Ajusta las URLs según tu frontend o servicios externos (Google Fonts, etc).
*/
export const csp: ShieldConfig['csp'] = {
  enabled: true, // ✅ Activa CSP

  directives: {
    defaultSrc: ["'self'"],

    // Permitir scripts solo del mismo dominio y con nonce
    scriptSrc: ["'self'", "'unsafe-inline'", "'unsafe-eval'", 'https://www.google.com', 'https://www.gstatic.com'],

    // Permitir hojas de estilo del dominio y Google Fonts
    styleSrc: ["'self'", "'unsafe-inline'", 'https://fonts.googleapis.com'],

    // Permitir carga de fuentes solo desde dominios confiables
    fontSrc: ["'self'", 'https://fonts.gstatic.com'],

    // Imágenes: solo las del mismo dominio o HTTPS
    imgSrc: ["'self'", 'data:', 'https:'],

    // Bloquear conexión con orígenes desconocidos
    connectSrc: ["'self'", 'https://www.google-analytics.com', 'https://www.recaptcha.net'],

    // Evitar ejecución de frames externos
    frameSrc: ["'self'", 'https://www.google.com'],

    objectSrc: ["'none'"], // Bloquea Flash, Silverlight, etc.
    upgradeInsecureRequests: true,
  },

  reportOnly: false,
}

/*
|--------------------------------------------------------------------------
| CSRF Protection
|--------------------------------------------------------------------------
| Mantén habilitado si usas formularios o peticiones autenticadas.
*/
export const csrf: ShieldConfig['csrf'] = {
  enabled: true,
  exceptRoutes: ['/api/*'], // ignora tus endpoints API si usan tokens JWT
  enableXsrfCookie: true,
  methods: ['POST', 'PUT', 'PATCH', 'DELETE'],
}

/*
|--------------------------------------------------------------------------
| DNS Prefetching
|--------------------------------------------------------------------------
| Puedes mantenerlo activado para mejorar rendimiento.
*/
export const dnsPrefetch: ShieldConfig['dnsPrefetch'] = {
  enabled: true,
  allow: true,
}

/*
|--------------------------------------------------------------------------
| Iframe Options
|--------------------------------------------------------------------------
| Evita que tu sitio sea embebido (clickjacking).
*/
export const xFrame: ShieldConfig['xFrame'] = {
  enabled: true,
  action: 'SAMEORIGIN', // 'DENY' puede romper servicios externos como reCAPTCHA
}

/*
|--------------------------------------------------------------------------
| HTTP Strict Transport Security (HSTS)
|--------------------------------------------------------------------------
| Obliga a HTTPS en navegadores (importante para seguridad SSL/TLS).
*/
export const hsts: ShieldConfig['hsts'] = {
  enabled: true,
  maxAge: '180 days',
  includeSubDomains: true,
  preload: true, // ✅ Recomendado: añade tu dominio a la lista HSTS Preload
}

/*
|--------------------------------------------------------------------------
| No Sniff
|--------------------------------------------------------------------------
| Evita que los navegadores interpreten tipos MIME incorrectos.
*/
export const contentTypeSniffing: ShieldConfig['contentTypeSniffing'] = {
  enabled: true,
}
