Administración
Recopilar Copias de Seguridad - /api/backups/collect
-
Endpoint:
/api/backups/collect -
Method: POST
-
Description: Recopila datos de copia de seguridad directamente desde un servidor Duplicati a través de su API. Este endpoint detecta automáticamente el mejor protocolo de conexión (HTTPS con validación SSL, HTTPS con certificados autofirmados o HTTP como alternativa) y se conecta al servidor Duplicati para recuperar la información de copia de seguridad y procesarla en la base de datos local.
-
Autenticación: Requiere sesión válida y token CSRF
-
Cuerpo de la solicitud:
{"hostname": "duplicati-server.local","port": 8200,"password": "your-password","downloadJson": false} -
Respuesta:
{"success": true,"serverName": "Server Name","serverAlias": "My Server","stats": {"processed": 5,"skipped": 2,"errors": 0},"backupSettings": {"added": 2,"total": 7}} -
Respuestas de error:
400: Parámetros de solicitud inválidos o conexión fallida500: Error del servidor durante la recopilación de copias de seguridad
-
Notas:
- El endpoint detecta automáticamente el protocolo de conexión óptimo (HTTPS → HTTPS con certificados autofirmados → HTTP)
- Los intentos de detección del protocolo se realizan según orden de preferencia de seguridad
- Los tiempos de espera de conexión son configurables mediante variables de entorno
- Registra los datos recopilados en modo desarrollo para depuración
- Asegura que la configuración de copias de seguridad esté completa para todos los servidores y copias de seguridad
- Usa el puerto predeterminado 8200 si no se especifica
- El protocolo detectado y la URL del servidor se almacenan automáticamente en la base de datos
serverAliasse recupera de la base de datos y puede estar vacío si no se ha establecido un alias- La interfaz debe usar
serverAlias || serverNamecon fines de visualización - Admite tanto la descarga en formato JSON como la recopilación directa mediante API
Limpiar Copias de Seguridad - /api/backups/cleanup
-
Endpoint:
/api/backups/cleanup -
Method: POST
-
Description: Elimina datos antiguos de copias de seguridad según el período de retención. Este endpoint ayuda a gestionar el tamaño de la base de datos eliminando registros de copias de seguridad obsoletos, manteniendo los datos recientes e importantes.
-
Autenticación: Requiere sesión válida y token CSRF
-
Cuerpo de la solicitud:
{"retentionPeriod": "6 months"} -
Períodos de retención:
"6 months","1 year","2 years","Delete all data" -
Respuesta:
{"message": "Successfully deleted 15 old backups","status": 200}
Para la opción "Eliminar todos los datos":
{
"message": "Successfully deleted all 15 backups and 3 servers, and cleared configuration settings",
"status": 200
}
- Respuestas de error:
401: No autorizado - Sesión o token CSRF inválido400: Período de retención inválido especificado500: Error del servidor durante la operación de limpieza con información detallada del error
- Notas:
- La operación de limpieza es irreversible
- Los datos de copia de seguridad se eliminan permanentemente de la base de datos
- Los registros de máquinas se conservan incluso si se eliminan todas las copias de seguridad
- Cuando se selecciona "Eliminar todos los datos", se eliminan todas las máquinas y copias de seguridad y se borra la configuración
- El informe de errores mejorado incluye detalles y traza de pila en modo desarrollo
- Admite retención basada en tiempo y eliminación completa de datos
Eliminar trabajo de copia de seguridad - /api/backups/delete-job
-
Endpoint:
/api/backups/delete-job -
Method: DELETE
-
Description: Elimina todos los registros de copia de seguridad para una combinación específica de servidor y copia de seguridad. Este endpoint solo está disponible en modo desarrollo.
-
Autenticación: Requiere sesión válida y token CSRF
-
Cuerpo de la solicitud:
{"serverId": "server-id","backupName": "Backup Name"} -
Respuesta:
{"message": "Successfully deleted 5 backup record(s) for \"Files\" from server \"My Server\"","status": 200,"deletedCount": 5,"serverName": "My Server","backupName": "Files"} -
Respuestas de error:
401: No autorizado - Sesión o token CSRF inválido403: La eliminación de trabajos de copia de seguridad solo está disponible en modo desarrollo400: Se requieren ID del servidor y nombre de la copia de seguridad404: No se encontraron copias de seguridad para eliminar500: Error del servidor durante la eliminación con información detallada del error
-
Notas:
- Esta operación solo está disponible en modo desarrollo
- Esta operación es irreversible
- Todos los registros de copia de seguridad para la combinación servidor-copia de seguridad especificada se eliminarán permanentemente
- Devuelve la cantidad de copias de seguridad eliminadas y la información del servidor
- Usa el alias del servidor para mostrarlo si está disponible, de lo contrario utiliza el nombre del servidor
Sincronizar horarios de copia de seguridad - /api/backups/sync-schedule
-
Endpoint:
/api/backups/sync-schedule -
Method: POST
-
Description: Sincroniza la información de programación de copias de seguridad desde un servidor Duplicati. Este endpoint se conecta al servidor, recupera la información de programación para todas las copias de seguridad y actualiza la configuración local de copias de seguridad con detalles de programación, incluyendo intervalos de repetición, días de la semana permitidos y horarios de programación.
-
Autenticación: Requiere sesión válida y token CSRF
-
Cuerpo de la solicitud:
{"hostname": "duplicati-server.local","port": 8200,"password": "your-password","serverId": "optional-server-id"}
O solo con serverId (usa la contraseña almacenada):
{
"serverId": "server-id"
}
O con serverId y credenciales actualizadas:
{
"serverId": "server-id",
"hostname": "new-hostname.local",
"port": 8200,
"password": "new-password"
}
-
Respuesta:
{"success": true,"serverName": "Server Name","stats": {"processed": 5,"errors": 0}}
Con errores:
{
"success": true,
"serverName": "Server Name",
"stats": {
"processed": 3,
"errors": 2
},
"errors": [
"Backup Name 1: Error message",
"Backup Name 2: Error message"
]
}
- Respuestas de error:
400: Parámetros de solicitud no válidos, falta el nombre de host o la contraseña cuando no se proporciona serverId, o conexión fallida404: Servidor no encontrado (cuando se proporciona serverId) o no hay contraseña almacenada para el servidor500: Error del servidor durante la sincronización del horario
- Notas:
- El punto de conexión detecta automáticamente el protocolo de conexión óptimo (HTTPS → HTTPS con certificado autofirmado → HTTP)
- Puede llamarse solo con serverId para usar las credenciales del servidor almacenadas
- Puede llamarse con serverId y nuevas credenciales para actualizar los detalles de conexión del servidor
- Puede llamarse con hostname/puerto/contraseña sin serverId para servidores nuevos
- Actualiza la configuración de copias de seguridad con la información del horario, incluyendo:
expectedInterval: El intervalo de repetición (por ejemplo, "Diariamente", "Semanalmente", "Mensualmente")allowedWeekDays: Array de días de la semana permitidos (0=Domingo, 1=Lunes, etc.)time: La hora programada para la copia de seguridad
- Procesa todas las copias de seguridad encontradas en el servidor
- Devuelve estadísticas sobre las copias de seguridad procesadas y cualquier error encontrado
- Registra eventos de auditoría para operaciones de sincronización exitosas y fallidas
- Usa el puerto por defecto 8200 si no se especifica
Probar conexión al servidor - /api/servers/test-connection
-
Endpoint:
/api/servers/test-connection -
Method: POST
-
Description: Prueba la conexión a un servidor Duplicati para verificar que sea accesible.
-
Cuerpo de la solicitud:
{"server_url": "http://localhost:8200"} -
Respuesta:
{"success": true,"message": "Connection successful"} -
Respuestas de error:
400: Formato de URL no válido o falta la URL del servidor500: Error del servidor durante la prueba de conexión
-
Notas:
- El punto de conexión valida el formato de la URL y prueba la conectividad
- Devuelve éxito si el servidor responde con un estado 401 (esperado para el punto de acceso de inicio de sesión sin credenciales)
- Prueba la conexión al punto de acceso de inicio de sesión del servidor Duplicati
- Admite los protocolos HTTP y HTTPS
- Usa la configuración de tiempo de espera para la prueba de conexión
Obtener URL del servidor - /api/servers/:serverId/server-url
-
Endpoint:
/api/servers/:serverId/server-url -
Method: GET
-
Description: Recupera la URL del servidor para un servidor específico.
-
Parámetros:
serverId: el identificador del servidor
-
Respuesta:
{"serverId": "server-id","server_url": "http://localhost:8200"} -
Respuestas de error:
404: Servidor no encontrado500: Error del servidor
-
Notas:
- Devuelve la URL del servidor para el servidor específico
- Se utiliza para la gestión de la conexión del servidor
- Devuelve una cadena vacía si no se ha establecido ninguna URL del servidor
Actualizar URL del servidor - /api/servers/:serverId/server-url
-
Endpoint:
/api/servers/:serverId/server-url -
Method: PATCH
-
Description: Actualiza la URL del servidor para un servidor específico.
-
Autenticación: Requiere sesión válida y token CSRF
-
Parámetros:
serverId: el identificador del servidor
-
Cuerpo de la solicitud:
{"server_url": "http://localhost:8200"} -
Respuesta:
{"message": "Server URL updated successfully","serverId": "server-id","serverName": "Server Name","server_url": "http://localhost:8200"} -
Respuestas de error:
401: No autorizado - Sesión o token CSRF no válido400: Formato de URL no válido404: Servidor no encontrado500: Error del servidor durante la actualización
-
Notas:
- El punto de conexión valida el formato de la URL antes de actualizar
- Se permiten URLs de servidor vacías o nulas
- Admite los protocolos HTTP y HTTPS
- Devuelve la información actualizada del servidor
Obtener contraseña del servidor - /api/servers/:serverId/password
-
Endpoint:
/api/servers/:serverId/password -
Method: GET
-
Description: Recupera un token CSRF para operaciones relacionadas con la contraseña del servidor.
-
Autenticación: Requiere una sesión válida
-
Parámetros:
serverId: el identificador del servidor
-
Respuesta:
{"csrfToken": "csrf-token-string","serverId": "server-id"} -
Respuestas de error:
401: Sesión inválida o expirada500: Error al generar el token CSRF
-
Notas:
- Devuelve el token CSRF para usarlo en operaciones de actualización de contraseña
- La sesión debe ser válida para generar el token
Actualizar contraseña del servidor - /api/servers/:serverId/password
-
Endpoint:
/api/servers/:serverId/password -
Method: PATCH
-
Description: Actualiza la contraseña para un servidor específico.
-
Autenticación: Requiere sesión válida y token CSRF
-
Parámetros:
serverId: el identificador del servidor
-
Cuerpo de la solicitud:
{"password": "new-password"} -
Respuesta:
{"message": "Password updated successfully","serverId": "server-id"} -
Respuestas de error:
400: La contraseña debe ser una cadena de texto401: No autorizado - Sesión o token CSRF inválido500: Error al actualizar la contraseña
-
Notas:
- La contraseña puede ser una cadena vacía para eliminarla
- La contraseña se almacena de forma segura mediante el sistema de gestión de secretos
Gestión de usuarios
Listar Usuarios - /api/users
-
Endpoint:
/api/users -
Method: GET
-
Description: Lista todos los usuarios con paginación y filtrado de búsqueda opcional. Devuelve información del usuario, incluyendo historial de inicio de sesión y estado de la cuenta.
-
Autenticación: Requiere privilegios de administrador, sesión válida y token CSRF
-
Parámetros de consulta:
page(opcional): Número de página (por defecto: 1)limit(opcional): Elementos por página (por defecto: 50)search(opcional): Término de búsqueda para filtrar por nombre de usuario
-
Respuesta:
{"users": [{"id": "user-id","username": "admin","isAdmin": true,"mustChangePassword": false,"createdAt": "2024-01-01T00:00:00Z","lastLoginAt": "2024-01-15T10:30:00Z","lastLoginIp": "192.168.1.100","failedLoginAttempts": 0,"lockedUntil": null,"isLocked": false}],"pagination": {"page": 1,"limit": 50,"total": 5,"totalPages": 1}} -
Respuestas de error:
401: No autorizado - Sesión o token CSRF inválido403: Prohibido - Se requieren privilegios de administrador500: Error interno del servidor
-
Notas:
- Solo accesible para usuarios administradores
- Admite paginación y filtrado de búsqueda
- Devuelve el estado de la cuenta del usuario, incluido el estado de bloqueo
Crear usuario - /api/users
-
Endpoint:
/api/users -
Method: POST
-
Description: Crea una nueva cuenta de usuario. Puede generar una contraseña temporal o utilizar una contraseña proporcionada.
-
Autenticación: Requiere privilegios de administrador, sesión válida y token CSRF
-
Cuerpo de la solicitud:
{"username": "newuser","password": "optional-password","isAdmin": false,"requirePasswordChange": true} -
username: Obligatorio, debe tener entre 3 y 50 caracteres, únicopassword: Opcional, si no se proporciona se genera una contraseña temporal seguraisAdmin: Opcional, por defecto falsorequirePasswordChange: Opcional, por defecto verdadero
-
Respuesta:
{"user": {"id": "user-id","username": "newuser","isAdmin": false,"mustChangePassword": true},"temporaryPassword": "generated-password-123"} -
temporaryPasswordsolo se incluye si se generó una contraseña automáticamente -
Respuestas de error:
400: Formato de nombre de usuario inválido, violación de la política de contraseñas o errores de validación401: No autorizado - Sesión o token CSRF inválido403: Prohibido - Se requieren privilegios de administrador409: El nombre de usuario ya existe500: Error interno del servidor
-
Notas:
- Solo accesible para usuarios administradores
- El nombre de usuario no distingue entre mayúsculas y minúsculas y se almacena en minúsculas
- Si no se proporciona una contraseña, se genera una contraseña segura de 12 caracteres
- Las contraseñas temporales generadas solo se devuelven una vez en la respuesta
- La creación de usuarios se registra en el registro de auditoría
Actualizar usuario - /api/users/:id
-
Endpoint:
/api/users/:id -
Method: PATCH
-
Description: Actualiza la información del usuario, incluyendo nombre de usuario, estado de administrador, requisito de cambio de contraseña y restablecimiento de contraseña.
-
Autenticación: Requiere privilegios de administrador, sesión válida y token CSRF
-
Parámetros:
id: ID del usuario a actualizar
-
Cuerpo de la solicitud:
{"username": "updated-username","isAdmin": true,"requirePasswordChange": false,"resetPassword": true} -
Todos los campos son opcionales
resetPassword: Si es verdadero, genera una nueva contraseña temporal y establecerequirePasswordChangeen verdadero
-
Respuesta (con restablecimiento de contraseña):
{"user": {"id": "user-id","username": "updated-username","isAdmin": true,"mustChangePassword": true},"temporaryPassword": "new-temp-password-456"} -
Respuesta (sin restablecimiento de contraseña):
{"user": {"id": "user-id","username": "updated-username","isAdmin": true,"mustChangePassword": false}} -
Respuestas de error:
400: Entrada no válida o errores de validación401: No autorizado - Sesión o token CSRF no válido403: Prohibido - Se requieren privilegios de administrador404: Usuario no encontrado409: El nombre de usuario ya existe (si se cambia el nombre de usuario)500: Error interno del servidor
-
Notas:
- Solo accesible para usuarios administradores
- Los cambios de nombre de usuario se validan para garantizar la unicidad
- El restablecimiento de contraseña genera una contraseña temporal segura de 12 caracteres
- Todos los cambios se registran en el registro de auditoría
Eliminar usuario - /api/users/:id
-
Endpoint:
/api/users/:id -
Method: DELETE
-
Description: Elimina una cuenta de usuario. Impide eliminar tu propia cuenta o la última cuenta de administrador.
-
Autenticación: Requiere privilegios de administrador, sesión válida y token CSRF
-
Parámetros:
id: ID del usuario a eliminar
-
Respuesta:
{"success": true,"message": "User deleted successfully"} -
Respuestas de error:
400: No se puede eliminar tu propia cuenta o la última cuenta de administrador401: No autorizado - Sesión o token CSRF no válido403: Prohibido - Se requieren privilegios de administrador404: Usuario no encontrado500: Error interno del servidor
-
Notas:
- Solo accesible para usuarios administradores
- No se puede eliminar tu propia cuenta
- No se puede eliminar la última cuenta de administrador (debe quedar al menos un administrador)
- La eliminación del usuario se registra en el registro de auditoría
- Las sesiones asociadas se eliminan automáticamente (en cascada)
Gestión del registro de auditoría
Listar registros de auditoría - /api/audit-log
-
Endpoint:
/api/audit-log -
Method: GET
-
Description: Recupera entradas del registro de auditoría con filtros, paginación y capacidades de búsqueda. Admite paginación basada en páginas y basada en desplazamiento.
-
Autenticación: Requiere sesión válida y token CSRF (se requiere usuario autenticado)
-
Parámetros de consulta:
page(opcional): Número de página para paginación basada en páginaoffset(opcional): Desplazamiento para paginación basada en offset (tiene prioridad sobre la página)limit(opcional): Elementos por página (por defecto: 50)startDate(opcional): Filtrar registros desde esta fecha (formato ISO)endDate(opcional): Filtrar registros hasta esta fecha (formato ISO)userId(opcional): Filtrar por ID de usuariousername(opcional): Filtrar por nombre de usuarioaction(opcional): Filtrar por nombre de accióncategory(opcional): Filtrar por categoría (auth,user_management,config,backup,server)status(opcional): Filtrar por estado (success,failure,error)
-
Respuesta:
{"logs": [{"id": 1,"timestamp": "2024-01-15T10:30:00Z","userId": "user-id","username": "admin","action": "login","category": "auth","targetType": "user","targetId": "user-id","status": "success","ipAddress": "192.168.1.100","userAgent": "Mozilla/5.0...","details": {"is_admin": true},"errorMessage": null}],"pagination": {"page": 1,"limit": 50,"total": 150,"totalPages": 3}} -
Respuestas de error:
401: No autorizado - Sesión o token CSRF no válido500: Error interno del servidor
-
Notas:
- Admite paginación basada en página (
page) y basada en offset (offset) - El campo
detailscontiene JSON analizado con contexto adicional - Todas las consultas del registro de auditoría se registran
- Admite paginación basada en página (
Obtener valores de filtro del registro de auditoría - /api/audit-log/filters
-
Endpoint:
/api/audit-log/filters -
Method: GET
-
Description: Recupera valores únicos de filtro disponibles para filtrar registros de auditoría. Devuelve todas las acciones, categorías y estados distintos que existen en la base de datos del registro de auditoría. Útil para rellenar menús desplegables de filtro en la interfaz de usuario.
-
Autenticación: Requiere sesión válida y token CSRF (se requiere usuario autenticado)
-
Respuesta:
{"actions": ["login","logout","user_created","user_updated","config_updated"],"categories": ["auth","user_management","config","backup","server"],"statuses": ["success","failure","error"]} -
Respuestas de error:
401: No autorizado - Sesión o token CSRF no válido500: Error interno del servidor
-
Notas:
- Devuelve matrices de valores únicos de la base de datos del registro de auditoría
- Los valores se ordenan alfabéticamente
- Se devuelven matrices vacías si no hay datos o en caso de error
- Utilizado por el visor de registros de auditoría para rellenar dinámicamente los desplegables de filtro
Descargar registros de auditoría - /api/audit-log/download
- Endpoint:
/api/audit-log/download - Method: GET
- Description: Descarga registros de auditoría en formato CSV o JSON con filtrado opcional. Útil para análisis externos e informes.
- Autenticación: Requiere sesión válida y token CSRF (se requiere usuario autenticado)
- Parámetros de consulta:
format(opcional): Formato de exportación -csvojson(por defecto:csv)startDate(opcional): Filtrar registros desde esta fecha (formato ISO)endDate(opcional): Filtrar registros hasta esta fecha (formato ISO)userId(opcional): Filtrar por ID de usuariousername(opcional): Filtrar por nombre de usuarioaction(opcional): Filtrar por nombre de accióncategory(opcional): Filtrar por categoríastatus(opcional): Filtrar por estado
- Respuesta (CSV):
- Content-Type:
text/csv - Content-Disposition:
attachment; filename="audit-log-YYYY-MM-DD.csv" - Archivo CSV con encabezados: ID, Marca de tiempo, ID de usuario, Nombre de usuario, Acción, Categoría, Tipo de destino, ID de destino, Estado, Dirección IP, Agente de usuario, Detalles, Mensaje de error
- Content-Type:
- Respuesta (JSON):
- Content-Type:
application/json - Content-Disposition:
attachment; filename="audit-log-YYYY-MM-DD.json" - Array JSON de entradas del registro de auditoría
- Content-Type:
- Respuestas de error:
400: No hay registros para exportar401: No autorizado - Sesión o token CSRF inválido500: Error interno del servidor
- Notas:
- El límite de exportación es de 10,000 registros
- El formato CSV escapa correctamente los caracteres especiales
- El campo Detalles en CSV está serializado en formato JSON
- El nombre del archivo incluye la fecha actual
Limpiar registros de auditoría - /api/audit-log/cleanup
-
Endpoint:
/api/audit-log/cleanup -
Method: POST
-
Description: Dispara manualmente la limpieza de registros de auditoría antiguos según el período de retención. Admite el modo de prueba (dry-run) para previsualizar qué se eliminaría.
-
Autenticación: Requiere privilegios de administrador, sesión válida y token CSRF
-
Cuerpo de la solicitud:
{"retentionDays": 90,"dryRun": false} -
retentionDays(opcional): Anular los días de retención (30-365), de lo contrario usa el valor configuradodryRun(opcional): Si es verdadero, solo devuelve lo que se eliminaría sin eliminarlo realmente
-
Respuesta (modo de prueba):
{"dryRun": true,"wouldDeleteCount": 50,"oldestRemaining": "2024-01-01T00:00:00Z","retentionDays": 90,"cutoffDate": "2024-01-01"} -
Respuesta (limpieza real):
{"success": true,"deletedCount": 50,"oldestRemaining": "2024-01-01T00:00:00Z","retentionDays": 90} -
Respuestas de error:
400: Días de retención no válidos (deben estar entre 30 y 365)401: No autorizado - Sesión o token CSRF inválido403: Prohibido - Se requieren privilegios de administrador500: Error interno del servidor
-
Notas:
- Solo accesible para usuarios administradores
- La retención por defecto es de 90 días si no está configurada
- La operación de limpieza se registra en el registro de auditoría
- El modo de prueba es útil para previsualizar el impacto de la limpieza
Obtener retención del registro de auditoría - /api/audit-log/retention
-
Endpoint:
/api/audit-log/retention -
Método: GET
-
Descripción: Recupera la configuración actual de retención del registro de auditoría en días.
-
Autenticación: Requiere sesión válida y token CSRF (no se requiere usuario autenticado)
-
Respuesta:
{"retentionDays": 90} -
Respuestas de error:
500: Error interno del servidor
-
Notas:
- La retención por defecto es de 90 días si no está configurada
- Puede accederse sin autenticación (solo lectura)
Actualizar retención del registro de auditoría - /api/audit-log/retention
-
Endpoint:
/api/audit-log/retention -
Método: PATCH
-
Descripción: Actualiza el período de retención del registro de auditoría en días. Esta configuración determina cuánto tiempo se conservan los registros de auditoría antes de la eliminación automática.
-
Autenticación: Requiere privilegios de administrador, sesión válida y token CSRF
-
Cuerpo de la solicitud:
{"retentionDays": 120} -
retentionDays: Obligatorio, debe estar entre 30 y 365 días -
Respuesta:
{"success": true,"retentionDays": 120} -
Respuestas de error:
400: Días de retención no válidos (deben estar entre 30 y 365)401: No autorizado - Sesión o token CSRF inválido403: Prohibido - Se requieren privilegios de administrador500: Error interno del servidor
-
Notas:
- Solo accesible para usuarios administradores
- El cambio de configuración se registra en el registro de auditoría
- El período de retención afecta las operaciones de limpieza automáticas y manuales
Gestión de base de datos
Copiar base de datos - /api/database/backup
- Endpoint:
/api/database/backup - Método: GET
- Descripción: Crea una copia de seguridad de la base de datos en formato binario (.db) o SQL (.sql). El archivo de copia de seguridad se descarga automáticamente con un nombre que incluye la marca de tiempo.
- Autenticación: Requiere privilegios de administrador, sesión válida y token CSRF
- Parámetros de consulta:
format(opcional): Formato de copia de seguridad -db(binario) osql(volcado SQL). Por defecto:db
- Respuesta:
- Content-Type:
application/octet-stream(para .db) otext/plain(para .sql) - Content-Disposition:
attachment; filename="duplistatus-backup-YYYY-MM-DDTHH-MM-SS.db"o.sql - Contenido binario del archivo (para .db) o contenido de texto SQL (para .sql)
- Content-Type:
- Respuestas de error:
400: Formato no válido (debe ser "db" o "sql")401: No autorizado - Sesión o token CSRF no válido403: Prohibido - Se requieren privilegios de administrador500: No se pudo crear la copia de seguridad de la base de datos
- Notas:
- Solo accesible para usuarios administradores
- El formato binario utiliza el método de copia de seguridad de SQLite para garantizar la integridad
- El formato SQL crea un volcado de texto de todo el contenido de la base de datos
- La marca de tiempo en el nombre del archivo utiliza la zona horaria local del servidor
- La operación de copia de seguridad se registra en el registro de auditoría
- Los archivos temporales se eliminan automáticamente después de la descarga
Restaurar base de datos - /api/database/restore
-
Endpoint:
/api/database/restore -
Método: POST
-
Descripción: Restaura la base de datos desde un archivo de copia de seguridad (formato .db o .sql). Crea una copia de seguridad de seguridad antes de la restauración y elimina todas las sesiones tras la restauración por motivos de seguridad.
-
Autenticación: Requiere privilegios de administrador, sesión válida y token CSRF
-
Cuerpo de la solicitud: FormData con un campo de archivo llamado
database- El archivo debe ser
.db,.sqlite,.sqlite3(formato binario) o.sql(formato SQL) - Tamaño máximo del archivo: 100 MB
- El archivo debe ser
-
Respuesta:
{"success": true,"message": "Database restored successfully from DB file","safetyBackupPath": "duplistatus-backup-YYYY-MM-DDTHH-MM-SS.db","requiresReauth": true} -
Respuestas de error:
400: No se proporcionó archivo, el tamaño del archivo excede el límite, formato de archivo no válido o falló la verificación de integridad de la base de datos401: No autorizado - Sesión o token CSRF no válido403: Prohibido - Se requieren privilegios de administrador500: No se pudo restaurar la base de datos (la base de datos original se restaura desde la copia de seguridad de seguridad si falla la restauración)
-
Notas:
- Solo accesible para usuarios administradores
- Crea automáticamente una copia de seguridad de seguridad antes de la restauración
- Admite formatos binario (.db) y SQL (.sql)
- Valida la integridad de la base de datos después de la restauración
- Si la restauración falla, se restaura automáticamente desde la copia de seguridad de seguridad
- Todas las sesiones se eliminan tras una restauración exitosa por motivos de seguridad
- Devuelve
requiresReauth: truepara indicar que el usuario debe iniciar sesión nuevamente - La operación de restauración se registra en el registro de auditoría
- Para el formato SQL, valida el contenido SQL antes de su ejecución
- La conexión a la base de datos se reinicializa después de la restauración
- Todas las cachés se invalidan después de la restauración
Marcas de tiempo de copia de seguridad
Obtener marcas de tiempo de la última copia de seguridad - /api/backups/last-timestamps
-
Endpoint:
/api/backups/last-timestamps -
Método: GET
-
Descripción: Recupera la marca de tiempo de la última copia de seguridad para cada combinación servidor-copia de seguridad. Devuelve un mapa para facilitar la búsqueda.
-
Autenticación: Requiere sesión válida y token CSRF
-
Respuesta:
{"timestamps": {"server-id-1:Backup Name 1": "2024-03-20T10:00:00Z","server-id-1:Backup Name 2": "2024-03-20T11:00:00Z","server-id-2:Backup Name 1": "2024-03-20T12:00:00Z"},"raw": [{"server_name": "Server Name","server_id": "server-id-1","backup_name": "Backup Name 1","date": "2024-03-20T10:00:00Z"}]} -
Respuestas de error:
401: No autorizado - Sesión o token CSRF no válido500: No se pudieron obtener las marcas de tiempo de la última copia de seguridad
-
Notas:
- Devuelve tanto un mapa (para búsqueda fácil por
server_id:backup_name) como el formato de matriz sin procesar - Incluye cabeceras de control de caché para evitar el almacenamiento en caché
- Útil para rastrear los tiempos de la última copia de seguridad en todas las combinaciones de servidor y copia de seguridad
- Las marcas de tiempo están en formato ISO
- Devuelve tanto un mapa (para búsqueda fácil por
Gestión de registros de la aplicación
Obtener registros de la aplicación - /api/application-logs
-
Endpoint:
/api/application-logs -
Método: GET
-
Descripción: Recupera entradas de registro de la aplicación desde archivos de registro. Admite la lectura de archivos de registro actuales y rotados con funcionalidad de seguimiento final (tail).
-
Autenticación: Requiere privilegios de administrador, sesión válida y token CSRF
-
Parámetros de consulta:
file(opcional): Nombre del archivo de registro a leer -application.log,application.log.1,application.log.2, etc. Si no se proporciona, devuelve la lista de archivos disponiblestail(opcional): Número de líneas a devolver desde el final del archivo (por defecto: 1000, mínimo: 1, máximo: 10000)
-
Respuesta (con parámetro de archivo):
{"logs": "log content as string...","fileSize": 1024000,"lastModified": "2024-03-20T10:00:00Z","lineCount": 5000,"currentFile": "application.log","availableFiles": ["application.log", "application.log.1", "application.log.2"]} -
Respuesta (sin el parámetro de archivo):
{"logs": "","fileSize": 0,"lastModified": "2024-03-20T10:00:00Z","lineCount": 0,"currentFile": "","availableFiles": ["application.log", "application.log.1", "application.log.2"]} -
Respuestas de error:
400: Parámetro de cola no válido (debe estar entre 1 y 10000) o formato de parámetro de archivo no válido401: No autorizado - Sesión o token CSRF no válido403: Prohibido - Se requieren privilegios de administrador404: Archivo de registro no encontrado500: No se pudo leer el archivo de registro
-
Notas:
- Solo accesible para usuarios administradores
- Admite la lectura del archivo de registro actual y archivos rotados (hasta 10 archivos rotados)
- Devuelve las últimas N líneas (cola) del archivo de registro especificado
- El nombre del archivo de registro lo determina la variable de entorno (por defecto:
application.log) - Devuelve la lista de archivos de registro disponibles cuando no se proporciona el parámetro de archivo
- Los nombres de archivo se validan para evitar ataques de recorrido de directorio
- Los archivos rotados se numeran secuencialmente (
.1,.2, etc.)
Exportar registros de la aplicación - /api/application-logs/export
- Endpoint:
/api/application-logs/export - Método: GET
- Descripción: Exporta entradas de registro de la aplicación en formato de texto filtrado. Admite filtrado por nivel de registro y cadena de búsqueda.
- Autenticación: Requiere privilegios de administrador, sesión válida y token CSRF
- Parámetros de consulta:
file(requerido): Nombre del archivo de registro a exportar -application.log,application.log.1,application.log.2, etc.logLevels(opcional): Lista separada por comas de niveles de registro a incluir -INFO,WARN,ERROR(por defecto:INFO,WARN,ERROR)search(opcional): Cadena de búsqueda para filtrar líneas de registro (no distingue mayúsculas y minúsculas)
- Respuesta:
- Content-Type:
text/plain - Content-Disposition:
attachment; filename="duplistatus-logs-YYYY-MM-DDTHH-MM-SS.txt" - Contenido de registro filtrado como texto plano
- Content-Type:
- Respuestas de error:
400: El parámetro de archivo es obligatorio o tiene un formato no válido401: No autorizado - Sesión o token CSRF no válido403: Prohibido - Se requieren privilegios de administrador500: No se pudieron exportar los registros
- Notas:
- Solo accesible para usuarios administradores
- Exporta entradas de registro filtradas según el nivel de registro y los criterios de búsqueda
- Admite filtrado por niveles de registro:
INFO,WARN,ERROR - El filtrado por cadena de búsqueda no distingue mayúsculas y minúsculas
- Las líneas vacías se filtran automáticamente
- El nombre del archivo de registro lo determina la variable de entorno (por defecto:
application.log) - Los nombres de archivo se validan para evitar ataques de recorrido de directorio
- El archivo exportado incluye la marca de tiempo en el nombre del archivo
- Útil para análisis externo y solución de problemas