diff --git a/include/Server.hpp b/include/Server.hpp new file mode 100644 index 0000000..b0a93e5 --- /dev/null +++ b/include/Server.hpp @@ -0,0 +1,188 @@ +/* Instancia de AsyncWebServer */ +#include "HttpHandler.cpp" +#include "logger.cpp" + +AsyncWebServer server(80); +StringDictionary dataset = StringDictionary(); +CompilerDictionary compilers = CompilerDictionary(); +PageProcessor mainPageCgi = PageProcessor("/index.html", &dataset); +PageProcessor settingsPageCgi = PageProcessor("/config.html", &dataset); + +#define MIME_HTML "text/html" +#define MIME_JSON "application/json" + +#define ERROR_500 "

Error 500

Internal server error

" + +String compiler(String input) +{ + input.replace("", "

Compilation done

"); + return input; +} + +void RefreshDataset() +{ + dataset.Set("&DeviceName&", id); + dataset.Set("&APSSID&", nameap); + dataset.Set("&APPASS&", passwordap); +} + +void InitServer() +{ + // Servir las dependencias estáticas + server.serveStatic("/bootstrap.min.css", SPIFFS, "/bootstrap.min.css").setDefaultFile("bootstrap.min.css"); + server.serveStatic("/style.css", SPIFFS, "/style.css").setDefaultFile("style.css"); + // server.serveStatic("/bootstrap-responsive.min.css", SPIFFS, "/bootstrap-responsive.min.css").setDefaultFile("bootstrap-responsive.min.css"); + // server.serveStatic("/jquery.easy-pie-chart.css", SPIFFS, "/jquery.easy-pie-chart.css").setDefaultFile("jquery.easy-pie-chart.css"); + // server.serveStatic("/bootstrap.min.js", SPIFFS, "/bootstrap.min.js").setDefaultFile("bootstrap.min.js"); + // server.serveStatic("/jquery-1.9.1.min.js", SPIFFS, "/jquery-1.9.1.min.js").setDefaultFile("jquery-1.9.1.min.js"); + // server.serveStatic("/jquery.easy-pie-chart.js", SPIFFS, "/jquery.easy-pie-chart.js").setDefaultFile("jquery.easy-pie-chart.js"); + // server.serveStatic("/modernizr.min.js", SPIFFS, "/modernizr.min.js").setDefaultFile("modernizr.min.js"); + // server.serveStatic("/sweetalert2.min.css", SPIFFS, "/sweetalert2.min.css").setDefaultFile("sweetalert2.min.css"); + // server.serveStatic("/sweetalert2.min.js", SPIFFS, "/sweetalert2.min.js").setDefaultFile("sweetalert2.min.js"); + // server.serveStatic("/scripts.js", SPIFFS, "/scripts.js").setDefaultFile("scripts.js"); + // server.serveStatic("/glyphicons-halflings.png", SPIFFS, "/glyphicons-halflings.png").setDefaultFile("glyphicons-halflings.png"); + // server.serveStatic("/glyphicons-halflings-white.png", SPIFFS, "/glyphicons-halflings-white.png").setDefaultFile("glyphicons-halflings-white.png"); + // server.serveStatic("/logo.png", SPIFFS, "/logo.png").setDefaultFile("logo.png"); + + /**********************************************/ + // Inicializar los compiladores de texto para las páginas + mainPageCgi.Compilers = &compilers; + settingsPageCgi.Compilers = &compilers; + compilers.Set("", &compiler); + + // Handler (server, "/", HTTP_GET); + server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) + { + RefreshDataset(); + request->send(200, MIME_HTML, mainPageCgi.Execute()); }); + + server.on("/config", HTTP_GET, [](AsyncWebServerRequest *request) + { + RefreshDataset(); + request->send(200, MIME_HTML, settingsPageCgi.Execute()); }); + + /**********************************************/ + // server.on("/configwifi", HTTP_GET, [](AsyncWebServerRequest *request){ + // // Config + // File file = SPIFFS.open(F("/configwifi.html"), "r"); + // if (file){ + // file.setTimeout(100); + // String s = file.readString(); + // file.close(); + // // Atualiza el contenido al cargar + // s.replace(F("#id#"), id); + // s.replace(F("#ssid#"), ssid); + // //sección ap + // s.replace(F("#nameap#"), String(nameap)); + // // Send data + // request->send(200, "text/html", s); + // }else{ + // request->send(500, "text/html", "" + // ""); + // log(F("\nError: Config - ERROR leyendo el archivo")); + // } + // }); + ///**********************************************/ + // server.on("/configmqtt", HTTP_GET, [](AsyncWebServerRequest *request){ + // // Config + // File file = SPIFFS.open(F("/configmqtt.html"), "r"); + // if (file){ + // file.setTimeout(100); + // String s = file.readString(); + // file.close(); + // // Atualiza el contenido al cargar + // s.replace(F("#idMqtt#"), idMqtt); + // s.replace(F("#mqttuser#"), mqttuser); + // s.replace(F("#mqttserver#"), mqttserver); + // // Send data + // request->send(200, "text/html", s); + // }else{ + // request->send(500, "text/html", "" + // ""); + // log(F("\nError: Config - ERROR leyendo el archivo")); + // } + // }); + /**********************************************/ + + server.on("/confwifiSave", HTTP_POST, [](AsyncWebServerRequest *request) + { + String response; + StaticJsonDocument<300> doc; + // Graba Configuración desde Config + // Verifica número de campos recebidos + // ESP32 envia 5 campos + if (request->params() == 5){ + String s; + // ID + if(request->hasArg("id")) + s = request->arg("id"); + s.trim(); + if (s == ""){ + s = deviceID(); + } + strlcpy(id, s.c_str(), sizeof(id)); + // SSID + if(request->hasArg("ssid")) + s = request->arg("ssid"); + s.trim(); + if (s == ""){ + s = ssid; + } + strlcpy(ssid, s.c_str(), sizeof(ssid)); + // PW SSID + if(request->hasArg("pw")) + s = request->arg("pw"); + s.trim(); + if (s != ""){ + // Actualiza contraseña + strlcpy(pw, s.c_str(), sizeof(pw)); + } + // Nombre AP + if(request->hasArg("nameap")) + s = request->arg("nameap"); + s.trim(); + if (s != ""){ + // Atualiza ssid ap + strlcpy(nameap, s.c_str(), sizeof(nameap)); + } + // Contraseña AP + if(request->hasArg("passwordap")) + s = request->arg("passwordap"); + s.trim(); + if (s != ""){ + // Atualiza contraseña ap + strlcpy(passwordap, s.c_str(), sizeof(passwordap)); + } + // Graba configuracion + if (Config::Save()){ + request->send(200, "text/html", "Configuración WIFI guardada, se requiere reiniciar el Equipo"); + }else{ + request->send(500, "text/html", "ERROR salvando Configuración"); + Logger::Log(Logger::ERROR, "/configSave: ERROR salvando Configuración"); + } + }else{ + request->send(500, "text/html", "Error en parámetros WiFi"); + } }); + server.onNotFound([](AsyncWebServerRequest *request) + { request->send(404, "text/html", "404 Not Found"); }); + server.begin(); + Logger::Log("Servidor HTTP Iniciado"); +}