Volver a la wiki

Desencriptación de NotificationChannel.config (decrypt_channel_config)

Descripción

decrypt_channel_config(config: dict) → dict es el par simétrico de encrypt_channel_config. Se invoca justo antes de que el dispatcher envíe una notificación (webhook, Slack, Teams, email) para recuperar los secretos en plaintext necesarios para autenticación y comunicación.

Ubicación: monitoring/services/notification_service.py (línea ~158).

Qué desencripta

Espejo exacto de la encriptación:

Componentes

_dec_value(v: str) → str

Función auxiliar que:

  1. Si v es vacío, None, o no es string → devuelve sin cambios
  2. Si no es un token Fernet (detectado por not CredentialManager.is_encrypted(v)) → devuelve sin cambios (plaintext o valor no-secreto)
  3. Si es token Fernet → llama a CredentialManager.safe_decrypt(v, "channel_config")
    • En caso de fallo (clave perdida, token corrupto) → devuelve "" (empty fallback)

Fuente: core.security.credential_manager.CredentialManager

Punto de invocación

Se llama en todos los dispatchers:

Tolerancia a fallos

Seguridad

Este patrón reduce la ventana de exposición:

  1. En la BD: token Fernet (no plaintext)
  2. En memoria: desencriptado solo cuando se necesita
  3. En logs de la llamada HTTP al webhook: la URL está en plaintext momentáneamente, pero esto es necesario (el webhook debe recibirla)
  4. Rotation: la operación inversa de reencrypt_credentials puede cambiar la clave (Fernet KDF) sin romper los dispatches

Testing

Cubierto por test_dispatch_roundtrip_decrypts en TestChannelConfigEncryption:

Véase también

Subir