feat: version 2.7.0 -- menu Contraseñas (repositorio de credenciales privado)

Nuevo modulo backend/src/modules/vault/: contraseña y notas cifradas
en el servidor (AES-256-GCM, mismo mecanismo ya usado para la clave
SMTP). Acceso al menu protegido con un PIN de 4 digitos independiente
del login (token corto propio, header X-Vault-Token, nunca el JWT de
sesion). El PIN no participa del cifrado -- cambiarlo o restablecerlo
por correo nunca afecta las contraseñas ya guardadas. Privado por
usuario, sin excepcion. Cada accion sensible (crear/editar/eliminar/
revelar/desbloquear) queda en audit_log. Compartir con otro usuario
queda para una proxima version.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Milton Gonzalez
2026-10-01 12:12:54 -05:00
parent f607455668
commit 0be0712ff0
20 changed files with 879 additions and 10 deletions
+54
View File
@@ -185,6 +185,33 @@ export const messages = {
nav_recurring_tasks: 'Tareas recurrentes',
nav_notes: 'Notas',
nav_passwords: 'Contraseñas',
vault_pin_label: 'PIN (4 números)',
vault_pin_confirm_label: 'Confirmar PIN',
vault_pin_current_label: 'PIN actual',
vault_pin_invalid: 'El PIN debe ser de 4 números',
vault_pin_mismatch: 'Los PIN no coinciden',
vault_create_pin_title: 'Crear PIN de acceso',
vault_create_pin_hint: 'Este PIN protege el acceso a tus contraseñas guardadas. Vas a necesitarlo cada vez que entres a esta sección.',
vault_create_pin_submit: 'Crear PIN y entrar',
vault_enter_pin_title: 'Ingresa tu PIN',
vault_unlock: 'Desbloquear',
vault_forgot_pin: '¿Olvidaste tu PIN?',
vault_forgot_pin_sent: 'Te enviamos un correo para restablecer tu PIN. Tus contraseñas guardadas no se ven afectadas.',
vault_change_pin: 'Cambiar PIN',
vault_reset_pin_title: 'Restablecer PIN',
vault_reset_pin_submit: 'Guardar PIN nuevo',
vault_reset_pin_success: 'Tu PIN fue actualizado. Tus contraseñas guardadas siguen intactas.',
vault_new_entry: 'Nueva credencial',
vault_field_title: 'Nombre',
vault_field_url: 'Enlace',
vault_field_username: 'Usuario',
vault_field_password: 'Contraseña',
vault_field_notes: 'Notas',
vault_reveal: 'Revelar',
vault_copy: 'Copiar',
vault_copied: 'Copiado al portapapeles',
vault_generate: 'Generar',
notes_title: 'Notas',
notes_placeholder: 'Escribe un apunte rápido...',
notes_add: 'Agregar',
@@ -484,6 +511,33 @@ export const messages = {
nav_recurring_tasks: 'Recurring tasks',
nav_notes: 'Notes',
nav_passwords: 'Passwords',
vault_pin_label: 'PIN (4 digits)',
vault_pin_confirm_label: 'Confirm PIN',
vault_pin_current_label: 'Current PIN',
vault_pin_invalid: 'The PIN must be 4 digits',
vault_pin_mismatch: 'The PINs don\'t match',
vault_create_pin_title: 'Create access PIN',
vault_create_pin_hint: 'This PIN protects access to your saved passwords. You\'ll need it every time you enter this section.',
vault_create_pin_submit: 'Create PIN and enter',
vault_enter_pin_title: 'Enter your PIN',
vault_unlock: 'Unlock',
vault_forgot_pin: 'Forgot your PIN?',
vault_forgot_pin_sent: 'We sent you an email to reset your PIN. Your saved passwords are not affected.',
vault_change_pin: 'Change PIN',
vault_reset_pin_title: 'Reset PIN',
vault_reset_pin_submit: 'Save new PIN',
vault_reset_pin_success: 'Your PIN was updated. Your saved passwords are still intact.',
vault_new_entry: 'New credential',
vault_field_title: 'Name',
vault_field_url: 'Link',
vault_field_username: 'Username',
vault_field_password: 'Password',
vault_field_notes: 'Notes',
vault_reveal: 'Reveal',
vault_copy: 'Copy',
vault_copied: 'Copied to clipboard',
vault_generate: 'Generate',
notes_title: 'Notes',
notes_placeholder: 'Write a quick note...',
notes_add: 'Add',