From 09ae100b27f6e3039212f3896ae1db745f7f3f22 Mon Sep 17 00:00:00 2001 From: fvanroie <15969459+fvanroie@users.noreply.github.com> Date: Tue, 16 Nov 2021 00:02:24 +0100 Subject: [PATCH] Harmonize hostname, username and password length --- include/hasp_conf.h | 11 ++ src/hasp/hasp_attribute.cpp | 9 +- src/mqtt/hasp_mqtt_paho_async.cpp | 6 +- src/mqtt/hasp_mqtt_pubsubclient.cpp | 18 +-- src/sys/net/hasp_wifi.cpp | 20 +-- src/sys/svc/hasp_console.cpp | 2 +- src/sys/svc/hasp_http.cpp | 219 +--------------------------- src/sys/svc/hasp_http.h | 4 +- src/sys/svc/hasp_http_async.cpp | 12 +- src/sys/svc/hasp_telnet.cpp | 6 +- 10 files changed, 54 insertions(+), 253 deletions(-) diff --git a/include/hasp_conf.h b/include/hasp_conf.h index fb724e93..b739f249 100644 --- a/include/hasp_conf.h +++ b/include/hasp_conf.h @@ -11,6 +11,17 @@ // language specific defines #include "lang/lang.h" +// Lengths +#ifndef MAX_PASSWORD_LENGTH +#define MAX_PASSWORD_LENGTH 64 +#endif +#ifndef MAX_USERNAME_LENGTH +#define MAX_USERNAME_LENGTH 32 +#endif +#ifndef MAX_HOSTNAME_LENGTH +#define MAX_HOSTNAME_LENGTH 128 +#endif + // TFT defines #ifndef TFT_BACKLIGHT_ON #define TFT_BACKLIGHT_ON HIGH diff --git a/src/hasp/hasp_attribute.cpp b/src/hasp/hasp_attribute.cpp index 4c1cf5ee..617f7e68 100644 --- a/src/hasp/hasp_attribute.cpp +++ b/src/hasp/hasp_attribute.cpp @@ -2063,19 +2063,22 @@ static hasp_attribute_type_t attribute_common_bool(lv_obj_t* obj, uint16_t attr_ void attr_out_str(lv_obj_t* obj, const char* attribute, const char* data) { + const size_t size = 64 + strlen(data); uint8_t pageid; uint8_t objid; if(!attribute || !hasp_find_id_from_obj(obj, &pageid, &objid)) return; + char payload[size]; - StaticJsonDocument<32> doc; // Total (recommended) size +{ + StaticJsonDocument doc; // Total (recommended) size if(data) doc[attribute].set(data); else doc[attribute].set(nullptr); - - char payload[MQTT_MAX_PACKET_SIZE]; serializeJson(doc, payload, MQTT_MAX_PACKET_SIZE); +} + object_dispatch_state(pageid, objid, payload); } diff --git a/src/mqtt/hasp_mqtt_paho_async.cpp b/src/mqtt/hasp_mqtt_paho_async.cpp index d226b980..ccee112a 100644 --- a/src/mqtt/hasp_mqtt_paho_async.cpp +++ b/src/mqtt/hasp_mqtt_paho_async.cpp @@ -66,9 +66,9 @@ bool mqttHAautodiscover = true; std::recursive_mutex dispatch_mtx; std::recursive_mutex publish_mtx; -char mqttServer[16] = MQTT_HOST; -char mqttUser[23] = MQTT_USER; -char mqttPassword[32] = MQTT_PASSW; +char mqttServer[MAX_HOSTNAME_LENGTH] = MQTT_HOST; +char mqttUser[MAX_USERNAME_LENGTH] = MQTT_USER; +char mqttPassword[MAX_PASSWORD_LENGTH] = MQTT_PASSW; // char mqttNodeName[16] = MQTT_NODENAME; char mqttGroupName[16] = MQTT_GROUPNAME; uint16_t mqttPort = MQTT_PORT; diff --git a/src/mqtt/hasp_mqtt_pubsubclient.cpp b/src/mqtt/hasp_mqtt_pubsubclient.cpp index 1b7ffefb..f3e922fb 100644 --- a/src/mqtt/hasp_mqtt_pubsubclient.cpp +++ b/src/mqtt/hasp_mqtt_pubsubclient.cpp @@ -54,9 +54,9 @@ uint32_t mqttPublishCount; uint32_t mqttReceiveCount; uint32_t mqttFailedCount; -char mqttServer[16] = MQTT_HOST; -char mqttUser[23] = MQTT_USER; -char mqttPassword[32] = MQTT_PASSW; +char mqttServer[MAX_USERNAME_LENGTH] = MQTT_HOST; +char mqttUsername[MAX_USERNAME_LENGTH] = MQTT_USER; +char mqttPassword[MAX_PASSWORD_LENGTH] = MQTT_PASSW; // char mqttNodeName[16] = MQTT_NODENAME; char mqttGroupName[16] = MQTT_GROUPNAME; uint16_t mqttPort = MQTT_PORT; @@ -241,7 +241,7 @@ void mqttStart() haspProgressMsg(F(D_MQTT_CONNECTING)); haspProgressVal(mqttReconnectCount * 5); - if(!mqttClient.connect(mqttClientId, mqttUser, mqttPassword, buffer, 0, true, lastWillPayload, true)) { + if(!mqttClient.connect(mqttClientId, mqttUsername, mqttPassword, buffer, 0, true, lastWillPayload, true)) { // Retry until we give up and restart after connectTimeout seconds mqttReconnectCount++; @@ -383,7 +383,7 @@ void mqtt_get_info(JsonDocument& doc) JsonObject info = doc.createNestedObject(F("MQTT")); info[F(D_INFO_SERVER)] = mqttServer; - info[F(D_INFO_USERNAME)] = mqttUser; + info[F(D_INFO_USERNAME)] = mqttUsername; mac = halGetMacAddress(3, ""); mac.toLowerCase(); @@ -437,8 +437,8 @@ bool mqttGetConfig(const JsonObject& settings) if(mqttPort != settings[FPSTR(FP_CONFIG_PORT)].as()) changed = true; settings[FPSTR(FP_CONFIG_PORT)] = mqttPort; - if(strcmp(mqttUser, settings[FPSTR(FP_CONFIG_USER)].as().c_str()) != 0) changed = true; - settings[FPSTR(FP_CONFIG_USER)] = mqttUser; + if(strcmp(mqttUsername, settings[FPSTR(FP_CONFIG_USER)].as().c_str()) != 0) changed = true; + settings[FPSTR(FP_CONFIG_USER)] = mqttUsername; if(strcmp(mqttPassword, settings[FPSTR(FP_CONFIG_PASS)].as().c_str()) != 0) changed = true; settings[FPSTR(FP_CONFIG_PASS)] = mqttPassword; @@ -493,8 +493,8 @@ bool mqttSetConfig(const JsonObject& settings) } if(!settings[FPSTR(FP_CONFIG_USER)].isNull()) { - changed |= strcmp(mqttUser, settings[FPSTR(FP_CONFIG_USER)]) != 0; - strncpy(mqttUser, settings[FPSTR(FP_CONFIG_USER)], sizeof(mqttUser)); + changed |= strcmp(mqttUsername, settings[FPSTR(FP_CONFIG_USER)]) != 0; + strncpy(mqttUsername, settings[FPSTR(FP_CONFIG_USER)], sizeof(mqttUsername)); } if(!settings[FPSTR(FP_CONFIG_PASS)].isNull() && diff --git a/src/sys/net/hasp_wifi.cpp b/src/sys/net/hasp_wifi.cpp index fb97399f..9323bf7a 100644 --- a/src/sys/net/hasp_wifi.cpp +++ b/src/sys/net/hasp_wifi.cpp @@ -38,20 +38,16 @@ SPIClass espSPI(ESPSPI_MOSI, ESPSPI_MISO, ESPSPI_SCLK); // SPI port where esp is #endif //#include "DNSserver.h" -// #ifdef USE_CONFIG_OVERRIDE -// #include "user_config_override.h" -// #endif +#ifndef WIFI_SSID +#define WIFI_SSID "" +#endif -#ifdef WIFI_SSID -char wifiSsid[32] = WIFI_SSID; -#else -char wifiSsid[32] = ""; -#endif -#ifdef WIFI_PASSW -char wifiPassword[64] = WIFI_PASSW; -#else -char wifiPassword[64] = ""; +#ifndef WIFI_PASSW +#define WIFI_PASSW "" #endif + +char wifiSsid[MAX_USERNAME_LENGTH] = WIFI_SSID; +char wifiPassword[MAX_PASSWORD_LENGTH] = WIFI_PASSW; char wifiIpAddress[16] = ""; uint16_t wifiReconnectCounter = 0; bool wifiOnline = false; diff --git a/src/sys/svc/hasp_console.cpp b/src/sys/svc/hasp_console.cpp index f2574e93..149da33b 100644 --- a/src/sys/svc/hasp_console.cpp +++ b/src/sys/svc/hasp_console.cpp @@ -64,7 +64,7 @@ static void console_process_line(const char* input) 0x01); // Hide characters bufferedSerialClient->print(buffer); #if HASP_USE_HTTP > 0 || HASP_USE_HTTP_ASYNC > 0 - consoleLoginState = strcmp(input, http_config.user) == 0 ? CONSOLE_USERNAME_OK : CONSOLE_USERNAME_NOK; + consoleLoginState = strcmp(input, http_config.username) == 0 ? CONSOLE_USERNAME_OK : CONSOLE_USERNAME_NOK; break; } case CONSOLE_USERNAME_OK: diff --git a/src/sys/svc/hasp_http.cpp b/src/sys/svc/hasp_http.cpp index f91986d8..103057c8 100644 --- a/src/sys/svc/hasp_http.cpp +++ b/src/sys/svc/hasp_http.cpp @@ -87,10 +87,6 @@ IPAddress apIP(192, 168, 4, 1); #endif // DNS_PORT #endif // HASP_USE_CAPTIVE_PORTAL -// bool httpEnable = true; -// uint16_t httpPort = 80; -// char httpUser[32] = ""; -// char httpPassword[32] = ""; hasp_http_config_t http_config; #define HTTP_PAGE_SIZE (6 * 256) @@ -207,7 +203,7 @@ static void webHandleHaspConfig(); bool httpIsAuthenticated() { if(http_config.password[0] != '\0') { // Request HTTP auth if httpPassword is set - if(!webServer.authenticate(http_config.user, http_config.password)) { + if(!webServer.authenticate(http_config.username, http_config.password)) { webServer.requestAuthentication(); return false; } @@ -568,211 +564,6 @@ static void webHandleInfoJson() } //////////////////////////////////////////////////////////////////////////////////////////////////// -/* -static void webHandleInfo() -{ // http://plate01/ - if(!httpIsAuthenticated(F("info"))) return; - - { // Send Content - char size_buf[32]; - String httpMessage((char*)0); - httpMessage.reserve(HTTP_PAGE_SIZE); - httpMessage += F("

