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: