189 lines
9.3 KiB
C++
189 lines
9.3 KiB
C++
/* 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 "<html><h3>Error 500</h3><p>Internal server error</p></html>"
|
|
|
|
String compiler(String input)
|
|
{
|
|
input.replace("<!--Compiler1-->", "<h1>Compilation done</h1>");
|
|
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("<!--Compiler1-->", &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", "<html><meta charset='UTF-8'><head><link href='bootstrap.min.css' rel='stylesheet' media='screen'><link rel='stylesheet' href='sweetalert2.min.css'>"
|
|
// "<script src='jquery-1.9.1.min.js'><script src='bootstrap.min.js'></script></script><script src='sweetalert2.min.js'></script></head><body><script>"
|
|
// "Swal.fire({title: 'Error!',"
|
|
// " text: 'Error 500 Internal Server Error',"
|
|
// with " icon: 'error',"
|
|
// " confirmButtonText: 'Cerrar'}).then((result) => {"
|
|
// "if (result.isConfirmed){"
|
|
// "window.location = '/';"
|
|
// "};"
|
|
// "})"
|
|
// "</script><body></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", "<html><meta charset='UTF-8'><head><link href='bootstrap.min.css' rel='stylesheet' media='screen'><link rel='stylesheet' href='sweetalert2.min.css'>"
|
|
// "<script src='jquery-1.9.1.min.js'><script src='bootstrap.min.js'></script></script><script src='sweetalert2.min.js'></script></head><body><script>"
|
|
// "Swal.fire({title: 'Error!',"
|
|
// " text: 'Error 500 Internal Server Error',"
|
|
// " icon: 'error',"
|
|
// " confirmButtonText: 'Cerrar'}).then((result) => {"
|
|
// "if (result.isConfirmed){"
|
|
// "window.location = '/';"
|
|
// "};"
|
|
// "})"
|
|
// "</script><body></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");
|
|
}
|