"); - httpMessage += haspDevice.get_hostname(); - httpMessage += F("


"); - - // HASP Stats - httpMessage += F("HASP Version: "); - httpMessage += haspDevice.get_version(); - httpMessage += F("
Build DateTime: "); - httpMessage += __DATE__; - httpMessage += F(" "); - httpMessage += __TIME__; - httpMessage += F(" UTC
Uptime: "); // Github buildservers are in UTC - - unsigned long time = millis() / 1000; - uint16_t day = time / 86400; - time = time % 86400; - uint8_t hour = time / 3600; - time = time % 3600; - uint8_t min = time / 60; - time = time % 60; - uint8_t sec = time; - - if(day > 0) { - httpMessage += String(day); - httpMessage += F("d "); - } - if(day > 0 || hour > 0) { - httpMessage += String(hour); - httpMessage += F("h "); - } - if(day > 0 || hour > 0 || min > 0) { - httpMessage += String(min); - httpMessage += F("m "); - } - httpMessage += String(sec); - httpMessage += F("s"); - - httpMessage += F("
Free Memory: "); - Parser::format_bytes(haspDevice.get_free_heap(), size_buf, sizeof(size_buf)); - httpMessage += size_buf; - httpMessage += F("
Memory Fragmentation: "); - httpMessage += String(haspDevice.get_heap_fragmentation()); - -#if ARDUINO_ARCH_ESP32 - if(psramFound()) { - httpMessage += F("
Free PSRam: "); - Parser::format_bytes(ESP.getFreePsram(), size_buf, sizeof(size_buf)); - httpMessage += size_buf; - httpMessage += F("
PSRam Size: "); - Parser::format_bytes(ESP.getPsramSize(), size_buf, sizeof(size_buf)); - httpMessage += size_buf; - } -#endif - - // LVGL Stats - lv_mem_monitor_t mem_mon; - lv_mem_monitor(&mem_mon); - httpMessage += F("

