diff --git a/src/networking/webserver.cpp b/src/networking/webserver.cpp index 6af4cdb..cef674e 100644 --- a/src/networking/webserver.cpp +++ b/src/networking/webserver.cpp @@ -53,63 +53,11 @@ void setup_routes() { // API stuff - internal server.on("/update_wifi_credentials", HTTP_POST, [](AsyncWebServerRequest* request) { - // For settings SSID - if (request->hasParam(ssid_key, true) && request->hasParam(wifi_password_key, true)) { - LOG(ELOG_LEVEL_DEBUG, "Updating SSID config"); - const AsyncWebParameter* ssid_param = request->getParam(ssid_key, true); - const AsyncWebParameter* password_param = request->getParam(wifi_password_key, true); - prefs.putString(ssid_key, ssid_param->value().c_str()); - prefs.putString(wifi_password_key, password_param->value().c_str()); - - } else { - request->send(400, "text/plain", "Missing parameters"); // TODO add proper error messages - } - request->send(LittleFS, "/settings.html", "text/html", false, processor); // TODO add proper return templating + handle_update_wifi_credentials(request); }); server.on("/update_sensor_settings", HTTP_POST, [](AsyncWebServerRequest* request) { - int params = request->params(); - - if (request->hasParam(level_sensor_range_key, true) && request->hasParam(water_level_min_key, true) && request->hasParam(water_level_max_key, true) && request->hasParam(water_volume_key, true)) { - LOG(ELOG_LEVEL_DEBUG, "Updating Sensor config"); - const AsyncWebParameter* range_param = request->getParam(level_sensor_range_key, true); - const AsyncWebParameter* level_min_param = request->getParam(water_level_min_key, true); - const AsyncWebParameter* level_max_param = request->getParam(water_level_max_key, true); - const AsyncWebParameter* liters_param = request->getParam(water_volume_key, true); - - String range_str = range_param->value(); - String level_min_str = level_min_param->value(); - String level_max_str = level_max_param->value(); - String liters_str = liters_param->value(); - - float range_float = range_str.toFloat(); - float level_min_float = level_min_str.toFloat(); - float level_max_float = level_max_str.toFloat(); - float liters_float = liters_str.toFloat(); - - LOG(ELOG_LEVEL_DEBUG, "range_float:%D:", range_float); - - prefs.putFloat(level_sensor_range_key, range_float); - prefs.putFloat(water_level_min_key, level_min_float); - prefs.putFloat(water_level_max_key, level_max_float); - prefs.putFloat(water_volume_key, liters_float); - - LOG(ELOG_LEVEL_DEBUG, "range_float_after:%D:", prefs.getFloat(level_sensor_range_key, -1.0)); - } else { - LOG(ELOG_LEVEL_DEBUG, "!!!! FAIL lo"); - for (int i = 0; i < params; i++) { - const AsyncWebParameter* p = request->getParam(i); - if (p->isFile()) { // p->isPost() is also true - LOG(ELOG_LEVEL_DEBUG, "POST[%s]: %s\n", p->name().c_str(), p->value().c_str()); - } else if (p->isPost()) { - LOG(ELOG_LEVEL_DEBUG, "POST[%s]: %s\n", p->name().c_str(), p->value().c_str()); - } else { - LOG(ELOG_LEVEL_DEBUG, "GET[%s]: %s\n", p->name().c_str(), p->value().c_str()); - } - } - request->send(400, "text/plain", "Missing parameters"); // TODO add proper error messages - } - request->send(LittleFS, "/settings.html", "text/html", false); // TODO add proper return templating + handle_update_sensor_settings(request); }); setup_api_endpoints(); @@ -185,6 +133,85 @@ void setup_api_endpoints(){ }); } +// ====================== +// Helper Functions +// ====================== + +/** + * @brief Handles the update of WiFi credentials. + * + * Validates and updates the SSID and password in preferences. + * + * @param request The web server request object. + */ +void handle_update_wifi_credentials(AsyncWebServerRequest* request) { + if (request->hasParam(ssid_key, true) && request->hasParam(wifi_password_key, true)) { + LOG(ELOG_LEVEL_DEBUG, "Updating SSID config"); + const AsyncWebParameter* ssid_param = request->getParam(ssid_key, true); + const AsyncWebParameter* password_param = request->getParam(wifi_password_key, true); + prefs.putString(ssid_key, ssid_param->value().c_str()); + prefs.putString(wifi_password_key, password_param->value().c_str()); + } else { + request->send(400, "text/plain", "Missing parameters"); + return; + } + request->send(LittleFS, "/settings.html", "text/html", false, processor); +} + +/** + * @brief Handles the update of sensor settings. + * + * Validates and updates sensor configuration parameters in preferences. + * + * @param request The web server request object. + */ +void handle_update_sensor_settings(AsyncWebServerRequest* request) { + int params = request->params(); + + if (request->hasParam(level_sensor_range_key, true) && request->hasParam(water_level_min_key, true) && + request->hasParam(water_level_max_key, true) && request->hasParam(water_volume_key, true)) { + LOG(ELOG_LEVEL_DEBUG, "Updating Sensor config"); + const AsyncWebParameter* range_param = request->getParam(level_sensor_range_key, true); + const AsyncWebParameter* level_min_param = request->getParam(water_level_min_key, true); + const AsyncWebParameter* level_max_param = request->getParam(water_level_max_key, true); + const AsyncWebParameter* liters_param = request->getParam(water_volume_key, true); + + String range_str = range_param->value(); + String level_min_str = level_min_param->value(); + String level_max_str = level_max_param->value(); + String liters_str = liters_param->value(); + + float range_float = range_str.toFloat(); + float level_min_float = level_min_str.toFloat(); + float level_max_float = level_max_str.toFloat(); + float liters_float = liters_str.toFloat(); + + LOG(ELOG_LEVEL_DEBUG, "range_float:%D:", range_float); + + prefs.putFloat(level_sensor_range_key, range_float); + prefs.putFloat(water_level_min_key, level_min_float); + prefs.putFloat(water_level_max_key, level_max_float); + prefs.putFloat(water_volume_key, liters_float); + + LOG(ELOG_LEVEL_DEBUG, "range_float_after:%D:", prefs.getFloat(level_sensor_range_key, -1.0)); + } else { + LOG(ELOG_LEVEL_DEBUG, "!!!! FAIL lo"); + for (int i = 0; i < params; i++) { + const AsyncWebParameter* p = request->getParam(i); + if (p->isFile()) { + LOG(ELOG_LEVEL_DEBUG, "POST[%s]: %s\n", p->name().c_str(), p->value().c_str()); + } else if (p->isPost()) { + LOG(ELOG_LEVEL_DEBUG, "POST[%s]: %s\n", p->name().c_str(), p->value().c_str()); + } else { + LOG(ELOG_LEVEL_DEBUG, "GET[%s]: %s\n", p->name().c_str(), p->value().c_str()); + } + } + request->send(400, "text/plain", "Missing parameters"); + return; + } + request->send(LittleFS, "/settings.html", "text/html", false); +} + /** * @brief Main task for the webserver. * diff --git a/src/networking/webserver.h b/src/networking/webserver.h index 621a9c1..17776c6 100644 --- a/src/networking/webserver.h +++ b/src/networking/webserver.h @@ -10,4 +10,6 @@ extern AsyncWebServer server; void setup_api_endpoints(); void setup_routes(); void webserver_task(void *pvParameters); +void handle_update_wifi_credentials(AsyncWebServerRequest* request); +void handle_update_sensor_settings(AsyncWebServerRequest* request);