CreaRack-SL

Servicio decrypt_credential — Descifrado de credenciales

Resumen

Endpoint y servicio de descifrado de credenciales almacenadas. Devuelve en claro los secretos SSH/SNMP/HTTP guardados en StoredCredential, para auto-relleno en formularios de Auto-Provision y Signage.

Endpoint: GET /api/credentials/{credential_id}/decrypt

Módulo: core.credential_api (endpoint routing + guard), core.security.credential_manager.CredentialManager.decrypt_credential() (lógica de descifrado)

Requisitos de seguridad (s104)

A partir de la Auditoría Suprema (s104), el endpoint exige permiso network/edit (operador o admin), ya que devuelve secretos en claro. Un usuario readonly no puede extraer credenciales.

Historial:

  • Pre-s104: Aceptaba cualquier usuario autenticado (fail-open).
  • s104 (2026-06-02): Guard reforzado a has_permission(request.user, "network", "edit").

Flujo

  1. Usuario (operador+) autenticado en request.user.
  2. Verificar has_permission(user, "network", "edit") → 403 si falla.
  3. Obtener StoredCredential por ID y organización del usuario.
  4. Invocar CredentialManager.decrypt_credential(ciphertext) → devuelve dict con {ssh_username, ssh_password, snmp_community, http_username, http_password}.
  5. Response 200 + JSON con los campos descifrados.

Casos de uso

  • Auto-Provision: rellenar credenciales SSH cuando se provision un rack.
  • Signage: rellenar HTTP basic auth en player antes de descargar manifest/video.

Tests

  • tests/api/test_credentials.py::test_decrypt_as_readonly_rejected — 403 para usuario readonly.
  • tests/api/test_credentials.py::test_decrypt_as_operator_allowed — 200 para operador; datos descifrados presentes.

Véase también

  • [[entity—core—service—has-permission]]
  • [[entity—core—model—stored-credential]]
  • [[feature—security—s104-auditoria-suprema-fixes-core]]
  • [[concept—saas—multi-tenancy]]
  • [[concept—security—fail-open]]