LVGL Memory: "); - Parser::format_bytes(mem_mon.total_size, size_buf, sizeof(size_buf)); - httpMessage += size_buf; - httpMessage += F("
LVGL Free: "); - Parser::format_bytes(mem_mon.free_size, size_buf, sizeof(size_buf)); - httpMessage += size_buf; - httpMessage += F("
LVGL Fragmentation: "); - httpMessage += mem_mon.frag_pct; - - // httpMessage += F("
LCD Model: ")) + String(LV_HASP_HOR_RES_MAX) + " x " + - // String(LV_HASP_VER_RES_MAX); httpMessage += F("
LCD Version: ")) + - // String(lcdVersion); - httpMessage += F("

LCD Active Page: "); - httpMessage += String(haspPages.get()); - - // Wifi Stats -#if HASP_USE_WIFI > 0 - httpMessage += F("

SSID: "); - httpMessage += String(WiFi.SSID()); - httpMessage += F("
Signal Strength: "); - - int8_t rssi = WiFi.RSSI(); - httpMessage += String(rssi); - httpMessage += F("dBm ("); - - if(rssi >= -50) { - httpMessage += F("Excellent)"); - } else if(rssi >= -60) { - httpMessage += F("Good)"); - } else if(rssi >= -70) { - httpMessage += F("Fair)"); - } else if(rssi >= -80) { - httpMessage += F("Weak)"); - } else { - httpMessage += F("Very Bad)"); - } -#if defined(STM32F4xx) - byte mac[6]; - WiFi.macAddress(mac); - char macAddress[16]; - snprintf_P(macAddress, sizeof(macAddress), PSTR("%02x%02x%02x"), mac[0], mac[1], mac[2], mac[3], mac[4], - mac[5]); - httpMessage += F("
IP Address: "); - httpMessage += String(WiFi.localIP()); - httpMessage += F("
Gateway: "); - httpMessage += String(WiFi.gatewayIP()); - httpMessage += F("
MAC Address: "); - httpMessage += String(macAddress); -#else - httpMessage += F("
IP Address: "); - httpMessage += String(WiFi.localIP().toString()); - httpMessage += F("
Gateway: "); - httpMessage += String(WiFi.gatewayIP().toString()); - httpMessage += F("
DNS Server: "); - httpMessage += String(WiFi.dnsIP().toString()); - httpMessage += F("
MAC Address: "); - httpMessage += String(WiFi.macAddress()); -#endif -#endif -#if HASP_USE_ETHERNET > 0 -#if defined(ARDUINO_ARCH_ESP32) - httpMessage += F("

