Skip to content

release: PostgreSQL Database Provider 3.1.0 - #12

Merged
BORNIOS merged 3 commits into
mainfrom
release/3.1.0
Oct 19, 2026
Merged

BORNIOS merged 3 commits into
mainfrom
release/3.1.0

Conversation

@BORNIOS

@BORNIOS BORNIOS commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

Resumen

Versión 3.1.0: retención de respaldos, endurecimiento del backend y rediseño de la interfaz.

Retención de respaldos

  • Días de conservación y mínimo de recientes (por defecto desactivada, 0 días; los últimos 5 siempre se conservan).
  • Solo borra archivos con el nombre que genera el plugin (<base>_aaaammdd_hhmmss.sql[.zip]).
  • Se aplica tras cada backup, con la tarea PostgreSQL Backup Retention (diaria 03:00) y con «Depurar respaldos ahora» (vista previa + confirmación).

Endurecimiento del backend

  • Consola SQL en transacción READ ONLY con timeouts; rechaza comillas de dólar.
  • La caché invalida también las escrituras de SaveChanges y al confirmar transacciones.
  • Guardar configuración valida la conexión si PostgreSQL está activo, escribe database.xml de forma atómica (+ .bak) y no devuelve la contraseña en claro.
  • Search/Instant ahora exige usuario autenticado (antes anónimo). Cambio de comportamiento: un consumidor externo sin sesión dejará de funcionar.
  • min/max(uuid) solo se marcan creados tras un intento exitoso; pg_dump/psql se terminan al cancelar; aviso de copias obsoletas del plugin.

Interfaz

  • Mismo diseño que JellyTV, responsive, sin estilos inline de tema.
  • Resultados como notificaciones; modal de confirmación homogéneo; pestaña Mantenimiento reordenada.

Pruebas

  • dotnet test: 122 correctas, 29 omitidas sin conexión de pruebas.
  • Con PostgreSQL local (bases temporales): 145 correctas, 1 omitida (antes de añadir los 5 tests de retención).
  • Interfaz revisada con capturas a 1920, 1280 y 390 px. La retención no se probó contra un servidor real ni en Linux/macOS (el código no depende del sistema operativo).

Después de aprobar

Release v3.1.0 con notas y actualización de manifest.json.

BORNIOS and others added 3 commits October 18, 2026 20:08
- Retencion de backups: dias de conservacion y minimo de recientes (0 dias = desactivada). Solo borra archivos con el nombre que genera el plugin; se aplica tras cada backup, con la tarea PostgreSQL Backup Retention y con un endpoint con vista previa.
- La consola SQL se ejecuta en una transaccion READ ONLY con statement_timeout y rechaza las comillas de dolar, que permitian ocultar una segunda sentencia.
- La cache de consultas invalida tambien las escrituras que EF envia por ExecuteReader (SaveChanges) y al confirmar una transaccion.
- Guardar la configuracion valida la conexion cuando PostgreSQL esta activo, rechaza cadenas vacias, escribe database.xml de forma atomica con .bak y no devuelve la contrasena en claro.
- Search/Instant exige un usuario autenticado (antes era anonimo).
- Los agregados min/max(uuid) solo se dan por creados si el intento tuvo exito.
- pg_dump y psql se terminan al cancelar y un volcado fallido ya no deja un .sql parcial.
- Aviso de copias obsoletas del plugin en el log, en Status y en la UI.
- Conversion de fechas a UTC y variable JELLYFIN_PG_DISABLE_QUERY_CACHE para diagnostico.
- Pruebas de cada caso.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- Mismo sistema visual que JellyTV: tarjetas, selects y checkboxes propios, pantalla completa y responsive, sin estilos inline de tema. El CSS vive dentro de la pagina porque Jellyfin descarta el head.
- Los resultados y avisos salen como notificaciones abajo a la derecha: las operaciones en curso muestran un indicador y los exitosos desaparecen solos.
- Todas las operaciones pesadas usan el mismo modal de confirmacion, que ya no se cierra al pulsar fuera.
- Pestana Mantenimiento reordenada (operaciones, respaldos con retencion, tareas programadas); Actualizar estadisticas pasa a Health.
- Titulo con subtitulo, acentos corregidos y aviso de instalacion duplicada.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@BORNIOS

BORNIOS commented Oct 19, 2026

Copy link
Copy Markdown
Owner Author

CodeQL: alerta #54 (cs/sql-injection) descartada como falso positivo

Dónde: QueryConsoleService.cs, new NpgsqlCommand(statement, connection, transaction).

Por qué se silencia y no se corrige: la consola SQL del panel existe para ejecutar el SQL que escribe un administrador. El texto llega del usuario por diseño y no se puede parametrizar; eliminar el flujo equivaldría a eliminar la función. No es una alerta nueva: es la #48 de main, que seguía abierta. En este PR aparece como nueva solo porque la sentencia cambió de línea.

Mitigaciones que sí están en el código (varias son nuevas en este PR):

  • El endpoint exige la política de elevación (solo administradores).
  • Una única sentencia por consulta y solo de lectura (SELECT, WITH, TABLE, VALUES, EXPLAIN, SHOW), con lista de palabras bloqueadas sobre el texto sin literales.
  • Nuevo: se ejecuta dentro de una transacción READ ONLY con statement_timeout y lock_timeout, de modo que el servidor rechaza cualquier escritura, DDL o avance de secuencia aunque el análisis de texto fallara.
  • Nuevo: se rechazan las comillas de dólar ($$), que permitían esconder una segunda sentencia al analizador.
  • Límite de filas y de tiempo, y cada ejecución queda en el log del plugin.
  • Pruebas de regresión en QueryConsoleTests.

CodeQL no reconoce estas barreras como sanitizadores, por eso se descarta con esta justificación.

@BORNIOS
BORNIOS merged commit ac64288 into main Oct 19, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants