""" Servicio de notificaciones por email para validación interna Este módulo gestiona el envío de correos a los validadores internos con la información del vídeo para su revisión regulatoria. """ import os import json import base64 from typing import Dict, Any, List, Optional from datetime import datetime from dataclasses import dataclass # Imports para email (comentados hasta configuración) # import smtplib # from email.mime.text import MIMEText # from email.mime.multipart import MIMEMultipart # from email.mime.base import MIMEBase # from email import encoders @dataclass class ValidationRequest: """Solicitud de validación para envío por email""" document_id: str user_email: str user_name: str video_title: str video_hash: str timestamp: str video_url: str consent_data: Dict[str, Any] class EmailNotificationService: """Servicio de notificaciones por email para validadores""" def __init__(self): # Configuración SMTP (comentada hasta despliegue) self.smtp_server = os.getenv("SMTP_SERVER", "smtp.gmail.com") self.smtp_port = int(os.getenv("SMTP_PORT", "587")) self.sender_email = os.getenv("SENDER_EMAIL", "validations@veureu.cat") self.sender_password = os.getenv("SENDER_PASSWORD", "") # Lista de validadores internos self.validators = self._load_validators() def _load_validators(self) -> List[str]: """Carga lista de validadores desde configuración""" # En producción, esto vendría de base de datos o config default_validators = [ "validator1@veureu.cat", "validator2@veureu.cat", "compliance@veureu.cat" ] # Permitir sobreescribir por variable de entorno env_validators = os.getenv("VALIDATOR_EMAILS", "") if env_validators: return [email.strip() for email in env_validators.split(",")] return default_validators def _generate_validation_email(self, request: ValidationRequest) -> str: """Genera contenido del email de validación""" approval_link = f"https://veureu-demo.hf.space/validate?doc_id={request.document_id}&action=approve" rejection_link = f"https://veureu-demo.hf.space/validate?doc_id={request.document_id}&action=reject" email_content = f""" Solicitud de Validación - Veureu

🔐 Solicitud de Validación Regulatoria

📋 Información del Envío

Usuario: {request.user_name} ({request.user_email})
Vídeo: {request.video_title}
Hash: {request.video_hash[:32]}...
Timestamp: {request.timestamp}
ID Documento: {request.document_id}

✅ Consentimientos Aceptados

🎥 Acceso al Vídeo

Puedes revisar el vídeo en el siguiente enlace:

📹 Ver Vídeo

🔍 Decisión de Validación

Por favor, revisa el contenido y toma una decisión:

✅ APROBAR ❌ RECHAZAR

Esta decisión quedará registrada en AWS QLDB para cumplimiento normativo (AI Act, GDPR).

Este es un mensaje automático del sistema de validación regulatoria de Veureu.

Para consultas, contacta a compliance@veureu.cat

""" return email_content def send_validation_request(self, request: ValidationRequest) -> bool: """ Envía solicitud de validación a todos los validadores Returns: True si éxito, False si error """ try: subject = f"🔐 Validación Regulatoria - {request.video_title}" html_content = self._generate_validation_email(request) # Código comentado hasta configuración SMTP """ # Configurar mensaje msg = MIMEMultipart('alternative') msg['Subject'] = subject msg['From'] = self.sender_email msg['To'] = ', '.join(self.validators) # Adjuntar contenido HTML html_part = MIMEText(html_content, 'html') msg.attach(html_part) # Enviar email with smtplib.SMTP(self.smtp_server, self.smtp_port) as server: server.starttls() server.login(self.sender_email, self.sender_password) server.send_message(msg) """ # Temporal: logging simulado print(f"[EMAIL - SIMULATED] Enviando solicitud de validación:") print(f"[EMAIL - SIMULATED] Para: {', '.join(self.validators)}") print(f"[EMAIL - SIMULATED] Asunto: {subject}") print(f"[EMAIL - SIMULATED] Documento: {request.document_id}") print(f"[EMAIL - SIMULATED] Usuario: {request.user_email}") print(f"[EMAIL - SIMULATED] Vídeo: {request.video_title}") return True except Exception as e: print(f"[EMAIL ERROR] Error enviando validación: {e}") return False def send_decision_notification(self, validator_email: str, decision: str, document_id: str, comments: str = "") -> bool: """ Envía notificación de decisión tomada por validador Returns: True si éxito, False si error """ try: subject = f"🔍 Decisión de Validación - {decision.upper()}" content = f""" Se ha registrado una decisión de validación: Validador: {validator_email} Documento: {document_id} Decisión: {decision} Comentarios: {comments} Timestamp: {datetime.now().isoformat()} Esta decisión ha quedado registrada en AWS QLDB. """ # Código comentado hasta configuración SMTP """ msg = MIMEText(content) msg['Subject'] = subject msg['From'] = self.sender_email msg['To'] = 'compliance@veureu.cat' with smtplib.SMTP(self.smtp_server, self.smtp_port) as server: server.starttls() server.login(self.sender_email, self.sender_password) server.send_message(msg) """ # Temporal: logging simulado print(f"[EMAIL - SIMULATED] Notificación de decisión enviada:") print(f"[EMAIL - SIMULATED] Validador: {validator_email}") print(f"[EMAIL - SIMULATED] Decisión: {decision}") print(f"[EMAIL - SIMULATED] Documento: {document_id}") return True except Exception as e: print(f"[EMAIL ERROR] Error enviando notificación: {e}") return False # Instancia global notification_service = EmailNotificationService()