Route HTTP#
L’amministrazione web registra le seguenti route
(components/webconfig/web_server.c). Ogni gestore che serve dati di configurazione o di traffico richiede
autenticazione HTTP Basic: quello che si limita a leggere chiama
web_check_auth(), che ammette entrambi gli account configurati, mentre
quello che scrive chiama web_check_auth_admin(), che ammette il solo
amministratore e risponde 403 Forbidden a una sessione di sola lettura. Tre route non lo fanno, e nessuna delle tre espone
alcunché: GET /style.css è un foglio di stile statico che non porta dati di
configurazione o di traffico, e il browser lo richiede mentre disegna la stessa
richiesta di login; GET /logo.png è l’immagine di marca incorporata nel
firmware, altrettanto priva di dati della stazione; GET /logout risponde a
ogni richiesta con il 401 che fa scartare al browser le credenziali
memorizzate, quindi non c’è nulla che un controllo di autenticazione possa
proteggere.
I due account sono descritti in Account e ruoli, in Amministrazione web. Nella
tabella seguente ogni route POST richiede l’account amministratore, così
come GET /download e le azioni sui file della pagina di archiviazione. Le
tre eccezioni sono /logs/start, /logs/stop e /logs/read: sono route
POST che una sessione di sola lettura può usare, perché ciò che commutano è
uno specchio dell’output di console della stazione stessa e nulla della
stazione cambia con esso.
Metodo |
Route |
Scopo |
|---|---|---|
GET |
|
radice / landing di login |
GET |
|
scarta l’auth Basic |
GET |
|
dashboard in tempo reale |
GET/POST |
|
identità della propria stazione: indicativo, lat/lon/alt |
GET/POST |
|
impostazioni dell’IGate |
GET/POST |
|
impostazioni dell’interconnessione BrandMeister |
GET/POST |
|
impostazioni del digipeater |
GET/POST |
|
impostazioni del tracker |
GET/POST |
|
impostazioni del report meteo |
GET |
|
valori WX di sensore per canale in tempo reale (JSON); ogni canale distinto viene letto una sola volta per richiesta, comunque siano mappate le righe |
GET/POST |
|
impostazioni di telemetria + selettori di sensore per canale |
GET |
|
valori di telemetria per canale in tempo reale (JSON); ogni canale distinto viene letto una sola volta per richiesta, comunque siano mappate le righe |
GET/POST |
|
interruttore di abilitazione del ricevitore GNSS e vista in tempo reale |
GET |
|
tutti i valori riportati dal ricevitore GNSS (JSON) |
GET |
|
latitudine/longitudine/altitudine/velocità/rotta come numeri semplici (JSON), interrogato dalla casella Usa GPS di ogni pagina |
GET/POST |
|
interruttore del bot Telegram, credenziali e diagnosi live della connessione |
GET |
|
stato del bot, la sua causa e i suoi contatori (JSON), interrogato ogni 2 s |
GET/POST |
|
account Winlink, la politica di inoltro dei messaggi del servizio e il terminale di sessione |
POST |
|
esegue un’azione di sessione: accedere, uscire, un comando, un passo di
composizione, un’azione su un messaggio elencato ( |
GET |
|
stato della sessione, tempo rimasto, comandi in attesa, dimensione della casella e ultimo errore (JSON), interrogato ogni 3 s |
GET |
|
le risposte inviate dal servizio, dalla più vecchia (JSON) |
GET |
|
visore del registro di console; mostrarla non tocca la copia: lo script
della pagina invia |
POST |
|
attiva la copia della console (JSON |
POST |
|
ferma la copia della console e rilascia il suo anello (JSON) |
POST |
|
righe di console catturate da |
GET/POST |
|
bollettini APRS BLN1..BLN5 |
GET/POST |
|
Oggetti / Item APRS |
GET/POST |
|
config del motore di messaggistica (RF/INET, ritentativo, GPIO di allarme) |
GET/POST |
|
risponditore di query APRS ( |
GET/POST |
|
interfaccia casella/composizione stile chat |
GET |
|
frammento di lista messaggi (JSON) |
GET/POST |
|
modem AFSK audio (FX.25, modulazione, ritenzione PTT, loop test) |
POST |
|
esegui il loop test (risultato JSON) |
POST |
|
misura il livello di ricezione nella banda dei toni e a banda larga con un verdetto di livello, la polarizzazione di ingresso e il margine del convertitore e riporta le statistiche di ricezione, senza trasmettere (risultato JSON) |
POST |
|
trasmettere l’ingresso dei demodulatori AFSK per |
POST |
|
trasmette una raffica di prova limitata per regolare il livello di trasmissione (risultato JSON) |
GET/POST |
|
modalità Wi-Fi, AP, 5 slot STA, potenza TX |
POST |
|
risultati della scansione AP (JSON) |
GET/POST |
|
login, freq. CPU, host/risincronizzazione NTP, selezione fuso orario |
POST |
|
reset di fabbrica |
GET |
|
navigatore di file |
GET |
|
scarica da LittleFS |
POST |
|
elimina un file |
POST |
|
upload multipart |
POST |
|
riformatta LittleFS |
GET |
|
versione firmware/IDF, partizione, form OTA |
POST |
|
upload multipart firmware → scrivi slot OTA inattivo → riavvia |
GET |
|
riferimento/selettore di simboli APRS |
GET |
|
una riga per stazione ascoltata (JSON); un feed per client esterni, non disegnato da nessuna pagina di amministrazione |
GET |
|
delta del log di traffico (JSON) |
GET |
|
striscia compatta di info in tempo reale (frammento HTML) |
GET |
|
frammento di stats della barra laterale |
GET |
|
heap libero e minimo libero come oggetto JSON a due campi |
GET |
|
foglio di stile condiviso |
GET |
|
logo di marca della barra superiore (PNG incorporato) |
Politica di blocco del login#
Le richieste senza intestazione Authorization, o con una che non è
Basic, ricevono la sfida 401 senza essere contate come fallimento di
login — è la metà senza credenziali dell’handshake Basic Auth che ogni
browser esegue da sé. Conta solo una richiesta che ha presentato credenziali
ed è stata rifiutata. Dopo 5 rifiuti così dalla stessa origine IPv4, le
richieste successive ricevono 429 Too Many Requests (con
Retry-After) per una finestra che parte da 5 s e raddoppia a ogni rifiuto
mentre il blocco è attivo, con tetto a 300 s; una finestra che scade senza
login riuscito viene riarmata un fallimento sotto la soglia, così credenziali
scadute ripetute fanno scattare solo il blocco base di 5 s ogni volta invece
di risalire fino al tetto. Vedi Amministrazione web per i dettagli.