/* 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");
/**********************************************/
// 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");
}