CreaRack-SL

Aviso contextual del permiso Local Network Access del Local Agent

Descripción General

Desde Edge 143 / Chromium reciente, cuando CreaRack (pública, en crearack.com) se conecta por primera vez con el Local Agent instalado en localhost:5050 del usuario, el navegador pide permiso de seguridad: “acceder a otras aplicaciones y servicios en este dispositivo”.

Este permiso es legítimo y necesario: CreaRack necesita hablar con el Agente para gestionar los dispositivos de red del cliente. Pero sin contexto, el prompt del navegador asusta.

El Problema

  1. El prompt del navegador no se puede eliminar ni disfrazar — es una decisión de seguridad del motor (Edge, Chromium), que clasifica por IP de destino (127.0.0.1), no por nombre de host. Incluso un alias a localhost saltaría igual.
  2. Sin contexto es confuso: el usuario ve un aviso técnico sobre “otras aplicaciones” sin saber que se refiere a su propio Agente.
  3. Impacta la confianza: algunos usuarios niegan el permiso por desconocimiento, rompiendo la integración.

La Solución: agent_lna_notice.js

Nuevo módulo JavaScript que contextualiza el prompt del navegador antes de que aparezca:

  • Muestra un aviso propio (vía Permissions API) explicando qué es la conexión y que es segura.
  • Solo en páginas que usan el Agent (dashboard, editor, terminal, monitoreo, etc.) — espeja _AGENT_PATHS de dashboard_widgets.js.
  • Una vez por sesión: si el usuario lo cierra, no insiste hasta que reabra el navegador. El permiso concedido lo silencia para siempre.
  • No-op en navegadores sin LNA: Firefox, Edge < 143, etc. no tienen soporte para este permiso, así que el módulo detecta y sale sin hacer nada.
  • No toca el sondeo del Agent: el indicador de salud (health_badge) sigue dependiendo solo del Agente mismo, no degrada.

Componentes Técnicos

Módulo: static/js/modules/agent_lna_notice.js

Función pública: maybeShowNotice()
Detecta vía navigator.permissions.query({ name: 'local-network-access' }) si el estado es prompt. Si es así, renderiza el aviso.

Métodos internos:

  • showNotice() — crea el elemento DOM del aviso (fijo abajo-derecha, max 380px).
  • dismiss() — cierra el aviso y marca sessionStorage['lna_notice_dismissed'] = '1'.

Estilos: .lna-notice, .lna-notice-title, .lna-notice-body en static/css/components.css.
Integración: <script src="...agent_lna_notice.js" defer> en templates/base.html.

Características

AspectoDetalle
PatrónMicrosoft Permissions API — recomendado por Edge para LNA
ScopeSolo rutas que contactan Agente (/, /editor, /terminal, /monitoring, /wireless, /maps, /blueprints)
PersistenciaSesión (sessionStorage), no cookie
AnimaciónSlide-in 0.3s, fade-out 0.4s
ResponsiveAcomoda en móviles (left/right 12px en <480px)
Accesibilidadrole="status", botón “Entendido” con title

Impacto del Usuario

  • Primera vez: ve el aviso explicativo antes del prompt nativo. Entiende que es su Agente, pulsa “Permitir”.
  • Ya concedido: nada cambia, el Agente funciona como siempre.
  • Navegador sin LNA: sin aviso, sin prompt — transparente.

Referencias Técnicas

  • Microsoft Docs: https://learn.microsoft.com/deployedge/ms-edge-local-network-access
  • Archivo de referencia: Documentation/backend/LOCAL_AGENT.md (sección “Seguridad”)
  • CSP Middleware: core/middleware/csp.py (definición de _AGENT_PREFIXES, _AGENT_EXACT para sondeo)
  • Dashboard Widgets: static/js/dashboard_widgets.js (definición de _AGENT_PATHS espejada aquí)

Véase también

  • [[entity—core—module—agent-lna-notice]]
  • [[crearack—terminal—local-agent]]
  • [[concept—saas—security]]
  • [[feature—core—dashboard-widgets]]
  • [[entity—core—middleware—csp]]