Ethernet: "); - httpMessage += String(ETH.linkSpeed()); - httpMessage += F(" Mbps"); - if(ETH.fullDuplex()) { - httpMessage += F(" " D_INFO_FULL_DUPLEX); - } - httpMessage += F("
IP Address: "); - httpMessage += String(ETH.localIP().toString()); - httpMessage += F("
Gateway: "); - httpMessage += String(ETH.gatewayIP().toString()); - httpMessage += F("
DNS Server: "); - httpMessage += String(ETH.dnsIP().toString()); - httpMessage += F("
MAC Address: "); - httpMessage += String(ETH.macAddress()); -#endif -#endif - -// Mqtt Stats -#if HASP_USE_MQTT > 0 - httpMessage += F("

MQTT Status: "); - if(mqttIsConnected()) { // Check MQTT connection - httpMessage += F("Connected"); - } else { - httpMessage += F("Disconnected, return code: "); - // +String(mqttClient.returnCode()); - } - httpMessage += F("
MQTT ClientID: "); - - { - char mqttClientId[64]; - String mac = halGetMacAddress(3, ""); - mac.toLowerCase(); - snprintf_P(mqttClientId, sizeof(mqttClientId), PSTR("%s-%s"), haspDevice.get_hostname(), mac.c_str()); - httpMessage += mqttClientId; - } - -#endif // MQTT - - // ESP Stats - httpMessage += F("

