@ -8,6 +8,23 @@ WebServerManager::WebServerManager() {
@@ -8,6 +8,23 @@ WebServerManager::WebServerManager() {
server = new AsyncWebServer ( 80 ) ;
}
void WebServerManager : : logRequest ( AsyncWebServerRequest * request , const String & routeTag ) {
String method = " OTHER " ;
if ( request - > method ( ) = = HTTP_GET ) method = " GET " ;
else if ( request - > method ( ) = = HTTP_POST ) method = " POST " ;
else if ( request - > method ( ) = = HTTP_PUT ) method = " PUT " ;
else if ( request - > method ( ) = = HTTP_DELETE ) method = " DELETE " ;
else if ( request - > method ( ) = = HTTP_OPTIONS ) method = " OPTIONS " ;
else if ( request - > method ( ) = = HTTP_PATCH ) method = " PATCH " ;
String remoteIp = " unknown " ;
if ( request - > client ( ) ) {
remoteIp = request - > client ( ) - > remoteIP ( ) . toString ( ) ;
}
logMessage ( LOG_INFO , " HTTP " + method + " " + request - > url ( ) + " depuis " + remoteIp + " ( " + routeTag + " ) " ) ;
}
String WebServerManager : : getSessionIdFromRequest ( AsyncWebServerRequest * request ) {
if ( request - > hasHeader ( " Cookie " ) ) {
String cookie = request - > header ( " Cookie " ) ;
@ -54,16 +71,25 @@ void WebServerManager::sendJsonSuccess(AsyncWebServerRequest* request, const Str
@@ -54,16 +71,25 @@ void WebServerManager::sendJsonSuccess(AsyncWebServerRequest* request, const Str
void WebServerManager : : setupRoutes ( ) {
// Route de login
server - > on ( " /login " , HTTP_POST , [ this ] ( AsyncWebServerRequest * request ) {
logRequest ( request , " login " ) ;
this - > handleLogin ( request ) ;
} ) ;
// Endpoint de diagnostic réseau (sans authentification)
server - > on ( " /api/health " , HTTP_GET , [ this ] ( AsyncWebServerRequest * request ) {
logRequest ( request , " health " ) ;
this - > handleHealth ( request ) ;
} ) ;
// Route de logout
server - > on ( " /logout " , HTTP_GET , [ this ] ( AsyncWebServerRequest * request ) {
logRequest ( request , " logout " ) ;
this - > handleLogout ( request ) ;
} ) ;
// API - Configuration
server - > on ( " /api/config " , HTTP_GET , [ this ] ( AsyncWebServerRequest * request ) {
logRequest ( request , " get_config " ) ;
if ( ! isAuthenticated ( request ) ) {
sendJsonError ( request , 401 , " Non authentifié " ) ;
return ;
@ -72,6 +98,7 @@ void WebServerManager::setupRoutes() {
@@ -72,6 +98,7 @@ void WebServerManager::setupRoutes() {
} ) ;
server - > on ( " /api/config " , HTTP_POST , [ this ] ( AsyncWebServerRequest * request ) {
logRequest ( request , " set_config " ) ;
if ( ! isAuthenticated ( request ) ) {
sendJsonError ( request , 401 , " Non authentifié " ) ;
return ;
@ -81,6 +108,7 @@ void WebServerManager::setupRoutes() {
@@ -81,6 +108,7 @@ void WebServerManager::setupRoutes() {
// API - Changement de mot de passe
server - > on ( " /api/password " , HTTP_POST , [ this ] ( AsyncWebServerRequest * request ) {
logRequest ( request , " change_password " ) ;
if ( ! isAuthenticated ( request ) ) {
sendJsonError ( request , 401 , " Non authentifié " ) ;
return ;
@ -90,6 +118,7 @@ void WebServerManager::setupRoutes() {
@@ -90,6 +118,7 @@ void WebServerManager::setupRoutes() {
// API - Statistiques
server - > on ( " /api/stats " , HTTP_GET , [ this ] ( AsyncWebServerRequest * request ) {
logRequest ( request , " get_stats " ) ;
if ( ! isAuthenticated ( request ) ) {
sendJsonError ( request , 401 , " Non authentifié " ) ;
return ;
@ -100,6 +129,7 @@ void WebServerManager::setupRoutes() {
@@ -100,6 +129,7 @@ void WebServerManager::setupRoutes() {
// OTA Update
server - > on ( " /api/update " , HTTP_POST ,
[ this ] ( AsyncWebServerRequest * request ) {
logRequest ( request , " ota_update " ) ;
if ( ! isAuthenticated ( request ) ) {
sendJsonError ( request , 401 , " Non authentifié " ) ;
return ;
@ -120,7 +150,8 @@ void WebServerManager::setupRoutes() {
@@ -120,7 +150,8 @@ void WebServerManager::setupRoutes() {
) ;
// 404
server - > onNotFound ( [ ] ( AsyncWebServerRequest * request ) {
server - > onNotFound ( [ this ] ( AsyncWebServerRequest * request ) {
logRequest ( request , " not_found " ) ;
request - > send ( 404 , " text/plain " , " Page non trouvée " ) ;
} ) ;
@ -128,6 +159,19 @@ void WebServerManager::setupRoutes() {
@@ -128,6 +159,19 @@ void WebServerManager::setupRoutes() {
server - > serveStatic ( " / " , LittleFS , " / " ) . setDefaultFile ( " login.html " ) ;
}
void WebServerManager : : handleHealth ( AsyncWebServerRequest * request ) {
JsonDocument doc ;
doc [ " ok " ] = true ;
doc [ " ip_sta " ] = WiFi . localIP ( ) . toString ( ) ;
doc [ " ip_ap " ] = WiFi . softAPIP ( ) . toString ( ) ;
doc [ " wifi_status " ] = WiFi . status ( ) ;
doc [ " ssid " ] = WiFi . SSID ( ) ;
String response ;
serializeJson ( doc , response ) ;
request - > send ( 200 , " application/json " , response ) ;
}
void WebServerManager : : handleLogin ( AsyncWebServerRequest * request ) {
if ( ! request - > hasParam ( " username " , true ) | | ! request - > hasParam ( " password " , true ) ) {
sendJsonError ( request , 400 , " Paramètres manquants " ) ;