Rutas HTTP#
La administración web registra las siguientes rutas
(components/webconfig/web_server.c). Todo manejador que sirva datos de configuración o de tráfico requiere
autenticación HTTP Basic: el que solo lee llama a web_check_auth(), que
admite las dos cuentas configuradas, y el que escribe llama a
web_check_auth_admin(), que admite únicamente al administrador y responde
403 Forbidden a una sesión de solo lectura. Tres rutas no lo hacen,
y ninguna expone nada: GET /style.css es una hoja de estilos estática que no
lleva datos de configuración ni de tráfico, y el navegador la pide mientras
dibuja el propio desafío de login; GET /logo.png es la imagen de marca
embebida en el firmware, igualmente libre de datos de la estación; GET
/logout responde a toda petición con el 401 que hace al navegador descartar
sus credenciales guardadas, así que no hay nada que una comprobación de
autenticación pueda proteger.
Las dos cuentas se describen en Cuentas y roles, en Administración web. En la
tabla siguiente, toda ruta POST requiere la cuenta de administrador, igual
que GET /download y las acciones sobre archivos de la página de
almacenamiento. Las tres excepciones son /logs/start, /logs/stop y
/logs/read: son rutas POST que una sesión de solo lectura sí puede usar,
porque lo que conmutan es un espejo de la salida de consola de la propia
estación y nada de la estación cambia con ello.
Método |
Ruta |
Propósito |
|---|---|---|
GET |
|
raíz / landing de login |
GET |
|
descartar auth Basic |
GET |
|
panel en vivo |
GET/POST |
|
identidad de la propia estación: indicativo, lat/lon/alt |
GET/POST |
|
ajustes del IGate |
GET/POST |
|
ajustes de la interconexión BrandMeister |
GET/POST |
|
ajustes del digipeater |
GET/POST |
|
ajustes del tracker |
GET/POST |
|
ajustes del informe meteorológico |
GET |
|
valores WX de sensor por canal en vivo (JSON); cada canal distinto se lee una sola vez por request, apunten las filas que apunten |
GET/POST |
|
ajustes de telemetría + selectores de sensor por canal |
GET |
|
valores de telemetría por canal en vivo (JSON); cada canal distinto se lee una sola vez por request, apunten las filas que apunten |
GET/POST |
|
conmutador de habilitación del receptor GNSS y vista en vivo |
GET |
|
todos los valores que informa el receptor GNSS (JSON) |
GET |
|
latitud/longitud/altitud/velocidad/rumbo como números simples (JSON), consultado por la casilla Usar GPS de cada página |
GET/POST |
|
interruptor del bot de Telegram, credenciales y diagnóstico en vivo de la conexión |
GET |
|
estado del bot, su causa y sus contadores (JSON), consultado cada 2 s |
GET/POST |
|
cuenta Winlink, la política de pase de mensajes del servicio y la terminal de sesión |
POST |
|
ejecuta una acción de sesión: acceder, salir, una orden, un paso de
redacción, una acción sobre un mensaje listado ( |
GET |
|
estado de la sesión, tiempo restante, órdenes en espera, tamaño del buzón y último fallo (JSON), consultado cada 3 s |
GET |
|
las respuestas que envió el servicio, de la más antigua a la más reciente (JSON) |
GET |
|
visor del registro de consola; mostrarla no toca la copia: el script de
la página envía |
POST |
|
activa la copia de la consola (JSON |
POST |
|
desactiva la copia de la consola y libera su anillo (JSON) |
POST |
|
líneas de consola capturadas desde |
GET/POST |
|
boletines APRS BLN1..BLN5 |
GET/POST |
|
Objetos / Ítems APRS |
GET/POST |
|
config del motor de mensajería (RF/INET, reintento, GPIO de alarma) |
GET/POST |
|
respondedor de consultas APRS ( |
GET/POST |
|
interfaz de bandeja/redacción estilo chat |
GET |
|
fragmento de lista de mensajes (JSON) |
GET/POST |
|
módem AFSK de audio (FX.25, modulación, retención PTT, loop test) |
POST |
|
ejecutar el loop test (resultado JSON) |
POST |
|
medir el nivel de recepción en la banda de tonos y de banda ancha con un veredicto de nivel, la polarización de entrada y el margen del conversor e informar las estadísticas de recepción, sin transmitir (resultado JSON) |
POST |
|
transmitir la entrada de los demoduladores AFSK durante |
POST |
|
transmitir una ráfaga de prueba acotada para ajustar el nivel de transmisión (resultado JSON) |
GET/POST |
|
modo Wi-Fi, AP, 5 ranuras STA, potencia TX |
POST |
|
resultados del escaneo de AP (JSON) |
GET/POST |
|
login, frec. CPU, hosts/resincronización NTP, selección de zona horaria |
POST |
|
reset de fábrica |
GET |
|
navegador de archivos |
GET |
|
descargar de LittleFS |
POST |
|
borrar un archivo |
POST |
|
subida multipart |
POST |
|
reformatear LittleFS |
GET |
|
versión firmware/IDF, partición, formulario de OTA |
POST |
|
subida multipart de firmware → grabar ranura OTA inactiva → reiniciar |
GET |
|
referencia/selector de símbolos APRS |
GET |
|
una fila por estación oída (JSON); un feed para clientes externos, no lo dibuja ninguna página de administración |
GET |
|
delta del registro de tráfico (JSON) |
GET |
|
tira compacta de info en vivo (fragmento HTML) |
GET |
|
fragmento de stats de barra lateral |
GET |
|
heap libre y mínimo libre como objeto JSON de dos campos |
GET |
|
hoja de estilos compartida |
GET |
|
logo de marca de la barra superior (PNG embebido) |
Política de bloqueo de inicio de sesión#
Las peticiones sin cabecera Authorization, o con una que no sea
Basic, reciben el desafío 401 sin contarse como fallo de login — es la
mitad sin credenciales del handshake de Basic Auth que todo navegador realiza
por sí solo. Solo cuenta una petición que presentó credenciales y fue
rechazada. Tras 5 rechazos así desde el mismo origen IPv4, las peticiones
siguientes reciben 429 Too Many Requests (con Retry-After) durante una
ventana que empieza en 5 s y se duplica con cada rechazo mientras sigue
bloqueado, con tope de 300 s; una ventana que expira sin login exitoso se
rearma un fallo por debajo del umbral, de modo que credenciales caducadas
repetidas solo disparan el bloqueo base de 5 s cada vez en lugar de escalar
hasta el tope. Véase Administración web para más detalles.