From a70df54fb3ada0241df46ea94a86dd651a25a580 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Kr=C3=A4mer?= Date: Thu, 23 Mar 2023 12:09:05 +0100 Subject: [PATCH 1/3] add basic auth filter --- .../jomjol_controlGPIO/server_GPIO.cpp | 4 +- .../jomjol_controlcamera/server_camera.cpp | 12 ++- .../jomjol_fileserver_ota/server_file.cpp | 15 +-- .../jomjol_fileserver_ota/server_ota.cpp | 6 +- code/components/jomjol_mqtt/server_mqtt.cpp | 3 +- code/components/jomjol_wlan/read_wlanini.cpp | 18 +++- code/include/basic_auth.h | 10 ++ code/main/basic_auth.cpp | 101 ++++++++++++++++++ code/main/main.cpp | 3 + code/main/server_main.cpp | 11 +- sd-card/wlan.ini | 4 + 11 files changed, 164 insertions(+), 23 deletions(-) create mode 100644 code/include/basic_auth.h create mode 100644 code/main/basic_auth.cpp diff --git a/code/components/jomjol_controlGPIO/server_GPIO.cpp b/code/components/jomjol_controlGPIO/server_GPIO.cpp index 3d6f86595..401f4f095 100644 --- a/code/components/jomjol_controlGPIO/server_GPIO.cpp +++ b/code/components/jomjol_controlGPIO/server_GPIO.cpp @@ -26,6 +26,8 @@ #endif //ENABLE_MQTT +#include "basic_auth.h" + static const char *TAG = "GPIO"; QueueHandle_t gpio_queue_handle = NULL; @@ -458,7 +460,7 @@ void GpioHandler::registerGpioUri() httpd_uri_t camuri = { }; camuri.method = HTTP_GET; camuri.uri = "/GPIO"; - camuri.handler = callHandleHttpRequest; + camuri.handler = APPLY_BASIC_AUTH_FILTER(callHandleHttpRequest); camuri.user_ctx = (void*)this; httpd_register_uri_handler(_httpServer, &camuri); } diff --git a/code/components/jomjol_controlcamera/server_camera.cpp b/code/components/jomjol_controlcamera/server_camera.cpp index 8656d0777..70a5cce90 100644 --- a/code/components/jomjol_controlcamera/server_camera.cpp +++ b/code/components/jomjol_controlcamera/server_camera.cpp @@ -9,6 +9,8 @@ #include "ClassLogFile.h" #include "esp_log.h" +#include "basic_auth.h" + #include "../../include/defines.h" static const char *TAG = "server_cam"; @@ -264,27 +266,27 @@ void register_server_camera_uri(httpd_handle_t server) camuri.method = HTTP_GET; camuri.uri = "/lighton"; - camuri.handler = handler_lightOn; + camuri.handler = APPLY_BASIC_AUTH_FILTER(handler_lightOn); camuri.user_ctx = (void*) "Light On"; httpd_register_uri_handler(server, &camuri); camuri.uri = "/lightoff"; - camuri.handler = handler_lightOff; + camuri.handler = APPLY_BASIC_AUTH_FILTER(handler_lightOff); camuri.user_ctx = (void*) "Light Off"; httpd_register_uri_handler(server, &camuri); camuri.uri = "/capture"; - camuri.handler = handler_capture; + camuri.handler = APPLY_BASIC_AUTH_FILTER(handler_capture); camuri.user_ctx = NULL; httpd_register_uri_handler(server, &camuri); camuri.uri = "/capture_with_flashlight"; - camuri.handler = handler_capture_with_light; + camuri.handler = APPLY_BASIC_AUTH_FILTER(handler_capture_with_light); camuri.user_ctx = NULL; httpd_register_uri_handler(server, &camuri); camuri.uri = "/save"; - camuri.handler = handler_capture_save_to_file; + camuri.handler = APPLY_BASIC_AUTH_FILTER(handler_capture_save_to_file); camuri.user_ctx = NULL; httpd_register_uri_handler(server, &camuri); } diff --git a/code/components/jomjol_fileserver_ota/server_file.cpp b/code/components/jomjol_fileserver_ota/server_file.cpp index 8da898736..2595de2d2 100644 --- a/code/components/jomjol_fileserver_ota/server_file.cpp +++ b/code/components/jomjol_fileserver_ota/server_file.cpp @@ -46,6 +46,7 @@ extern "C" { #include "Helper.h" #include "miniz.h" +#include "basic_auth.h" static const char *TAG = "OTA FILE"; @@ -1174,7 +1175,7 @@ void register_server_file_uri(httpd_handle_t server, const char *base_path) httpd_uri_t file_download = { .uri = "/fileserver*", // Match all URIs of type /path/to/file .method = HTTP_GET, - .handler = download_get_handler, + .handler = APPLY_BASIC_AUTH_FILTER(download_get_handler), .user_ctx = server_data // Pass server data as context }; httpd_register_uri_handler(server, &file_download); @@ -1183,7 +1184,7 @@ void register_server_file_uri(httpd_handle_t server, const char *base_path) httpd_uri_t file_datafileact = { .uri = "/datafileact", // Match all URIs of type /path/to/file .method = HTTP_GET, - .handler = datafileact_get_full_handler, + .handler = APPLY_BASIC_AUTH_FILTER(datafileact_get_full_handler), .user_ctx = server_data // Pass server data as context }; httpd_register_uri_handler(server, &file_datafileact); @@ -1192,7 +1193,7 @@ void register_server_file_uri(httpd_handle_t server, const char *base_path) httpd_uri_t file_datafile_last_part_handle = { .uri = "/data", // Match all URIs of type /path/to/file .method = HTTP_GET, - .handler = datafileact_get_last_part_handler, + .handler = APPLY_BASIC_AUTH_FILTER(datafileact_get_last_part_handler), .user_ctx = server_data // Pass server data as context }; httpd_register_uri_handler(server, &file_datafile_last_part_handle); @@ -1200,7 +1201,7 @@ void register_server_file_uri(httpd_handle_t server, const char *base_path) httpd_uri_t file_logfileact = { .uri = "/logfileact", // Match all URIs of type /path/to/file .method = HTTP_GET, - .handler = logfileact_get_full_handler, + .handler = APPLY_BASIC_AUTH_FILTER(logfileact_get_full_handler), .user_ctx = server_data // Pass server data as context }; httpd_register_uri_handler(server, &file_logfileact); @@ -1209,7 +1210,7 @@ void register_server_file_uri(httpd_handle_t server, const char *base_path) httpd_uri_t file_logfile_last_part_handle = { .uri = "/log", // Match all URIs of type /path/to/file .method = HTTP_GET, - .handler = logfileact_get_last_part_handler, + .handler = APPLY_BASIC_AUTH_FILTER(logfileact_get_last_part_handler), .user_ctx = server_data // Pass server data as context }; httpd_register_uri_handler(server, &file_logfile_last_part_handle); @@ -1219,7 +1220,7 @@ void register_server_file_uri(httpd_handle_t server, const char *base_path) httpd_uri_t file_upload = { .uri = "/upload/*", // Match all URIs of type /upload/path/to/file .method = HTTP_POST, - .handler = upload_post_handler, + .handler = APPLY_BASIC_AUTH_FILTER(upload_post_handler), .user_ctx = server_data // Pass server data as context }; httpd_register_uri_handler(server, &file_upload); @@ -1228,7 +1229,7 @@ void register_server_file_uri(httpd_handle_t server, const char *base_path) httpd_uri_t file_delete = { .uri = "/delete/*", // Match all URIs of type /delete/path/to/file .method = HTTP_POST, - .handler = delete_post_handler, + .handler = APPLY_BASIC_AUTH_FILTER(delete_post_handler), .user_ctx = server_data // Pass server data as context }; httpd_register_uri_handler(server, &file_delete); diff --git a/code/components/jomjol_fileserver_ota/server_ota.cpp b/code/components/jomjol_fileserver_ota/server_ota.cpp index ad7b1b598..147686586 100644 --- a/code/components/jomjol_fileserver_ota/server_ota.cpp +++ b/code/components/jomjol_fileserver_ota/server_ota.cpp @@ -42,8 +42,10 @@ #include "Helper.h" #include "statusled.h" +#include "basic_auth.h" #include "../../include/defines.h" + /*an ota data write buffer ready to write to the flash*/ static char ota_write_data[SERVER_OTA_SCRATCH_BUFSIZE + 1] = { 0 }; @@ -690,13 +692,13 @@ void register_server_ota_sdcard_uri(httpd_handle_t server) httpd_uri_t camuri = { }; camuri.method = HTTP_GET; camuri.uri = "/ota"; - camuri.handler = handler_ota_update; + camuri.handler = APPLY_BASIC_AUTH_FILTER(handler_ota_update); camuri.user_ctx = (void*) "Do OTA"; httpd_register_uri_handler(server, &camuri); camuri.method = HTTP_GET; camuri.uri = "/reboot"; - camuri.handler = handler_reboot; + camuri.handler = APPLY_BASIC_AUTH_FILTER(handler_reboot); camuri.user_ctx = (void*) "Reboot"; httpd_register_uri_handler(server, &camuri); diff --git a/code/components/jomjol_mqtt/server_mqtt.cpp b/code/components/jomjol_mqtt/server_mqtt.cpp index 63eb5cb86..59774dac3 100644 --- a/code/components/jomjol_mqtt/server_mqtt.cpp +++ b/code/components/jomjol_mqtt/server_mqtt.cpp @@ -12,6 +12,7 @@ #include "interface_mqtt.h" #include "time_sntp.h" #include "../../include/defines.h" +#include "basic_auth.h" @@ -308,7 +309,7 @@ void register_server_mqtt_uri(httpd_handle_t server) { uri.method = HTTP_GET; uri.uri = "/mqtt_publish_discovery"; - uri.handler = scheduleSendingDiscovery_and_static_Topics; + uri.handler = APPLY_BASIC_AUTH_FILTER(scheduleSendingDiscovery_and_static_Topics); uri.user_ctx = (void*) ""; httpd_register_uri_handler(server, &uri); } diff --git a/code/components/jomjol_wlan/read_wlanini.cpp b/code/components/jomjol_wlan/read_wlanini.cpp index 7ebca23da..9cf7f9b18 100644 --- a/code/components/jomjol_wlan/read_wlanini.cpp +++ b/code/components/jomjol_wlan/read_wlanini.cpp @@ -157,8 +157,22 @@ int LoadWlanFromFile(std::string fn) #endif } - /* read next line */ - if (fgets(zw, sizeof(zw), pFile) == NULL) { + if ((splitted.size() > 1) && (toUpper(splitted[0]) == "HTTP_USERNAME")){ + http_username = splitted[1]; + if ((http_username[0] == '"') && (http_username[http_username.length()-1] == '"')){ + http_username = http_username.substr(1, http_username.length()-2); + } + } + + if ((splitted.size() > 1) && (toUpper(splitted[0]) == "HTTP_PASSWORD")){ + http_password = splitted[1]; + if ((http_password[0] == '"') && (http_password[http_password.length()-1] == '"')){ + http_password = http_password.substr(1, http_password.length()-2); + } + } + + if (fgets(zw, 1024, pFile) == NULL) + { line = ""; } else { diff --git a/code/include/basic_auth.h b/code/include/basic_auth.h new file mode 100644 index 000000000..82d3d07f5 --- /dev/null +++ b/code/include/basic_auth.h @@ -0,0 +1,10 @@ +#ifndef BASIC_AUTH_H +#define BASIC_AUTH_H + +#include + +void init_basic_auth(char *username, char *password); +esp_err_t basic_auth_request_filter(httpd_req_t *req, esp_err_t original_handler(httpd_req_t *)); + +#define APPLY_BASIC_AUTH_FILTER(method) [](httpd_req_t *req){ return basic_auth_request_filter(req, method); } +#endif \ No newline at end of file diff --git a/code/main/basic_auth.cpp b/code/main/basic_auth.cpp new file mode 100644 index 000000000..07a70a837 --- /dev/null +++ b/code/main/basic_auth.cpp @@ -0,0 +1,101 @@ +#include "basic_auth.h" +#include +#include + +#define HTTPD_401 "401 UNAUTHORIZED" + +static const char *TAG = "HTTPAUTH"; + +typedef struct { + char *username; + char *password; +} basic_auth_info_t; + +basic_auth_info_t basic_auth_info = { NULL, NULL }; + +void init_basic_auth(char *username, char *password) { + basic_auth_info.username = username; + basic_auth_info.password = password; +} + +static char *http_auth_basic(const char *username, const char *password) +{ + int out; + char *user_info = NULL; + char *digest = NULL; + size_t n = 0; + asprintf(&user_info, "%s:%s", username, password); + if (!user_info) { + ESP_LOGE(TAG, "No enough memory for user information"); + return NULL; + } + esp_crypto_base64_encode(NULL, 0, &n, (const unsigned char *)user_info, strlen(user_info)); + + /* 6: The length of the "Basic " string + * n: Number of bytes for a base64 encode format + * 1: Number of bytes for a reserved which be used to fill zero + */ + digest = static_cast(calloc(1, 6 + n + 1)); + if (digest) { + strcpy(digest, "Basic "); + esp_crypto_base64_encode((unsigned char *)digest + 6, n, (size_t *)&out, (const unsigned char *)user_info, strlen(user_info)); + } + free(user_info); + return digest; +} + +esp_err_t basic_auth_request_filter(httpd_req_t *req, esp_err_t original_handler(httpd_req_t *)) +{ + char *buf = NULL; + size_t buf_len = 0; + esp_err_t ret = ESP_OK; + + if (basic_auth_info.username == NULL || basic_auth_info.password == NULL) { + ret = original_handler(req); + } else { + buf_len = httpd_req_get_hdr_value_len(req, "Authorization") + 1; + if (buf_len > 1) { + buf = static_cast(calloc(1, buf_len)); + if (!buf) { + ESP_LOGE(TAG, "No enough memory for basic authorization"); + return ESP_ERR_NO_MEM; + } + + if (httpd_req_get_hdr_value_str(req, "Authorization", buf, buf_len) == ESP_OK) { + ESP_LOGI(TAG, "Found header => Authorization: %s", buf); + } else { + ESP_LOGE(TAG, "No auth value received"); + } + + char *auth_credentials = http_auth_basic(basic_auth_info.username, basic_auth_info.password); + if (!auth_credentials) { + ESP_LOGE(TAG, "No enough memory for basic authorization credentials"); + free(buf); + return ESP_ERR_NO_MEM; + } + + if (strncmp(auth_credentials, buf, buf_len)) { + ESP_LOGE(TAG, "Not authenticated"); + httpd_resp_set_status(req, HTTPD_401); + httpd_resp_set_type(req, "application/json"); + httpd_resp_set_hdr(req, "Connection", "keep-alive"); + httpd_resp_set_hdr(req, "WWW-Authenticate", "Basic realm=\"Hello\""); + httpd_resp_send(req, NULL, 0); + } else { + ESP_LOGI(TAG, "Authenticated calling http handler now!"); + ret=original_handler(req); + } + free(auth_credentials); + free(buf); + } else { + ESP_LOGE(TAG, "No auth header received"); + httpd_resp_set_status(req, HTTPD_401); + httpd_resp_set_type(req, "application/json"); + httpd_resp_set_hdr(req, "Connection", "keep-alive"); + httpd_resp_set_hdr(req, "WWW-Authenticate", "Basic realm=\"Hello\""); + httpd_resp_send(req, NULL, 0); + } + } + + return ret; +} diff --git a/code/main/main.cpp b/code/main/main.cpp index 7a508bba0..5a8ba7291 100644 --- a/code/main/main.cpp +++ b/code/main/main.cpp @@ -41,6 +41,8 @@ //#include "ClassControllCamera.h" #include "server_main.h" #include "server_camera.h" +#include "basic_auth.h" + #ifdef ENABLE_MQTT #include "server_mqtt.h" #endif //ENABLE_MQTT @@ -86,6 +88,7 @@ static heap_trace_record_t trace_record[NUM_RECORDS]; // This buffer must be in internal RAM #endif + extern const char* GIT_TAG; extern const char* GIT_REV; extern const char* GIT_BRANCH; diff --git a/code/main/server_main.cpp b/code/main/server_main.cpp index f60aedc5c..5f770ef91 100644 --- a/code/main/server_main.cpp +++ b/code/main/server_main.cpp @@ -17,6 +17,7 @@ #include "MainFlowControl.h" #include "esp_log.h" +#include "basic_auth.h" #include @@ -386,7 +387,7 @@ void register_server_main_uri(httpd_handle_t server, const char *base_path) httpd_uri_t info_get_handle = { .uri = "/info", // Match all URIs of type /path/to/file .method = HTTP_GET, - .handler = info_get_handler, + .handler = APPLY_BASIC_AUTH_FILTER(info_get_handler), .user_ctx = (void*) base_path // Pass server data as context }; httpd_register_uri_handler(server, &info_get_handle); @@ -394,7 +395,7 @@ void register_server_main_uri(httpd_handle_t server, const char *base_path) httpd_uri_t sysinfo_handle = { .uri = "/sysinfo", // Match all URIs of type /path/to/file .method = HTTP_GET, - .handler = sysinfo_handler, + .handler = APPLY_BASIC_AUTH_FILTER(sysinfo_handler), .user_ctx = (void*) base_path // Pass server data as context }; httpd_register_uri_handler(server, &sysinfo_handle); @@ -402,7 +403,7 @@ void register_server_main_uri(httpd_handle_t server, const char *base_path) httpd_uri_t starttime_tmp_handle = { .uri = "/starttime", // Match all URIs of type /path/to/file .method = HTTP_GET, - .handler = starttime_get_handler, + .handler = APPLY_BASIC_AUTH_FILTER(starttime_get_handler), .user_ctx = NULL // Pass server data as context }; httpd_register_uri_handler(server, &starttime_tmp_handle); @@ -410,7 +411,7 @@ void register_server_main_uri(httpd_handle_t server, const char *base_path) httpd_uri_t img_tmp_handle = { .uri = "/img_tmp/*", // Match all URIs of type /path/to/file .method = HTTP_GET, - .handler = img_tmp_virtual_handler, + .handler = APPLY_BASIC_AUTH_FILTER(img_tmp_virtual_handler), .user_ctx = (void*) base_path // Pass server data as context }; httpd_register_uri_handler(server, &img_tmp_handle); @@ -418,7 +419,7 @@ void register_server_main_uri(httpd_handle_t server, const char *base_path) httpd_uri_t main_rest_handle = { .uri = "/*", // Match all URIs of type /path/to/file .method = HTTP_GET, - .handler = hello_main_handler, + .handler = APPLY_BASIC_AUTH_FILTER(hello_main_handler), .user_ctx = (void*) base_path // Pass server data as context }; httpd_register_uri_handler(server, &main_rest_handle); diff --git a/sd-card/wlan.ini b/sd-card/wlan.ini index a1ba7454a..1fff450cc 100644 --- a/sd-card/wlan.ini +++ b/sd-card/wlan.ini @@ -36,3 +36,7 @@ password = "" ; Default: 0 = Disable client requested roaming query RSSIThreshold = 0 + + +;http_username = "test" +;http_password = "changeme" From 71790260b7c10323a04e8fd765e046664b5e4344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Kr=C3=A4mer?= Date: Thu, 23 Mar 2023 15:34:29 +0100 Subject: [PATCH 2/3] fixes after rebase --- code/components/jomjol_wlan/read_wlanini.cpp | 37 ++++++++++++-------- code/components/jomjol_wlan/read_wlanini.h | 2 ++ code/include/basic_auth.h | 8 ++--- code/main/basic_auth.cpp | 14 +++++--- code/main/main.cpp | 2 ++ code/platformio.ini | 1 - 6 files changed, 39 insertions(+), 25 deletions(-) diff --git a/code/components/jomjol_wlan/read_wlanini.cpp b/code/components/jomjol_wlan/read_wlanini.cpp index 9cf7f9b18..fae306131 100644 --- a/code/components/jomjol_wlan/read_wlanini.cpp +++ b/code/components/jomjol_wlan/read_wlanini.cpp @@ -145,6 +145,29 @@ int LoadWlanFromFile(std::string fn) wlan_config.dns = tmp; LogFile.WriteToFile(ESP_LOG_INFO, TAG, "DNS: " + wlan_config.dns); } + + else if ((splitted.size() > 1) && (toUpper(splitted[0]) == "HTTP_USERNAME")){ + tmp = splitted[1]; + if ((tmp[0] == '"') && (tmp[tmp.length()-1] == '"')){ + tmp = tmp.substr(1, tmp.length()-2); + } + wlan_config.http_username = tmp; + LogFile.WriteToFile(ESP_LOG_INFO, TAG, "HTTP_USERNAME: " + wlan_config.http_username); + } + + else if ((splitted.size() > 1) && (toUpper(splitted[0]) == "HTTP_PASSWORD")){ + tmp = splitted[1]; + if ((tmp[0] == '"') && (tmp[tmp.length()-1] == '"')){ + tmp = tmp.substr(1, tmp.length()-2); + } + wlan_config.http_password = tmp; + #ifndef __HIDE_PASSWORD + LogFile.WriteToFile(ESP_LOG_INFO, TAG, "HTTP_PASSWORD: " + wlan_config.http_password); + #else + LogFile.WriteToFile(ESP_LOG_INFO, TAG, "HTTP_PASSWORD: XXXXXXXX"); + #endif + } + #if (defined WLAN_USE_ROAMING_BY_SCANNING || (defined WLAN_USE_MESH_ROAMING && defined WLAN_USE_MESH_ROAMING_ACTIVATE_CLIENT_TRIGGERED_QUERIES)) else if ((splitted.size() > 1) && (toUpper(splitted[0]) == "RSSITHRESHOLD")){ tmp = trim(splitted[1]); @@ -157,20 +180,6 @@ int LoadWlanFromFile(std::string fn) #endif } - if ((splitted.size() > 1) && (toUpper(splitted[0]) == "HTTP_USERNAME")){ - http_username = splitted[1]; - if ((http_username[0] == '"') && (http_username[http_username.length()-1] == '"')){ - http_username = http_username.substr(1, http_username.length()-2); - } - } - - if ((splitted.size() > 1) && (toUpper(splitted[0]) == "HTTP_PASSWORD")){ - http_password = splitted[1]; - if ((http_password[0] == '"') && (http_password[http_password.length()-1] == '"')){ - http_password = http_password.substr(1, http_password.length()-2); - } - } - if (fgets(zw, 1024, pFile) == NULL) { line = ""; diff --git a/code/components/jomjol_wlan/read_wlanini.h b/code/components/jomjol_wlan/read_wlanini.h index 6a31490f7..759f68332 100644 --- a/code/components/jomjol_wlan/read_wlanini.h +++ b/code/components/jomjol_wlan/read_wlanini.h @@ -13,6 +13,8 @@ struct wlan_config { std::string gateway = ""; std::string netmask = ""; std::string dns = ""; + std::string http_username = ""; + std::string http_password = ""; int rssi_threshold = 0; // Default: 0 -> ROAMING disabled }; extern struct wlan_config wlan_config; diff --git a/code/include/basic_auth.h b/code/include/basic_auth.h index 82d3d07f5..ae6a7d346 100644 --- a/code/include/basic_auth.h +++ b/code/include/basic_auth.h @@ -1,10 +1,8 @@ -#ifndef BASIC_AUTH_H -#define BASIC_AUTH_H +#pragma once #include -void init_basic_auth(char *username, char *password); +void init_basic_auth(); esp_err_t basic_auth_request_filter(httpd_req_t *req, esp_err_t original_handler(httpd_req_t *)); -#define APPLY_BASIC_AUTH_FILTER(method) [](httpd_req_t *req){ return basic_auth_request_filter(req, method); } -#endif \ No newline at end of file +#define APPLY_BASIC_AUTH_FILTER(method) [](httpd_req_t *req){ return basic_auth_request_filter(req, method); } \ No newline at end of file diff --git a/code/main/basic_auth.cpp b/code/main/basic_auth.cpp index 07a70a837..8d467d090 100644 --- a/code/main/basic_auth.cpp +++ b/code/main/basic_auth.cpp @@ -1,21 +1,25 @@ #include "basic_auth.h" +#include "read_wlanini.h" #include #include + #define HTTPD_401 "401 UNAUTHORIZED" static const char *TAG = "HTTPAUTH"; typedef struct { - char *username; - char *password; + const char *username; + const char *password; } basic_auth_info_t; basic_auth_info_t basic_auth_info = { NULL, NULL }; -void init_basic_auth(char *username, char *password) { - basic_auth_info.username = username; - basic_auth_info.password = password; +void init_basic_auth() { + if (!wlan_config.http_username.empty() && !wlan_config.http_password.empty()) { + basic_auth_info.username = wlan_config.http_username.c_str(); + basic_auth_info.password = wlan_config.http_password.c_str(); + } } static char *http_auth_basic(const char *username, const char *password) diff --git a/code/main/main.cpp b/code/main/main.cpp index 5a8ba7291..411ee88b3 100644 --- a/code/main/main.cpp +++ b/code/main/main.cpp @@ -424,6 +424,8 @@ extern "C" void app_main(void) StatusLED(WLAN_INIT, 3, true); return; } + + init_basic_auth(); } else if (iWLANStatus == -1) { // wlan.ini not available, potentially empty or content not readable StatusLED(WLAN_INIT, 1, true); diff --git a/code/platformio.ini b/code/platformio.ini index ea924fb2f..6c9fd1f97 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -57,7 +57,6 @@ build_flags = ${flags:runtime.build_flags} ; ### Sofware options : (can be set in defines.h) -D ENABLE_MQTT - -D ENABLE_INFLUXDB -D ENABLE_SOFTAP board_build.partitions = partitions.csv monitor_speed = 115200 From d6d78c7e82ef673940e08623815c061692944d06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Kr=C3=A4mer?= Date: Sat, 21 Sep 2024 08:25:37 +0200 Subject: [PATCH 3/3] Do not update the preValue timestamp when the rate is to high. May be not updating the value is a good idea as well --- code/components/jomjol_flowcontroll/ClassFlowPostProcessing.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/code/components/jomjol_flowcontroll/ClassFlowPostProcessing.cpp b/code/components/jomjol_flowcontroll/ClassFlowPostProcessing.cpp index 351bcc0e9..aba734539 100644 --- a/code/components/jomjol_flowcontroll/ClassFlowPostProcessing.cpp +++ b/code/components/jomjol_flowcontroll/ClassFlowPostProcessing.cpp @@ -913,7 +913,6 @@ bool ClassFlowPostProcessing::doFlow(string zwtime) NUMBERS[j]->Value = NUMBERS[j]->PreValue; NUMBERS[j]->ReturnValue = ""; NUMBERS[j]->ReturnRateValue = ""; - NUMBERS[j]->lastvalue = imagetime; string _zw = NUMBERS[j]->name + ": Raw: " + NUMBERS[j]->ReturnRawValue + ", Value: " + NUMBERS[j]->ReturnValue + ", Status: " + NUMBERS[j]->ErrorMessageText; LogFile.WriteToFile(ESP_LOG_ERROR, TAG, _zw);