MCU Model: "); - httpMessage += haspDevice.get_chip_model(); - httpMessage += F("
CPU Frequency: "); - httpMessage += String(haspDevice.get_cpu_frequency()); - httpMessage += F("MHz"); - -#if defined(ARDUINO_ARCH_ESP32) || defined(ARDUINO_ARCH_ESP8266) - httpMessage += F("
Flash Chip Size: "); - Parser::format_bytes(ESP.getFlashChipSize(), size_buf, sizeof(size_buf)); - httpMessage += size_buf; - - httpMessage += F("
Program Size Used: "); - Parser::format_bytes(ESP.getSketchSize(), size_buf, sizeof(size_buf)); - httpMessage += size_buf; - - httpMessage += F("
Program Size Free: "); - Parser::format_bytes(ESP.getFreeSketchSpace(), size_buf, sizeof(size_buf)); - httpMessage += size_buf; -#endif - - //#if defined(ARDUINO_ARCH_ESP32) - // httpMessage += F("
ESP SDK version: "); - // httpMessage += String(ESP.getSdkVersion()); - //#else - httpMessage += F("
Core version: "); - httpMessage += haspDevice.get_core_version(); - //#endif - httpMessage += F("
Last Reset: "); - // httpMessage += halGetResetInfo(); - - httpMessage += FPSTR(MAIN_MENU_BUTTON); - - webSendHeader(haspDevice.get_hostname(), httpMessage.length(), false); - webServer.sendContent(httpMessage); - } - webSendFooter(); -} -*/ - /* String urldecode(String str) { String encodedString = ""; @@ -2563,8 +2354,8 @@ bool httpGetConfig(const JsonObject& settings) if(http_config.port != settings[FPSTR(FP_CONFIG_PORT)].as()) changed = true; settings[FPSTR(FP_CONFIG_PORT)] = http_config.port; - if(strcmp(http_config.user, settings[FPSTR(FP_CONFIG_USER)].as().c_str()) != 0) changed = true; - settings[FPSTR(FP_CONFIG_USER)] = http_config.user; + if(strcmp(http_config.username, settings[FPSTR(FP_CONFIG_USER)].as().c_str()) != 0) changed = true; + settings[FPSTR(FP_CONFIG_USER)] = http_config.username; if(strcmp(http_config.password, settings[FPSTR(FP_CONFIG_PASS)].as().c_str()) != 0) changed = true; settings[FPSTR(FP_CONFIG_PASS)] = http_config.password; @@ -2589,8 +2380,8 @@ bool httpSetConfig(const JsonObject& settings) changed |= configSet(http_config.port, settings[FPSTR(FP_CONFIG_PORT)], F("httpPort")); if(!settings[FPSTR(FP_CONFIG_USER)].isNull()) { - changed |= strcmp(http_config.user, settings[FPSTR(FP_CONFIG_USER)]) != 0; - strncpy(http_config.user, settings[FPSTR(FP_CONFIG_USER)], sizeof(http_config.user)); + changed |= strcmp(http_config.username, settings[FPSTR(FP_CONFIG_USER)]) != 0; + strncpy(http_config.username, settings[FPSTR(FP_CONFIG_USER)], sizeof(http_config.username)); } if(!settings[FPSTR(FP_CONFIG_PASS)].isNull()) { diff --git a/src/sys/svc/hasp_http.h b/src/sys/svc/hasp_http.h index 8dac4195..dc22955c 100644 --- a/src/sys/svc/hasp_http.h +++ b/src/sys/svc/hasp_http.h @@ -11,8 +11,8 @@ struct hasp_http_config_t bool enable = true; uint16_t port = 80; - char user[32] = ""; - char password[32] = ""; + char username[MAX_USERNAME_LENGTH] = ""; + char password[MAX_PASSWORD_LENGTH] = ""; }; void httpSetup(); diff --git a/src/sys/svc/hasp_http_async.cpp b/src/sys/svc/hasp_http_async.cpp index d87919af..225b6217 100644 --- a/src/sys/svc/hasp_http_async.cpp +++ b/src/sys/svc/hasp_http_async.cpp @@ -58,7 +58,7 @@ bool webServerStarted = false; // bool httpEnable = true; // uint16_t httpPort = 80; // char httpUser[32] = ""; -// char httpPassword[32] = ""; +// char httpPassword[MAX_PASSWORD_LENGTH] = ""; hasp_http_config_t http_config; #define HTTP_PAGE_SIZE (6 * 256) @@ -219,7 +219,7 @@ void webHandleHaspConfig(AsyncWebServerRequest* request); bool httpIsAuthenticated() { if(http_config.password[0] != '\0') { // Request HTTP auth if httpPassword is set - // if(!webServer.authenticate(http_config.user, http_config.password)) { + // if(!webServer.authenticate(http_config.username, http_config.password)) { // return false; // } } @@ -2347,8 +2347,8 @@ bool httpGetConfig(const JsonObject& settings) if(http_config.port != settings[FPSTR(FP_CONFIG_PORT)].as()) changed = true; settings[FPSTR(FP_CONFIG_PORT)] = http_config.port; - if(strcmp(http_config.user, settings[FPSTR(FP_CONFIG_USER)].as().c_str()) != 0) changed = true; - settings[FPSTR(FP_CONFIG_USER)] = http_config.user; + if(strcmp(http_config.username, settings[FPSTR(FP_CONFIG_USER)].as().c_str()) != 0) changed = true; + settings[FPSTR(FP_CONFIG_USER)] = http_config.username; if(strcmp(http_config.password, settings[FPSTR(FP_CONFIG_PASS)].as().c_str()) != 0) changed = true; settings[FPSTR(FP_CONFIG_PASS)] = http_config.password; @@ -2373,8 +2373,8 @@ bool httpSetConfig(const JsonObject& settings) changed |= configSet(http_config.port, settings[FPSTR(FP_CONFIG_PORT)], F("httpPort")); if(!settings[FPSTR(FP_CONFIG_USER)].isNull()) { - changed |= strcmp(http_config.user, settings[FPSTR(FP_CONFIG_USER)]) != 0; - strncpy(http_config.user, settings[FPSTR(FP_CONFIG_USER)], sizeof(http_config.user)); + changed |= strcmp(http_config.username, settings[FPSTR(FP_CONFIG_USER)]) != 0; + strncpy(http_config.username, settings[FPSTR(FP_CONFIG_USER)], sizeof(http_config.username)); } if(!settings[FPSTR(FP_CONFIG_PASS)].isNull()) { diff --git a/src/sys/svc/hasp_telnet.cpp b/src/sys/svc/hasp_telnet.cpp index 6328a824..b3bf5e65 100644 --- a/src/sys/svc/hasp_telnet.cpp +++ b/src/sys/svc/hasp_telnet.cpp @@ -103,7 +103,7 @@ void telnetAcceptClient() // telnetClient.print((char)0x1B); #if HASP_USE_HTTP > 0 || HASP_USE_HTTP_ASYNC > 0 - if(strlen(http_config.user) != 0 || strlen(http_config.password) != 0) { + if(strlen(http_config.username) != 0 || strlen(http_config.password) != 0) { telnetClient.println(F("\r\n" D_USERNAME " ")); telnetLoginState = TELNET_UNAUTHENTICATED; } else @@ -123,7 +123,7 @@ static inline void telnetProcessLine() case TELNET_UNAUTHENTICATED: { telnetClient.printf(PSTR(D_PASSWORD" %c%c%c"), 0xFF, 0xFB, 0x01); // Hide characters #if HASP_USE_HTTP > 0 || HASP_USE_HTTP_ASYNC > 0 - telnetLoginState = strcmp(telnetInputBuffer, http_config.user) == 0 ? TELNET_USERNAME_OK : TELNET_USERNAME_NOK; + telnetLoginState = strcmp(telnetInputBuffer, http_config.username) == 0 ? TELNET_USERNAME_OK : TELNET_USERNAME_NOK; break; } case TELNET_USERNAME_OK: @@ -209,7 +209,7 @@ static void telnetProcessLine(const char* input) 0x01); // Hide characters telnetClient.print(buffer); #if HASP_USE_HTTP > 0 || HASP_USE_HTTP_ASYNC > 0 - telnetLoginState = strcmp(input, http_config.user) == 0 ? TELNET_USERNAME_OK : TELNET_USERNAME_NOK; + telnetLoginState = strcmp(input, http_config.username) == 0 ? TELNET_USERNAME_OK : TELNET_USERNAME_NOK; break; } case TELNET_USERNAME_OK: