Volver a la wiki

Modal de Configuración de Dispositivo — credenciales SNMP/SSH y grupos

Descripción

Sesión 115: Nueva interfaz modal compartida para editar configuración de perfiles de dispositivo detectados (DeviceProfile) en las páginas de monitorización. Permite cambiar:

NO edita IP ni nombre — esos valores vienen de Auto-Provision y se modifican allí.

Motivación

Antes, solo los dispositivos racks.Device (manuales en rack editor) podían ser configurados con credenciales. Los dispositivos descubiertos automáticamente (Wireless AP, UPS, Digital Signage, etc., como DeviceProfile) no tenían forma fácil de modificar estas credenciales desde el interfaz de monitorización. Esto fuerza a los operadores a ir a Auto-Provision cada vez que quieren cambiar una contraseña o agrupar un dispositivo.

Alcance

Disponible en:

Cada página importa el servicio modal centralizado y añade un botón “Config” en la pestaña o detalle del dispositivo.

Flujo

  1. Usuario clica “Config” en un dispositivo de monitorización (se muestra su hostname/IP).
  2. Modal carga configuración actual con GET /api/network/auto-provision/profiles/{profile_id}/config.
    • Los secrets (claves SNMPv3, password SSH) NO se retornan; solo flags has_snmp_v3_keys e has_stored_ssh.
    • El usuario ve placeholders: “leave blank to keep unchanged”.
  3. Usuario edita formulario: versión SNMP, credenciales, asignación a grupos (checkboxes).
  4. Clica “Save” → PUT /api/network/auto-provision/profiles/{profile_id}/config.
  5. Backend cifra el password SSH con CredentialManager.encrypt_credential() y valida grupos por org (scope).
  6. Modal cierra, lista de dispositivos se recarga.

Seguridad

Cambios principales

Backend

Endpoint POST asignación de tipos (existente):

Nuevos endpoints:

Schemas (network/api/assign.py):

Lógica:

Frontend

Servicio reutilizable (static/js/services/DeviceConfigModal.js):

Integraciones por página:

Fixes simultáneos

  1. Colisión de IDs en Observatory: Los DeviceProfile se renderizaban con id negativo (-profile_id), pero los “manual targets” ya usaban negativos. Fix: desplazar id a PROFILE_ID_OFFSET + profile_id (positivo grande). Frontend decodifica: profile_id = id - PROFILE_ID_OFFSET.

  2. XSS en Wireless/UPS/Digital Signage: Datos inyectados con {{ *_json|safe }} en <script>. Fix: usar json_script (escape seguro) + parsear desde DOM con JSON.parse(document.getElementById(...).textContent).

Pruebas

Añadido tests/api/test_network_profile_config.py (8 test cases):

Interconexiones

Notas de implementación

Véase también

Subir