PrintStash v0.8.5: ocultar secretos y arranque con S3
La v0.8.5 limpió las credenciales del historial, limitó el login, reparó la creación de buckets en S3 y redujo el trabajo repetido.
PrintStash v0.8.5 corrigió una exposición de credenciales en los registros de cambios del log de auditoría y un fallo de arranque con almacenes compatibles con S3 reales. También afinó el tratamiento del login y redujo el trabajo repetido en las páginas de impresoras y bibliotecas.
Actualiza con una copia de seguridad reciente a mano:
docker compose pulldocker compose up -dRota las credenciales si no confiabas en quien leía la auditoría
El hook genérico de cambios escribía los valores en crudo de antes y después de cada campo modificado en la base de datos. Eso podía dejar claves de API de impresoras, credenciales de S3, tokens de Spoolman y MakerWorld, material JWT y hashes de contraseñas o tokens en las respuestas de GET /admin/audit.
La v0.8.5 ocultó los campos sensibles y migró las filas de auditoría existentes para limpiar los valores capturados. Si alguien con acceso a la auditoría no debería haber visto esos secretos, rótalos después de actualizar. La migración no puede volver a hacer privado un valor que ya se copió.
Los endpoints de login y de refresco también recibieron límites propios por IP de 10 peticiones por minuto. Los eventos de creación y restauración de copias de seguridad se sumaron al log de auditoría.
Para despliegues en los que la API está detrás de un proxy, FORWARDED_ALLOW_IPS permite que uvicorn confíe en las cabeceras de IP de cliente de ese proxy. Ponlo con la dirección o la red del proxy, no con un valor amplio en un puerto de API accesible públicamente.
S3 y R2 pueden crear un bucket que falta
La ruta del bucket ausente comprobaba un campo de respuesta que el ClientError de boto no rellenaba. En MinIO, S3 y servicios compatibles, un primer arranque podía fallar en lugar de crear el bucket configurado.
La comprobación se corrigió y quedó cubierta con tests de integración contra una instancia real de SeaweedFS.
Arreglos en los trabajos de impresora
Un envío a un proveedor sin soporte de subida podía crear un trabajo en UPLOADING antes de devolver un 409. La validación de capacidades ahora se ejecuta antes de crear la fila del trabajo.
El diálogo de envío dejó de conservar una revisión que se había tirado a la basura en otro sitio y pasó a recurrir a la revisión recomendada del modelo. Los fallos de envío mixtos también nombran la impresora y el motivo en lugar de informar solo de un recuento.
El bucle de limpieza empezó a ejecutarse una vez al arrancar antes de dormirse. Los despliegues de vida corta ya no tenían que estar levantados una hora para que se tuvieran en cuenta la basura caducada y las entregas de notificación antiguas.
Menos trabajo repetido en la base de datos
- Las nuevas versiones de archivo usaban
SELECT MAX()en lugar de cargar todos los archivos del modelo. - La búsqueda del trabajo de impresión activo se cacheaba por impresora hasta que cambiaba el archivo seguido o terminaba el trabajo.
- Las comprobaciones de permisos de colección y de detalle de modelo se agruparon para la página.
- Los recuentos de uso de perfiles de filamento y de impresora seleccionaban solo las columnas que necesitaban.
CI añadió bandit, pip-audit y un trabajo de actualización que reproducía las migraciones desde la base de datos más antigua soportada. También se comprobó que las etiquetas de versión siguieran versionado semántico estricto.
Actualizar desde la v0.8.2 o anterior incluye además dos correcciones importantes. La v0.8.3 evitó que la limpieza borrase los documentos de colección guardados en local y añadió esos archivos a las copias de seguridad. La v0.8.4 rechazó el secreto JWT por defecto, forzó claves ajenas reparadas en SQLite, cerró una ventana de DNS rebinding, coordinó la restauración con los trabajos en segundo plano y congeló el coste de impresión en el momento de terminar.
Lee el changelog completo antes de actualizar un servidor antiguo.