#include "html.h" #include "html_conf.h" #include "html_confAdd.h" #include "html_confAdv.h" #include "html_confBas.h" #include "html_confDevWiFi.h" #include "html_confMqtt.h" #include "html_confWeb.h" #include "html_confTime.h" #include "html_confLog.h" #include "html_main.h" #include "html_redTemps.h" #include "html_sysinfo.h" #ifdef ENABLE_FEATURE_WEB_CONSOLE_WEBSOCKETS #include "html_console_ws.h" #endif #ifdef ENABLE_FEATURE_WEB_CONSOLE #include "html_console.h" #endif void httpServerHandleMainPage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_main_script); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag_jsinit); httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_main_body); if (httpIsAuthenticatedAdmin()) { httpServer.sendContent_P(html_main_body_adminonly); #ifdef ENABLE_FEATURE_WEB_CONSOLE if (confWeb.wConsole) httpServer.sendContent_P(html_main_body_adminonly_console); #endif #ifdef ENABLE_FEATURE_WEB_CONSOLE_WEBSOCKETS if (confWeb.wsConsole) httpServer.sendContent_P(html_main_body_adminonly_wsconsole); #endif } httpServer.sendContent_P(html_main_body2); httpServerSendHtmlFooterChunked(); } void httpServerHandleRedTempsPage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_redTemps_script); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag_jsinit); httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_redTemps_body); httpServerSendHtmlFooterChunked(); } void httpServerHandleConfPage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag); httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_conf_body); #ifdef ENABLE_FEATURE_WEB_CONSOLE if (confWeb.wConsole) httpServer.sendContent_P(html_conf_body_console); #endif #ifdef ENABLE_FEATURE_WEB_CONSOLE_WEBSOCKETS if (confWeb.wsConsole) httpServer.sendContent_P(html_conf_body_wsconsole); #endif httpServer.sendContent_P(html_conf_body_end); httpServerSendHtmlFooterChunked(); } void httpServerHandleConfWebPage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_confweb_script); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag_jsinit); httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_confweb_body); httpServerSendHtmlFooterChunked(); } void httpServerHandleConfMqttPage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_confmqtt_script); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag_jsinit); httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_confmqtt_body); httpServerSendHtmlFooterChunked(); } void httpServerHandleConfDevWiFiPage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_confDevWiFi_script); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag_jsinit); httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_confDevWiFi_body); httpServerSendHtmlFooterChunked(); } void httpServerHandleConfBasPage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_confbas_script); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag_jsinit); httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_confbas_body); httpServerSendHtmlFooterChunked(); } void httpServerHandleConfAdvPage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_confadv_script); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag_jsinit); httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_confadv_body); httpServerSendHtmlFooterChunked(); } void httpServerHandleConfAddPage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_confadd_script); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag_jsinit); httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_confadd_body); httpServerSendHtmlFooterChunked(); } void httpServerHandleConfTimePage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_conftime_script); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag_jsinit); httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_conftime_body); httpServerSendHtmlFooterChunked(); } void httpServerHandleConfLogPage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_conflog_script); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag_jsinit); httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_conflog_body); httpServerSendHtmlFooterChunked(); } #ifdef ENABLE_FEATURE_WEB_CONSOLE_WEBSOCKETS void httpServerHandleWSConsolePage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag); httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_wsconsole_body); httpServerSendHtmlFooterChunked(); } #endif void httpServerHandleConsolePage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag); httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_console_body); httpServerSendHtmlFooterChunked(); } void httpServerHandleConfSavedPage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag); httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_confsaved_body); httpServerSendHtmlFooterChunked(); } //void httpServerHandleConfSavedRestartPage() { // httpServerSendHtmlHeadChunked(); // httpServer.sendContent_P(html_head_end); // httpServer.sendContent_P(html_bodytag); // httpServerSendHtmlBodyPageheadChunked(); // httpServer.sendContent_P(html_confsavedrestart_body); // httpServerSendHtmlFooterChunked(); //} void httpServerHandleRestartPage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag); configChangedRestartRequired = false; httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_restarting_body); httpServerSendHtmlFooterChunked(); } void httpServerHandleClearconfPage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag); httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_clearconf_body); httpServerSendHtmlFooterChunked(); } void httpServerHandleSysInfoPage() { httpServerSendHtmlHeadChunked(); httpServer.sendContent_P(html_sysinfo_script); httpServer.sendContent_P(html_head_end); httpServer.sendContent_P(html_bodytag_jsinit); httpServerSendHtmlBodyPageheadChunked(); httpServer.sendContent_P(html_sysinfo_body); httpServerSendHtmlFooterChunked(); } void httpServerSendHtmlHeadChunked() { httpServer.setContentLength(CONTENT_LENGTH_UNKNOWN); //Enable Chunked Transfer httpServer.send(200, "text/html", html_head_part1); httpServer.sendContent_P(PGMStr_FIRMWARE_NAME); httpServer.sendContent(" - "); httpServer.sendContent(confDevWiFi.deviceName); httpServer.sendContent_P(html_head_part2); } void httpServerSendHtmlBodyPageheadChunked() { httpServer.sendContent_P(html_body_pagehead_part1); httpServer.sendContent_P(PGMStr_FIRMWARE_NAME); httpServer.sendContent(" - "); httpServer.sendContent(confDevWiFi.deviceName); httpServer.sendContent_P(html_body_pagehead_part2); if (configChangedRestartRequired) httpServer.sendContent_P(html_body_pagehead_confchangednote); } void httpServerSendHtmlFooterChunked() { httpServer.sendContent_P(html_footer1); httpServer.sendContent_P(html_footer_a1); httpServer.sendContent_P(PGMStr_FIRMWARE_URL); httpServer.sendContent_P(html_footer_a2); httpServer.sendContent_P(PGMStr_FIRMWARE_NAME); httpServer.sendContent_P(html_footer_ae); httpServer.sendContent(" "); httpServer.sendContent_P(PGMStr_FIRMWARE_VERSION); #ifdef DEBUGMODE httpServer.sendContent(" DEBUG"); #endif httpServer.sendContent(" by "); httpServer.sendContent_P(html_footer_a1); httpServer.sendContent_P(PGMStr_FIRMWARE_COPYRIGHT_URL); httpServer.sendContent_P(html_footer_a2); httpServer.sendContent_P(PGMStr_FIRMWARE_COPYRIGHT); httpServer.sendContent_P(html_footer_ae); httpServer.sendContent_P(html_footer2); httpServer.sendContent(""); httpServer.client().stop(); } boolean httpIsAuthenticated() { if (WifiInApMode && strlen(confDevWiFi.WiFiAPModePassword) >= 8) return true; if (confWeb.http_user_auth) { boolean useAuth = false; boolean isAuthenticated = false; // user authentication enabled - only allow access without authentication if no admin password is set // or if user1 credentials are empty (access in "user mode") if (strlen(confWeb.http_pass) > 0 || strlen(confWeb.http_pass1) > 0 || strlen(confWeb.http_pass2) > 0) useAuth = true; if (strlen(confWeb.http_pass) == 0) { return true; // no admin password set - in this case authentication is off } if (useAuth) { // allow access if one set of valid credentials are given if ((strlen(confWeb.http_user) > 0 && strlen(confWeb.http_pass) > 0)) { if (httpServer.authenticate(confWeb.http_user, confWeb.http_pass)) isAuthenticated = true; } if ((strlen(confWeb.http_user1) > 0 && strlen(confWeb.http_pass1) > 0)) { if (httpServer.authenticate(confWeb.http_user1, confWeb.http_pass1)) isAuthenticated = true; } if ((strlen(confWeb.http_user2) > 0 && strlen(confWeb.http_pass2) > 0)) { if (httpServer.authenticate(confWeb.http_user2, confWeb.http_pass2)) isAuthenticated = true; } // also allow access if admin credentials are set but user1 password is empty and user-authentication is enabled if (strlen(confWeb.http_pass1) == 0) { isAuthenticated = true; } return isAuthenticated; } // allow access if all credentials are empty else return true; } // user authentication disabled - only allow access without password if no admin password is set else { if (strlen(confWeb.http_pass) > 0) { if (httpServer.authenticate(confWeb.http_user, confWeb.http_pass)) return true; else return false; } else return true; } } boolean httpIsAuthenticatedAdmin() { if (WifiInApMode && strlen(confDevWiFi.WiFiAPModePassword) >= 8) return true; boolean auth = false; if ((strlen(confWeb.http_user) > 0 && strlen(confWeb.http_pass) > 0)) auth = true; if (auth) { if (!httpServer.authenticate(confWeb.http_user, confWeb.http_pass)) return false; else return true; } else return true; } void httpServerHandleNotFound() { httpServer.send(404, "text/plain", "404 NOT FOUND"); } void httpSendUnauthorized() { httpServer.send(401, "text/plain", "UNAUTHORIZED"); } void httpSend200OK() { httpServer.send(200, "text/plain", "OK"); } boolean httpCheckToken() { if (confWeb.http_token[0] != '\0') { // dont accept empty token if (httpServer.hasArg("token")) { char buf[20]; httpServer.arg("token").toCharArray(buf, 20); if (strcmp(buf, confWeb.http_token) == 0) return true; else return false; } else return false; } else return false; } void httpServerInit() { httpServer.on("/style.css", []() { httpServer.sendHeader("cache-control", "max-age=86400", false); httpServer.send_P(200, "text/css", html_stylesheet); }); httpServer.on("/api", []() { if (!httpIsAuthenticated()) return httpServer.requestAuthentication(); else { if (confLog.logWebRequests || httpServer.args() > 0) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /api (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } //sendLog("WEB: /api", LOGLEVEL_INFO); if (httpServer.hasArg("BtnPlus")) { setTempStepUp(); sendLog(F("WEB: BtnPlus"), LOGLEVEL_INFO); } //if if (httpServer.hasArg("BtnMinus")) { setTempStepDown(); sendLog(F("WEB: BtnMinus"), LOGLEVEL_INFO); } //if if (httpServer.hasArg("BtnPset0")) { setPresetTo(0); sendLog(F("WEB: BtnPset0"), LOGLEVEL_INFO); } //if if (httpServer.hasArg("BtnPset1")) { setPresetTo(1); sendLog(F("WEB: BtnPset1"), LOGLEVEL_INFO); } //if if (httpServer.hasArg("BtnPset2")) { setPresetTo(2); sendLog(F("WEB: BtnPset2"), LOGLEVEL_INFO); } //if if (httpServer.hasArg("BtnOn")) { setHeatingmodeTo(1); sendLog(F("WEB: BtnOn"), LOGLEVEL_INFO); } //if if (httpServer.hasArg("BtnOff")) { setHeatingmodeTo(0); sendLog(F("WEB: BtnOff"), LOGLEVEL_INFO); } //if if (httpServer.hasArg("BtnL1Plus")) { setTempLowStepUp(); sendLog(F("WEB: BtnL1Plus"), LOGLEVEL_INFO); } //if if (httpServer.hasArg("BtnL1Minus")) { setTempLowStepDown(); sendLog(F("WEB: BtnL1Minus"), LOGLEVEL_INFO); } //if if (httpServer.hasArg("BtnL2Plus")) { setTempLow2StepUp(); sendLog(F("WEB: BtnL2Plus"), LOGLEVEL_INFO); } //if if (httpServer.hasArg("BtnL2Minus")) { setTempLow2StepDown(); sendLog(F("WEB: BtnL2Minus"), LOGLEVEL_INFO); } //if if (httpServer.hasArg("setTemp")) { sendLog(F("WEB: /api?setTemp"), LOGLEVEL_INFO); char bufVal[20]; httpServer.arg("setTemp").toCharArray(bufVal, 20); float valueFloat = round(atof(bufVal) * 2.0) / 2.0; setTempTo(valueFloat); } if (httpServer.hasArg("setMode")) { sendLog(F("WEB: /api?setMode"), LOGLEVEL_INFO); char bufVal[20]; httpServer.arg("setMode").toCharArray(bufVal, 20); int valueInt = atoi(bufVal); if (valueInt >= 0 && valueInt <= 1) setHeatingmodeTo(valueInt); } if (httpServer.hasArg("setPreset")) { sendLog(F("WEB: /api?setPreset"), LOGLEVEL_INFO); char bufVal[20]; httpServer.arg("setPreset").toCharArray(bufVal, 20); int valueInt = atoi(bufVal); if (valueInt >= 0 && valueInt <= 2) setPresetTo(valueInt); } //char ch_currTemp[6]; //char ch_currSetTemp[6]; //dtostrf(currTemp, 1, 1, ch_currTemp ); //dtostrf(setTemp, 1, 1, ch_currSetTemp ); //build json object of program data StaticJsonDocument<700> json; json["devname"] = confDevWiFi.deviceName; json["ssid"] = WiFi.SSID(); json["WiFiNum"] = persWM.getActiveWiFiNum(); //json["uptime"] = uptimeStr; json["uptime"] = getUptimeStr(); #ifdef ENABLE_FEATURE_NTP_TIME if (confTime.ntpEnable) { char buf[13]; updateTime(); if (lt.tm_year > 70) { strftime(buf, sizeof(buf), "%H:%M", <); json["time"] = buf; strftime(buf, sizeof(buf), "%d.%m.%Y", <); json["date"] = buf; } } #endif json["freeheap"] = ESP.getFreeHeap(); mqtt_updateCurrentStateName(); json["mqttstate"] = mqttCurrentStateName; json["mqtthost"] = confMqtt.mqtt_server; if (mqttReconnects < 1) json["mqttreconn"] = mqttReconnects; else json["mqttreconn"] = mqttReconnects - 1; json["setTemp"] = setTemp; json["currSetTemp"] = currSetTemp; json["temp"] = round1(currTemp); json["hum"] = int(currHum); json["heating"] = turnHeatingOn; json["mode"] = heatingMode; json["modeName"] = currentModeName; json["pset"] = preset; json["psetName"] = currentPresetName; json["psetName0"] = confAdv.psetName0; json["psetName1"] = confAdv.psetName1; json["psetName2"] = confAdv.psetName2; json["tempLow"] = setTempLow; json["tempLow2"] = setTempLow2; json["outTemp"] = round1(outTemp); json["outHum"] = outHum; char jsonchar[500]; serializeJson(json, jsonchar); httpServer.send(200, "application/json", jsonchar); } }); //httpServer.on /api httpServer.on("/confDataWeb", []() { if (!httpIsAuthenticatedAdmin()) httpSendUnauthorized(); else { //Serial.println("httpServer.on /confdata"); //sendLog("WEB: /confDataWeb", LOGLEVEL_INFO); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /confDataWeb (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } StaticJsonDocument<1000> json; json["apiToken"] = confWeb.http_token; json["httpUA"] = confWeb.http_user; //json["httpPA"] = confWeb.http_pass; if (strlen(confWeb.http_pass) > 0) json["httpPA"] = "****"; else json["httpPA"] = ""; if (confWeb.http_user_auth) json["httpAuth"] = 1; else json["httpAuth"] = 0; json["httpU1"] = confWeb.http_user1; //json["httpP1"] = confWeb.http_pass1; if (strlen(confWeb.http_pass1) > 0) json["httpP1"] = "****"; else json["httpP1"] = ""; json["httpU2"] = confWeb.http_user2; //json["httpP2"] = confWeb.http_pass2; if (strlen(confWeb.http_pass2) > 0) json["httpP2"] = "****"; else json["httpP2"] = ""; if (confWeb.wConsole) json["wConsole"] = 1; else json["wConsole"] = 0; if (confWeb.wsConsole) json["wsConsole"] = 1; else json["wsConsole"] = 0; yield(); char jsonchar[1000]; serializeJson(json, jsonchar); httpServer.send(200, "application/json", jsonchar); } }); //httpServer.on /confdweb httpServer.on("/confDataMqtt", []() { if (!httpIsAuthenticatedAdmin()) httpSendUnauthorized(); else { //sendLog("WEB: /confDataMqtt", LOGLEVEL_INFO); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /confDataMqtt (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } StaticJsonDocument<1000> json; if (confMqtt.mqtt_enable) json["mqttEnable"] = 1; else json["mqttEnable"] = 0; json["mqttHost"] = confMqtt.mqtt_server; json["mqttPort"] = confMqtt.mqtt_port; json["mqttUser"] = confMqtt.mqtt_user; //json["mqttPass"] = confMqtt.mqtt_pass; if (strlen(confMqtt.mqtt_pass) > 0) json["mqttPass"] = "****"; else json["mqttPass"] = ""; json["inTop"] = confMqtt.mqtt_topic_in; json["outTop"] = confMqtt.mqtt_topic_out; if (confMqtt.mqtt_outRetain) json["outRet"] = 1; else json["outRet"] = 0; if (confMqtt.mqtt_outRetain_sensors) json["outRetSens"] = 1; else json["outRetSens"] = 0; json["outPubInt"] = confMqtt.mqtt_outPubInterval; json["outPubIntSens"] = confMqtt.mqtt_outPubInterval_sensors; json["willTop"] = confMqtt.mqtt_willTopic; json["willQos"] = confMqtt.mqtt_willQos; if (confMqtt.mqtt_willRetain) json["willRet"] = 1; else json["willRet"] = 0; json["willMsg"] = confMqtt.mqtt_willMsg; json["connMsg"] = confMqtt.mqtt_connMsg; if (confMqtt.mqtt_enable_heartbeat) json["hbEnable"] = 1; else json["hbEnable"] = 0; json["hbReconn"] = confMqtt.mqtt_heartbeat_maxage_reconnect / 60000; json["hbReboot"] = confMqtt.mqtt_heartbeat_maxage_reboot / 60000; yield(); char jsonchar[1000]; serializeJson(json, jsonchar); httpServer.send(200, "application/json", jsonchar); } }); //httpServer.on /confdmqtt httpServer.on("/setConfWeb", []() { if (!httpIsAuthenticatedAdmin()) httpSendUnauthorized(); else { //sendLog("WEB: /setConfWeb", LOGLEVEL_INFO); String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /setConfWeb (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); bool httpPASet, httpP1Set, httpP2Set; httpPASet = false; httpP1Set = false; httpP2Set = false; if (httpServer.hasArg("httpPASet")) httpPASet = true; if (httpServer.hasArg("httpP1Set")) httpP1Set = true; if (httpServer.hasArg("httpP2Set")) httpP2Set = true; for (int i = 0; i < httpServer.args(); i++) { char bufName[20]; char bufValue[101]; httpServer.argName(i).toCharArray(bufName, 20); httpServer.arg(i).toCharArray(bufValue, 101); if (strlen(bufName) > 0) { Serial.print("web update "); Serial.print(bufName); Serial.print(" = "); Serial.println(bufValue); if (strcmp(bufName, "httpUA") == 0 || strcmp(bufName, "httpPA") == 0) { if (httpPASet) setConfig(bufName, bufValue); } else if (strcmp(bufName, "httpU1") == 0 || strcmp(bufName, "httpP1") == 0) { if (httpP1Set) setConfig(bufName, bufValue); } else if (strcmp(bufName, "httpU2") == 0 || strcmp(bufName, "httpP2") == 0) { if (httpP2Set) setConfig(bufName, bufValue); } else if (strcmp(bufName, "httpPASet") != 0 && strcmp(bufName, "httpP1Set") != 0 && strcmp(bufName, "httpP2Set") != 0) setConfig(bufName, bufValue); //else setConfig(bufName, bufValue); } } yield(); saveConfigWeb(); yield(); loadConfigWeb(); httpServerHandleConfSavedPage(); // yield(); // ESP.restart(); } }); //httpServer.on /setConfWeb httpServer.on("/setConfMqtt", []() { if (!httpIsAuthenticatedAdmin()) httpSendUnauthorized(); else { //Serial.println("httpServer.on /setConfMqtt"); //sendLog("WEB: /setConfMqtt", LOGLEVEL_INFO); String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /setConfMqtt (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); bool mqttPassSet; mqttPassSet = false; if (httpServer.hasArg("mqttPassSet")) mqttPassSet = true; for (int i = 0; i < httpServer.args(); i++) { char bufName[20]; char bufValue[101]; httpServer.argName(i).toCharArray(bufName, 20); httpServer.arg(i).toCharArray(bufValue, 101); if (strlen(bufName) > 0) { Serial.print("web update "); Serial.print(bufName); Serial.print(" = "); Serial.println(bufValue); if (strcmp(bufName, "mqttUser") == 0 || strcmp(bufName, "mqttPass") == 0) { if (mqttPassSet) setConfig(bufName, bufValue); } else setConfig(bufName, bufValue); } //saveConfigMqttToFlash = true; // will be saved in next loop() //Serial.println("web triggered saveConfigMqttToFlash"); } yield(); saveConfigMqtt(); yield(); loadConfigMqtt(); //httpServerHandleConfSavedRestartPage(); httpServerHandleConfSavedPage(); //restart(); } }); //httpServer.on /setConfMqtt httpServer.on("/confDataDevWiFi", []() { if (!httpIsAuthenticated()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /confDataDevWiFi", LOGLEVEL_INFO); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /confDataDevWiFi (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } //for (int i = 0; i < httpServer.args(); i++) { // char bufName[20]; // char bufValue[101]; // httpServer.argName(i).toCharArray(bufName, 20); // httpServer.arg(i).toCharArray(bufValue, 101); // // if (strlen(bufName) > 0) { // //Serial.print("web update "); // //Serial.print(bufName); // //Serial.print(" = "); // //Serial.println(bufValue); // setConfig(bufName, bufValue); // } // saveConfigToFlash = true; // will be saved in next loop() // //Serial.println("web triggered saveConfigToFlash"); //} //yield(); //build json object of program data StaticJsonDocument<800> json; json["devName"] = confDevWiFi.deviceName; json["hostName"] = confDevWiFi.hostName; json["SSID1"] = confDevWiFi.WiFiSSID1; //json["WPW1"] = confDevWiFi.WiFiPW1; if (strlen(confDevWiFi.WiFiPW1) > 0) json["WPW1"] = "****"; else json["WPW1"] = ""; json["SSID2"] = confDevWiFi.WiFiSSID2; //json["WPW2"] = confDevWiFi.WiFiPW2; if (strlen(confDevWiFi.WiFiPW2) > 0) json["WPW2"] = "****"; else json["WPW2"] = ""; json["SSIDAP"] = confDevWiFi.WiFiAPModeSSID; json["WPWAP"] = confDevWiFi.WiFiAPModePassword; json["WAPtout"] = confDevWiFi.WiFiAPModeTimeout; json["WConnCheck"] = confDevWiFi.WiFiConnCheckInterval; json["Wretry"] = confDevWiFi.WiFiRetryInterval; json["Wreboot"] = confDevWiFi.WiFiRebootOnNoConnect; yield(); char jsonchar[1000]; serializeJson(json, jsonchar); httpServer.send(200, "application/json", jsonchar); } }); //httpServer.on /confDataDevWiFi httpServer.on("/setConfDevWiFi", []() { if (!httpIsAuthenticatedAdmin()) httpSendUnauthorized(); else { //sendLog("WEB: /setConfDevWiFi", LOGLEVEL_INFO); String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /setConfDevWiFi (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); bool WPW1Set, WPW2Set, WPWAPSet; WPW1Set = false; WPW2Set = false; WPWAPSet = false; if (httpServer.hasArg("WPW1Set")) WPW1Set = true; if (httpServer.hasArg("WPW2Set")) WPW2Set = true; if (httpServer.hasArg("WPWAPSet")) WPWAPSet = true; for (int i = 0; i < httpServer.args(); i++) { char bufName[20]; char bufValue[101]; httpServer.argName(i).toCharArray(bufName, 20); httpServer.arg(i).toCharArray(bufValue, 101); if (strlen(bufName) > 0) { Serial.print("web update "); Serial.print(bufName); Serial.print(" = "); Serial.println(bufValue); if (strcmp(bufName, "SSID1") == 0 || strcmp(bufName, "WPW1") == 0) { if (WPW1Set) setConfig(bufName, bufValue); } else if (strcmp(bufName, "SSID2") == 0 || strcmp(bufName, "WPW2") == 0) { if (WPW2Set) setConfig(bufName, bufValue); } else if (strcmp(bufName, "WPWAP") == 0) { if (WPWAPSet) setConfig(bufName, bufValue); } else setConfig(bufName, bufValue); } } yield(); saveConfigDevWiFi(); yield(); loadConfigDevWiFi(); //httpServerHandleConfSavedRestartPage(); httpServerHandleConfSavedPage(); //restart(); } }); //httpServer.on /setConfDev httpServer.on("/setConfBas", []() { if (!httpIsAuthenticatedAdmin()) httpSendUnauthorized(); else { //sendLog("WEB: /setConfBas", LOGLEVEL_INFO); String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /setConfBas (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); for (int i = 0; i < httpServer.args(); i++) { char bufName[20]; char bufValue[101]; httpServer.argName(i).toCharArray(bufName, 20); httpServer.arg(i).toCharArray(bufValue, 101); if (strlen(bufName) > 0) { Serial.print("web update "); Serial.print(bufName); Serial.print(" = "); Serial.println(bufValue); setConfig(bufName, bufValue); } } yield(); saveConfigBas(); yield(); loadConfigBas(); httpServerHandleConfSavedPage(); } }); //httpServer.on /setConfBas httpServer.on("/setConfAdv", []() { if (!httpIsAuthenticatedAdmin()) httpSendUnauthorized(); else { //sendLog("WEB: /setConfAdv", LOGLEVEL_INFO); String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /setConfAdv (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); for (int i = 0; i < httpServer.args(); i++) { char bufName[20]; char bufValue[101]; httpServer.argName(i).toCharArray(bufName, 20); httpServer.arg(i).toCharArray(bufValue, 101); if (strlen(bufName) > 0) { Serial.print("web update "); Serial.print(bufName); Serial.print(" = "); Serial.println(bufValue); setConfig(bufName, bufValue); } } yield(); saveConfigAdv(); yield(); loadConfigAdv(); httpServerHandleConfSavedPage(); } }); //httpServer.on /setConfAdv httpServer.on("/setConfAdd", []() { if (!httpIsAuthenticatedAdmin()) httpSendUnauthorized(); else { //sendLog("WEB: /setConfAdd", LOGLEVEL_INFO); String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /setConfAdd (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); for (int i = 0; i < httpServer.args(); i++) { char bufName[20]; char bufValue[101]; httpServer.argName(i).toCharArray(bufName, 20); httpServer.arg(i).toCharArray(bufValue, 101); if (strlen(bufName) > 0) { Serial.print("web update "); Serial.print(bufName); Serial.print(" = "); Serial.println(bufValue); setConfig(bufName, bufValue); } } yield(); saveConfigAdd(); yield(); loadConfigAdd(); httpServerHandleConfSavedPage(); } }); //httpServer.on /setConfAdd #ifdef ENABLE_FEATURE_NTP_TIME httpServer.on("/setConfTime", []() { if (!httpIsAuthenticatedAdmin()) httpSendUnauthorized(); else { //sendLog("WEB: /setConfTime", LOGLEVEL_INFO); String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /setConfTime (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); for (int i = 0; i < httpServer.args(); i++) { char bufName[20]; char bufValue[101]; httpServer.argName(i).toCharArray(bufName, 20); httpServer.arg(i).toCharArray(bufValue, 101); if (strlen(bufName) > 0) { Serial.print("web update "); Serial.print(bufName); Serial.print(" = "); Serial.println(bufValue); setConfig(bufName, bufValue); } } yield(); saveConfigTime(); yield(); loadConfigTime(); httpServerHandleConfSavedPage(); } }); //httpServer.on /setConfTime #endif httpServer.on("/setConfLog", []() { if (!httpIsAuthenticatedAdmin()) httpSendUnauthorized(); else { //sendLog("WEB: /setConfLog", LOGLEVEL_INFO); String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /setConfLog (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); for (int i = 0; i < httpServer.args(); i++) { char bufName[20]; char bufValue[101]; httpServer.argName(i).toCharArray(bufName, 20); httpServer.arg(i).toCharArray(bufValue, 101); if (strlen(bufName) > 0) { Serial.print("web update "); Serial.print(bufName); Serial.print(" = "); Serial.println(bufValue); setConfig(bufName, bufValue); } } yield(); saveConfigLog(); yield(); loadConfigLog(); httpServerHandleConfSavedPage(); } }); //httpServer.on /setConfLog httpServer.on("/confDataBas", []() { if (!httpIsAuthenticated()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /confDataBas", LOGLEVEL_INFO); //Serial.println("httpServer.on /confdata2"); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /confDataBas (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } //for (int i = 0; i < httpServer.args(); i++) { // char bufName[20]; // char bufValue[101]; // httpServer.argName(i).toCharArray(bufName, 20); // httpServer.arg(i).toCharArray(bufValue, 101); // // if (strlen(bufName) > 0) { // //Serial.print("web update "); // //Serial.print(bufName); // //Serial.print(" = "); // //Serial.println(bufValue); // setConfig(bufName, bufValue); // } // saveConfig2ToFlash = true; // //Serial.println("web triggered saveConfig2ToFlash"); //} //yield(); //build json object of program data StaticJsonDocument<500> json; if (confBas.autoSaveSetTemp) json["autoSaveTemp"] = 1; else json["autoSaveTemp"] = 0; if (confBas.autoSaveHeatingMode) json["autoSaveMode"] = 1; else json["autoSaveMode"] = 0; if (confBas.saveToMqttRetained) json["saveToMqttRet"] = 1; else json["saveToMqttRet"] = 0; json["tempMin"] = confBas.setTempMin; json["tempMax"] = confBas.setTempMax; json["measInt"] = confBas.measureInterval; json["dispInt"] = confBas.displayInterval; json["dispTout"] = confBas.displayTimeout; if (confBas.PIR_enablesDisplay) json["PIRenDisp"] = 1; else json["PIRenDisp"] = 0; if (confBas.PIR_enablesDisplay_preset0only) json["PIRenDispPs0"] = 1; else json["PIRenDispPs0"] = 0; if (confBas.togglingTempHumAIDisplay) json["togTHdisp"] = 1; else json["togTHdisp"] = 0; yield(); char jsonchar[1000]; serializeJson(json, jsonchar); httpServer.send(200, "application/json", jsonchar); } }); //httpServer.on /confdbas httpServer.on("/confDataAdv", []() { if (!httpIsAuthenticated()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /confDataAdv", LOGLEVEL_INFO); //Serial.println("httpServer.on /confdata2"); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /confDataAdv (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } //for (int i = 0; i < httpServer.args(); i++) { // char bufName[20]; // char bufValue[101]; // httpServer.argName(i).toCharArray(bufName, 20); // httpServer.arg(i).toCharArray(bufValue, 101); // // if (strlen(bufName) > 0) { // //Serial.print("web update "); // //Serial.print(bufName); // //Serial.print(" = "); // //Serial.println(bufValue); // setConfig(bufName, bufValue); // } // saveConfig2ToFlash = true; // //Serial.println("web triggered saveConfig2ToFlash"); //} //yield(); //build json object of program data StaticJsonDocument<600> json; json["minOffTime"] = confAdv.heatingMinOffTime; json["tempDec"] = confAdv.setTempDecreaseVal; json["hyst"] = confAdv.hysteresis; json["tempCorr"] = confAdv.tempCorrVal; json["humCorr"] = confAdv.humCorrVal; json["offMsg"] = confAdv.offMessage; json["modeName0"] = confAdv.modeName0; json["modeName1"] = confAdv.modeName1; json["psetName0"] = confAdv.psetName0; json["psetName1"] = confAdv.psetName1; json["psetName2"] = confAdv.psetName2; json["iTempLab"] = confAdv.iTempLabel; json["oTempLab"] = confAdv.oTempLabel; yield(); char jsonchar[1000]; serializeJson(json, jsonchar); httpServer.send(200, "application/json", jsonchar); } }); //httpServer.on /confdadv httpServer.on("/confDataAdd", []() { if (!httpIsAuthenticated()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /confDataAdd", LOGLEVEL_INFO); //Serial.println("httpServer.on /confdata2"); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /confDataAdd (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } //for (int i = 0; i < httpServer.args(); i++) { // char bufName[20]; // char bufValue[101]; // httpServer.argName(i).toCharArray(bufName, 20); // httpServer.arg(i).toCharArray(bufValue, 101); // // if (strlen(bufName) > 0) { // //Serial.print("web update "); // //Serial.print(bufName); // //Serial.print(" = "); // //Serial.println(bufValue); // setConfig(bufName, bufValue); // } // saveConfig2ToFlash = true; // //Serial.println("web triggered saveConfig2ToFlash"); //} //yield(); //build json object of program data StaticJsonDocument<1000> json; json["outTempTop"] = confAdd.outTemp_topic_in; json["outHumTop"] = confAdd.outHum_topic_in; json["PIRTop"] = confAdd.mqtt_topic_pir; json["PIROnPld"] = confAdd.mqtt_payload_pir_on; json["PIROffPld"] = confAdd.mqtt_payload_pir_off; yield(); char jsonchar[1000]; serializeJson(json, jsonchar); httpServer.send(200, "application/json", jsonchar); } }); //httpServer.on /confdadd httpServer.on("/confDataTime", []() { if (!httpIsAuthenticated()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /confDataTime", LOGLEVEL_INFO); //Serial.println("httpServer.on /confdata2"); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /confDataTime (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } //for (int i = 0; i < httpServer.args(); i++) { // char bufName[20]; // char bufValue[101]; // httpServer.argName(i).toCharArray(bufName, 20); // httpServer.arg(i).toCharArray(bufValue, 101); // // if (strlen(bufName) > 0) { // //Serial.print("web update "); // //Serial.print(bufName); // //Serial.print(" = "); // //Serial.println(bufValue); // setConfig(bufName, bufValue); // } // saveConfig2ToFlash = true; // //Serial.println("web triggered saveConfig2ToFlash"); //} //yield(); //build json object of program data StaticJsonDocument<1000> json; if (confTime.ntpEnable) json["NTPEnable"] = 1; else json["NTPEnable"] = 0; json["NTPServer1"] = confTime.ntpServer1; json["NTPServer2"] = confTime.ntpServer2; json["TZStr"] = confTime.timeZoneStr; json["NTPSyncInt"] = confTime.ntpSyncInterval / 60; yield(); char jsonchar[1000]; serializeJson(json, jsonchar); httpServer.send(200, "application/json", jsonchar); } }); //httpServer.on /confDataTime httpServer.on("/confDataLog", []() { if (!httpIsAuthenticated()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /confDataLog", LOGLEVEL_INFO); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /confDataLog (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } //for (int i = 0; i < httpServer.args(); i++) { // char bufName[20]; // char bufValue[101]; // httpServer.argName(i).toCharArray(bufName, 20); // httpServer.arg(i).toCharArray(bufValue, 101); // // if (strlen(bufName) > 0) { // //Serial.print("web update "); // //Serial.print(bufName); // //Serial.print(" = "); // //Serial.println(bufValue); // setConfig(bufName, bufValue); // } // saveConfig2ToFlash = true; // //Serial.println("web triggered saveConfig2ToFlash"); //} //yield(); //build json object of program data StaticJsonDocument<1000> json; //if(confTime.ntpEnable) json["NTPEnable"] = 1; //else json["NTPEnable"] = 0; json["logLevSer"] = confLog.logLevelSerial; json["logLevWeb"] = confLog.logLevelWeb; json["logLevMqtt"] = confLog.logLevelMqtt; if (confLog.logWebRequests) json["logWebRequests"] = 1; else json["logWebRequests"] = 0; yield(); char jsonchar[1000]; serializeJson(json, jsonchar); httpServer.send(200, "application/json", jsonchar); } }); //httpServer.on /confDataLog //get heap status, analog input value and all GPIO statuses in one json call httpServer.on("/sysinfod", HTTP_GET, []() { if (!httpIsAuthenticated()) return httpServer.requestAuthentication(); else { if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /sysinfod (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } char buf[40]; byte mac[6]; WiFi.macAddress(mac); StaticJsonDocument<1000> json; json["DevName"] = confDevWiFi.deviceName; json["HostName"] = confDevWiFi.hostName; sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", (uint8_t)mac[0], (uint8_t)mac[1], (uint8_t)mac[2], (uint8_t)mac[3], (uint8_t)mac[4], (uint8_t)mac[5]); json["MAC"] = buf; //sprintf(buf, "%s", WiFi.localIP().toString().c_str()); //json["IP"] = buf; //sprintf(buf, "%s", WiFi.gatewayIP().toString().c_str()); //json["Gateway"] = buf; json["IP"] = WiFi.localIP().toString(); json["GW"] = WiFi.gatewayIP().toString(); json["DNS"] = WiFi.dnsIP().toString(); json["SSID"] = WiFi.SSID(); json["WiFiConf"] = persWM.getActiveWiFiNum(); json["UpTime"] = getUptimeStr(); json["HeapFree"] = ESP.getFreeHeap(); json["HeapFragment"] = ESP.getHeapFragmentation(); json["HeapMaxBlock"] = ESP.getMaxFreeBlockSize(); json["ResetReason"] = ESP.getResetReason(); json["CoreVersion"] = ESP.getCoreVersion(); json["SDKVersion"] = ESP.getSdkVersion(); json["CPUfreq"] = ESP.getCpuFreqMHz(); json["SketchSize"] = ESP.getSketchSize(); json["FlashSize"] = ESP.getFlashChipRealSize(); sprintf(buf, "%s", PGMStr_FIRMWARE_NAME); json["FWName"] = buf; sprintf(buf, "%s", PGMStr_FIRMWARE_VERSION); json["FWVer"] = buf; sprintf(buf, "%s", PGMStr_FIRMWARE_COPYRIGHT); json["FWCr"] = buf; sprintf(buf, "%s", compile_date); json["FWBuilt"] = buf; #ifdef DEBUGMODE json["FWDebug"] = "yes"; #else json["FWDebug"] = "no"; #endif #ifdef ENABLE_FEATURE_NTP_TIME if (confTime.ntpEnable) { char buf[13]; updateTime(); if(lt.tm_year > 70) { strftime(buf, sizeof(buf), "%H:%M", <); json["Time"] = buf; strftime(buf, sizeof(buf), "%d.%m.%Y", <); json["Date"] = buf; } } #endif yield(); char jsonchar[1000]; serializeJson(json, jsonchar); httpServer.send(200, "application/json", jsonchar); } }); //httpServer.on /sysinfod httpServer.on("/sysinfo", HTTP_GET, []() { if (!httpIsAuthenticated()) return httpServer.requestAuthentication(); else { if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /sysinfo (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } httpServerHandleSysInfoPage(); } }); /*httpServer.on("/", []() { if ( WifiInApMode ) { httpServer.sendHeader("Location", "/wifi.htm", true); httpServer.send(302); } else { httpServer.sendHeader("Location", "/main", true); httpServer.send(302); } });*/ httpServer.on("/", []() { String addr = httpServer.client().remoteIP().toString(); if (confLog.logWebRequests || httpServer.args() > 0) { char buf[40]; sprintf(buf, "WEB: / (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } if (httpServer.hasArg("restart")) { if (httpIsAuthenticated() || (!httpIsAuthenticated() && httpCheckToken())) { sendLog("WEB: /?restart", LOGLEVEL_INFO); httpServerHandleRestartPage(); restart(); } else httpSendUnauthorized(); } else if (httpServer.hasArg("mqttreconnect")) { if (httpIsAuthenticated() || (!httpIsAuthenticated() && httpCheckToken())) { //Serial.println("web triggered mqttreconnect"); sendLog("WEB: /?mqttreconnect", LOGLEVEL_INFO); mqttReconnect(); httpServer.sendHeader("Location", "/", true); httpServer.send(303); } else httpSendUnauthorized(); } else if (httpServer.hasArg("clearconf")) { if (httpIsAuthenticatedAdmin() || (!httpIsAuthenticatedAdmin() && httpCheckToken())) { sendLog("WEB: /?clearconf", LOGLEVEL_INFO); httpServerHandleClearconfPage(); yield(); delay(5); deleteConfig(); } else httpSendUnauthorized(); } else if (httpServer.hasArg("clearwifi")) { if (httpIsAuthenticatedAdmin() || (!httpIsAuthenticatedAdmin() && httpCheckToken())) { sendLog("WEB: /?clearwifi", LOGLEVEL_INFO); httpServerHandleClearconfPage(); yield(); delay(5); confClearWiFiCredentials(); } else httpSendUnauthorized(); } else if (httpServer.hasArg("clearcreds")) { if (httpIsAuthenticatedAdmin() || (!httpIsAuthenticatedAdmin() && httpCheckToken())) { sendLog("WEB: /?clearcreds", LOGLEVEL_INFO); httpServerHandleClearconfPage(); yield(); delay(5); confClearCredentials(); } else httpSendUnauthorized(); } else if (!httpIsAuthenticated()) return httpServer.requestAuthentication(); else { if (confLog.logWebRequests) sendLog("WEB: /", LOGLEVEL_INFO); httpServerHandleMainPage(); } }); httpServer.on("/conf", []() { if (!httpIsAuthenticatedAdmin()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /conf", LOGLEVEL_INFO); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /conf (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } httpServerHandleConfPage(); } }); httpServer.on("/confweb", []() { if (!httpIsAuthenticatedAdmin()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /confweb", LOGLEVEL_INFO); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /confweb (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } httpServerHandleConfWebPage(); } }); httpServer.on("/confmqtt", []() { if (!httpIsAuthenticatedAdmin()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /confmqtt", LOGLEVEL_INFO); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /confmqtt (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } httpServerHandleConfMqttPage(); } }); httpServer.on("/confdevwifi", []() { if (!httpIsAuthenticatedAdmin()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /confdevwifi", LOGLEVEL_INFO); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /confdevwifi (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } httpServerHandleConfDevWiFiPage(); } }); httpServer.on("/confbas", []() { if (!httpIsAuthenticatedAdmin()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /confbas", LOGLEVEL_INFO); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /confbas (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } httpServerHandleConfBasPage(); } }); httpServer.on("/confadv", []() { if (!httpIsAuthenticatedAdmin()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /confadv", LOGLEVEL_INFO); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /confadv (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } httpServerHandleConfAdvPage(); } }); httpServer.on("/confadd", []() { if (!httpIsAuthenticatedAdmin()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /confadd", LOGLEVEL_INFO); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /confadd (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } httpServerHandleConfAddPage(); } }); httpServer.on("/conftime", []() { if (!httpIsAuthenticatedAdmin()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /conftime", LOGLEVEL_INFO); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /conftime (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } httpServerHandleConfTimePage(); } }); httpServer.on("/conflog", []() { if (!httpIsAuthenticatedAdmin()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /conflog", LOGLEVEL_INFO); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /conflog (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } httpServerHandleConfLogPage(); } }); httpServer.on("/redTemps", []() { if (!httpIsAuthenticatedAdmin()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /redTemps", LOGLEVEL_INFO); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /redTemps (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } httpServerHandleRedTempsPage(); } }); #ifdef ENABLE_FEATURE_WEB_CONSOLE_WEBSOCKETS if (confWeb.wsConsole) { httpServer.on("/wsconsole", []() { if (!httpIsAuthenticatedAdmin()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /wsconsole", LOGLEVEL_INFO); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /wsconsole (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } wsValidSessionId = millis(); char sidbuf[20]; sprintf(sidbuf, "sessionId=%lu|", wsValidSessionId); httpServer.sendHeader("Set-Cookie", sidbuf); httpServerHandleWSConsolePage(); } }); httpServer.on("/wsapp.js", []() { httpServer.sendHeader("cache-control", "max-age=86400", false); httpServer.send_P(200, "text/javascript", js_wsapp); }); } #endif httpServer.onNotFound([]() { String addr = httpServer.client().remoteIP().toString(); if (confLog.logWebRequests) { char buf[40]; sprintf(buf, "WEB: 404 (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } httpServerHandleNotFound(); }); //httpServer.onNotFound #ifdef ENABLE_FEATURE_WEB_CONSOLE if (confWeb.wConsole) { httpServer.on("/console", []() { if (!httpIsAuthenticatedAdmin()) return httpServer.requestAuthentication(); else { //sendLog("WEB: /console", LOGLEVEL_INFO); if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /console (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } httpServerHandleConsolePage(); } }); httpServer.on("/webcsapi", []() { if (!httpIsAuthenticatedAdmin()) return httpServer.requestAuthentication(); else { if (httpServer.hasArg("cmd")) { char buf[101]; httpServer.arg("cmd").toCharArray(buf, 100); strlcpy(cmdPayload, buf, sizeof(cmdPayload)); cmdInQueue = true; evalCmd(); } if (confLog.logWebRequests) { String addr = httpServer.client().remoteIP().toString(); char buf[40]; sprintf(buf, "WEB: /conflog (from %s)", addr.c_str()); sendLog(buf, LOGLEVEL_INFO); } httpServer.send(200, "text/plain", webLogBuffer); } }); httpServer.on("/csapp.js", []() { httpServer.sendHeader("cache-control", "max-age=86400", false); httpServer.send_P(200, "text/javascript", js_csapp); }); } #endif // HTTP Updater at /update #ifdef ENABLE_FEATURE_HTTP_UPDATER httpUpdater.setup(&httpServer, "/update", confWeb.http_user, confWeb.http_pass); #endif httpServer.begin(); }