diff --git a/CHANGELOG_SESSION.md b/CHANGELOG_SESSION.md index 04fdcab..6a2c891 100644 --- a/CHANGELOG_SESSION.md +++ b/CHANGELOG_SESSION.md @@ -77,3 +77,35 @@ Implementación del almacenamiento redundante local o de red: - **Corrupción de Módulo `jwt`**: Se resolvió una colisión de dependencias en Python donde instalar el paquete genérico `jwt` en lugar de `PyJWT` rompía el método `jwt.encode`. Se forzó la reinstalación limpia de `pyjwt` en el entorno virtual. - **Reset de Admin por Defecto**: Añadida lógica de restablecimiento forzado de contraseña en el inicio del backend (`main.py`) para asegurar que el usuario administrador (`admin@oneverdrive.local`) y su contraseña (`Admin1234!`) se impongan y validen automáticamente en entornos de desarrollo/pruebas. +--- + +## 📂 9. Explorador Local del Servidor y Conectores de Red UNC (NAS) + +Se han añadido controles y APIs de red para flexibilizar la ubicación del almacenamiento centralizado: +- **Explorador Interactivo**: En la configuración global del panel web, se añadió el botón **Explorar** al almacenamiento local. Permite navegar interactivamente por las carpetas del servidor y seleccionar el directorio ideal sin escribirlo manualmente. En Windows, expone al inicio las letras de unidad disponibles (`C:\`, `D:\`, etc.). +- **Montaje UNC en Caliente**: Implementación de `connect_network_share` en [`settings_service.py`](file:///c:/Workspace/onever_drive/backend/app/services/settings_service.py) que realiza llamadas controladas al comando `net use` de Windows con credenciales de red. El backend valida el recurso y monta la unidad de almacenamiento central antes de guardar la configuración de destino. +- **Botón "Probar Conexión"**: Permite testear en caliente permisos de lectura y escritura en la unidad compartida. + +--- + +## ⚡ 10. Motor Programable de Scripts del Servidor (Automatización Externa) + +Se ha creado un motor asíncrono y planificador en el servidor para disparar backups en plataformas web externas: +- **Base de Datos y Modelos**: Creación de las tablas `script_jobs` y `script_job_runs` para persistir tareas automatizadas e historiales completos. +- **Programador (Scheduler Daemon)**: El daemon `script_scheduler_daemon` en `main.py` corre minuto a minuto. Valida las expresiones cron de tareas activas de manera asíncrona mediante un pool de hilos (`run_in_executor`) para evitar bloqueos del loop principal de FastAPI. +- **Plantillas Pre-configuradas**: Sembrado de tareas listas para producción destinadas a: + - **FortiGate**: Copias de seguridad a través de la API REST de configuración de FortiOS. + - **UniFi Controller**: Descargas automatizadas usando cookies de autenticación de red. + - **Grandstream UCM/GWN**: Script completo en Python para automatizar el volcado del sistema. +- **Terminal Oscura e Historial**: Nueva pestaña en la web con capacidad de ejecutar scripts manualmente y abrir una modal del historial con terminal oscura (`monospace` font, terminal negra) para auditar la salida estándar (`stdout`/`stderr`) de los intérpretes Python/Bash con codificación UTF-8 robusta. + +--- + +## 🤖 11. Paridad de Características de Karen's Replicator en el Agente de Windows + +Hemos añadido paridad absoluta en el cliente nativo de Windows (PyQt6) con respecto a la interfaz original de Karen's Replicator, implementando tres características clave: +- **Tags de Carpeta Destino (Destination Folder Tags)**: El motor resuelve expresiones de fecha en la ruta local (ej. `D:\Backup\--
`) reemplazando etiquetas en tiempo real al ejecutar el backup. La GUI del agente PyQt6 incorpora un botón interactivo **Tags...** que despliega un menú flotante con las variables utilizables. +- **Papelera de Reciclaje (Move to Recycle Bin)**: Implementación de la API ctypes `SHFileOperationW` mapeada de la librería nativa de Windows `shell32.dll`. Al replicar eliminaciones locales, los archivos huérfanos se mueven de forma segura a la Papelera de Reciclaje permitiendo su restauración manual, con fallback transparente a la remoción física permanente si el sistema no es compatible. +- **Exclusiones Globales del Sistema (Global Exclusions)**: Inclusión automática en el escáner del agente de exclusiones de archivos del sistema bloqueados (`pagefile.sys`, `hiberfil.sys`, `Thumbs.db`, `Desktop.ini`, `*.tmp`) y carpetas temporales o de papelera (`Temp`, `Recycler`, `$Recycle.Bin`). El agente PyQt incluye una casilla en la sección de configuraciones para activar/desactivar el filtrado global de forma persistente. + +