diff --git a/src/web/WebAPIService.cpp b/src/web/WebAPIService.cpp index 296f3f4e1..112136dcf 100644 --- a/src/web/WebAPIService.cpp +++ b/src/web/WebAPIService.cpp @@ -25,25 +25,7 @@ uint16_t WebAPIService::api_fails_ = 0; WebAPIService::WebAPIService(AsyncWebServer * server, SecurityManager * securityManager) : _securityManager(securityManager) { - // API server->on(EMSESP_API_SERVICE_PATH, [this](AsyncWebServerRequest * request, JsonVariant json) { webAPIService(request, json); }); - - // settings - server->on(GET_SETTINGS_PATH, - HTTP_GET, - securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getSettings(request); }, AuthenticationPredicates::IS_ADMIN)); - - server->on(GET_CUSTOMIZATIONS_PATH, - HTTP_GET, - securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getCustomizations(request); }, AuthenticationPredicates::IS_ADMIN)); - - server->on(GET_SCHEDULE_PATH, - HTTP_GET, - securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getSchedule(request); }, AuthenticationPredicates::IS_ADMIN)); - - server->on(GET_ENTITIES_PATH, - HTTP_GET, - securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getEntities(request); }, AuthenticationPredicates::IS_ADMIN)); } // POST|GET /{device} @@ -173,62 +155,6 @@ void WebAPIService::parse(AsyncWebServerRequest * request, JsonObject input) { #endif } -void WebAPIService::getSettings(AsyncWebServerRequest * request) { - auto * response = new AsyncJsonResponse(false); - JsonObject root = response->getRoot(); - - root["type"] = "settings"; - - JsonObject node = root["System"].to(); - node["version"] = EMSESP_APP_VERSION; - - System::extractSettings(NETWORK_SETTINGS_FILE, "Network", root); - System::extractSettings(AP_SETTINGS_FILE, "AP", root); - System::extractSettings(MQTT_SETTINGS_FILE, "MQTT", root); - System::extractSettings(NTP_SETTINGS_FILE, "NTP", root); - System::extractSettings(SECURITY_SETTINGS_FILE, "Security", root); - System::extractSettings(EMSESP_SETTINGS_FILE, "Settings", root); - - response->setLength(); - request->send(response); -} - -void WebAPIService::getCustomizations(AsyncWebServerRequest * request) { - auto * response = new AsyncJsonResponse(false); - JsonObject root = response->getRoot(); - - root["type"] = "customizations"; - - System::extractSettings(EMSESP_CUSTOMIZATION_FILE, "Customizations", root); - - response->setLength(); - request->send(response); -} - -void WebAPIService::getSchedule(AsyncWebServerRequest * request) { - auto * response = new AsyncJsonResponse(false); - JsonObject root = response->getRoot(); - - root["type"] = "schedule"; - - System::extractSettings(EMSESP_SCHEDULER_FILE, "Schedule", root); - - response->setLength(); - request->send(response); -} - -void WebAPIService::getEntities(AsyncWebServerRequest * request) { - auto * response = new AsyncJsonResponse(false); - JsonObject root = response->getRoot(); - - root["type"] = "entities"; - - System::extractSettings(EMSESP_CUSTOMENTITY_FILE, "Entities", root); - - response->setLength(); - request->send(response); -} - #if defined(EMSESP_UNITY) // store the result so we can test with Unity later static JsonDocument storeResponseDoc_; diff --git a/src/web/WebAPIService.h b/src/web/WebAPIService.h index e47e19232..636c15d6b 100644 --- a/src/web/WebAPIService.h +++ b/src/web/WebAPIService.h @@ -21,11 +21,6 @@ #define EMSESP_API_SERVICE_PATH "/api" -#define GET_SETTINGS_PATH "/rest/getSettings" -#define GET_CUSTOMIZATIONS_PATH "/rest/getCustomizations" -#define GET_SCHEDULE_PATH "/rest/getSchedule" -#define GET_ENTITIES_PATH "/rest/getEntities" - namespace emsesp { class WebAPIService { @@ -56,10 +51,6 @@ class WebAPIService { static uint16_t api_fails_; void parse(AsyncWebServerRequest * request, JsonObject input); - void getSettings(AsyncWebServerRequest * request); - void getCustomizations(AsyncWebServerRequest * request); - void getSchedule(AsyncWebServerRequest * request); - void getEntities(AsyncWebServerRequest * request); }; } // namespace emsesp diff --git a/src/web/WebCustomEntityService.cpp b/src/web/WebCustomEntityService.cpp index 6e84fea49..5c0a5bc67 100644 --- a/src/web/WebCustomEntityService.cpp +++ b/src/web/WebCustomEntityService.cpp @@ -29,6 +29,9 @@ WebCustomEntityService::WebCustomEntityService(AsyncWebServer * server, FS * fs, securityManager, AuthenticationPredicates::IS_AUTHENTICATED) , _fsPersistence(WebCustomEntity::read, WebCustomEntity::update, this, fs, EMSESP_CUSTOMENTITY_FILE) { + server->on(EMSESP_GET_ENTITIES_PATH, + HTTP_GET, + securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getEntities(request); }, AuthenticationPredicates::IS_ADMIN)); } // load the settings when the service starts @@ -708,4 +711,17 @@ void WebCustomEntityService::test() { } #endif +// return entities as a json object +void WebCustomEntityService::getEntities(AsyncWebServerRequest * request) { + auto * response = new AsyncJsonResponse(false); + JsonObject root = response->getRoot(); + + root["type"] = "entities"; + + System::extractSettings(EMSESP_CUSTOMENTITY_FILE, "Entities", root); + + response->setLength(); + request->send(response); +} + } // namespace emsesp diff --git a/src/web/WebCustomEntityService.h b/src/web/WebCustomEntityService.h index 4f67c2290..088562c5e 100644 --- a/src/web/WebCustomEntityService.h +++ b/src/web/WebCustomEntityService.h @@ -22,6 +22,7 @@ #define EMSESP_CUSTOMENTITY_FILE "/config/emsespEntity.json" #define EMSESP_CUSTOMENTITY_SERVICE_PATH "/rest/customEntities" // GET and POST +#define EMSESP_GET_ENTITIES_PATH "/rest/getEntities" namespace emsesp { @@ -80,6 +81,8 @@ class WebCustomEntityService : public StatefulService { HttpEndpoint _httpEndpoint; FSPersistence _fsPersistence; + void getEntities(AsyncWebServerRequest * request); + std::list * customEntityItems_; // pointer to the list of entity items bool ha_registered_ = false; diff --git a/src/web/WebCustomizationService.cpp b/src/web/WebCustomizationService.cpp index da96e6611..63d415992 100644 --- a/src/web/WebCustomizationService.cpp +++ b/src/web/WebCustomizationService.cpp @@ -25,24 +25,25 @@ bool WebCustomization::_start = true; WebCustomizationService::WebCustomizationService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager) : _fsPersistence(WebCustomization::read, WebCustomization::update, this, fs, EMSESP_CUSTOMIZATION_FILE) { // GET - server->on(DEVICE_ENTITIES_PATH, + server->on(EMSESP_DEVICE_ENTITIES_PATH, HTTP_GET, securityManager->wrapRequest([this](AsyncWebServerRequest * request) { device_entities(request); }, AuthenticationPredicates::IS_AUTHENTICATED)); - - server->on(DEVICES_SERVICE_PATH, + server->on(EMSESP_DEVICES_SERVICE_PATH, HTTP_GET, securityManager->wrapRequest([this](AsyncWebServerRequest * request) { devices(request); }, AuthenticationPredicates::IS_AUTHENTICATED)); + server->on(EMSESP_GET_CUSTOMIZATIONS_PATH, + HTTP_GET, + securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getCustomizations(request); }, AuthenticationPredicates::IS_ADMIN)); + // POST - server->on(RESET_CUSTOMIZATION_SERVICE_PATH, + server->on(EMSESP_RESET_CUSTOMIZATION_SERVICE_PATH, HTTP_POST, securityManager->wrapRequest([this](AsyncWebServerRequest * request) { reset_customization(request); }, AuthenticationPredicates::IS_ADMIN)); - - server->on(WRITE_DEVICE_NAME_PATH, + server->on(EMSESP_WRITE_DEVICE_NAME_PATH, securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { writeDeviceName(request, json); }, AuthenticationPredicates::IS_AUTHENTICATED)); - - server->on(CUSTOMIZATION_ENTITIES_PATH, + server->on(EMSESP_CUSTOMIZATION_ENTITIES_PATH, securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { customization_entities(request, json); }, AuthenticationPredicates::IS_AUTHENTICATED)); } @@ -424,4 +425,17 @@ void WebCustomizationService::test() { } #endif +// return all customizations in a json object +void WebCustomizationService::getCustomizations(AsyncWebServerRequest * request) { + auto * response = new AsyncJsonResponse(false); + JsonObject root = response->getRoot(); + + root["type"] = "customizations"; + + System::extractSettings(EMSESP_CUSTOMIZATION_FILE, "Customizations", root); + + response->setLength(); + request->send(response); +} + } // namespace emsesp diff --git a/src/web/WebCustomizationService.h b/src/web/WebCustomizationService.h index 98abbbc3b..2f085efe8 100644 --- a/src/web/WebCustomizationService.h +++ b/src/web/WebCustomizationService.h @@ -22,13 +22,14 @@ #define EMSESP_CUSTOMIZATION_FILE "/config/emsespCustomization.json" // GET -#define DEVICES_SERVICE_PATH "/rest/devices" -#define DEVICE_ENTITIES_PATH "/rest/deviceEntities" +#define EMSESP_DEVICES_SERVICE_PATH "/rest/devices" +#define EMSESP_DEVICE_ENTITIES_PATH "/rest/deviceEntities" +#define EMSESP_GET_CUSTOMIZATIONS_PATH "/rest/getCustomizations" // POST -#define CUSTOMIZATION_ENTITIES_PATH "/rest/customizationEntities" -#define RESET_CUSTOMIZATION_SERVICE_PATH "/rest/resetCustomizations" -#define WRITE_DEVICE_NAME_PATH "/rest/writeDeviceName" +#define EMSESP_CUSTOMIZATION_ENTITIES_PATH "/rest/customizationEntities" +#define EMSESP_RESET_CUSTOMIZATION_SERVICE_PATH "/rest/resetCustomizations" +#define EMSESP_WRITE_DEVICE_NAME_PATH "/rest/writeDeviceName" namespace emsesp { @@ -99,6 +100,7 @@ class WebCustomizationService : public StatefulService { // GET void devices(AsyncWebServerRequest * request); void device_entities(AsyncWebServerRequest * request); + void getCustomizations(AsyncWebServerRequest * request); // POST void customization_entities(AsyncWebServerRequest * request, JsonVariant json); diff --git a/src/web/WebDataService.cpp b/src/web/WebDataService.cpp index 346330df4..118c6bf86 100644 --- a/src/web/WebDataService.cpp +++ b/src/web/WebDataService.cpp @@ -22,25 +22,25 @@ namespace emsesp { WebDataService::WebDataService(AsyncWebServer * server, SecurityManager * securityManager) { // write endpoints - server->on(WRITE_DEVICE_VALUE_SERVICE_PATH, + server->on(EMSESP_WRITE_DEVICE_VALUE_SERVICE_PATH, securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { write_device_value(request, json); }, AuthenticationPredicates::IS_ADMIN)); - server->on(WRITE_TEMPERATURE_SENSOR_SERVICE_PATH, + server->on(EMSESP_WRITE_TEMPERATURE_SENSOR_SERVICE_PATH, securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { write_temperature_sensor(request, json); }, AuthenticationPredicates::IS_ADMIN)); - server->on(WRITE_ANALOG_SENSOR_SERVICE_PATH, + server->on(EMSESP_WRITE_ANALOG_SENSOR_SERVICE_PATH, securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { write_analog_sensor(request, json); }, AuthenticationPredicates::IS_ADMIN)); // GET's - server->on(DEVICE_DATA_SERVICE_PATH, + server->on(EMSESP_DEVICE_DATA_SERVICE_PATH, HTTP_GET, securityManager->wrapRequest([this](AsyncWebServerRequest * request) { device_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED)); - server->on(CORE_DATA_SERVICE_PATH, + server->on(EMSESP_CORE_DATA_SERVICE_PATH, HTTP_GET, securityManager->wrapRequest([this](AsyncWebServerRequest * request) { core_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED)); - server->on(SENSOR_DATA_SERVICE_PATH, + server->on(EMSESP_SENSOR_DATA_SERVICE_PATH, HTTP_GET, securityManager->wrapRequest([this](AsyncWebServerRequest * request) { sensor_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED)); } @@ -341,7 +341,7 @@ void WebDataService::write_analog_sensor(AsyncWebServerRequest * request, JsonVa ok = EMSESP::analogsensor_.update(gpio, name, offset, factor, uom, type, deleted); } - AsyncWebServerResponse * response = request->beginResponse(ok ? 200 : 400); // bad request + AsyncWebServerResponse * response = request->beginResponse(ok ? 200 : 400); // ok or bad request request->send(response); } diff --git a/src/web/WebDataService.h b/src/web/WebDataService.h index 390cb80e9..f443eee91 100644 --- a/src/web/WebDataService.h +++ b/src/web/WebDataService.h @@ -20,14 +20,14 @@ #define WebDataService_h // GET -#define CORE_DATA_SERVICE_PATH "/rest/coreData" -#define DEVICE_DATA_SERVICE_PATH "/rest/deviceData" -#define SENSOR_DATA_SERVICE_PATH "/rest/sensorData" +#define EMSESP_CORE_DATA_SERVICE_PATH "/rest/coreData" +#define EMSESP_DEVICE_DATA_SERVICE_PATH "/rest/deviceData" +#define EMSESP_SENSOR_DATA_SERVICE_PATH "/rest/sensorData" // POST -#define WRITE_DEVICE_VALUE_SERVICE_PATH "/rest/writeDeviceValue" -#define WRITE_TEMPERATURE_SENSOR_SERVICE_PATH "/rest/writeTemperatureSensor" -#define WRITE_ANALOG_SENSOR_SERVICE_PATH "/rest/writeAnalogSensor" +#define EMSESP_WRITE_DEVICE_VALUE_SERVICE_PATH "/rest/writeDeviceValue" +#define EMSESP_WRITE_TEMPERATURE_SENSOR_SERVICE_PATH "/rest/writeTemperatureSensor" +#define EMSESP_WRITE_ANALOG_SENSOR_SERVICE_PATH "/rest/writeAnalogSensor" namespace emsesp { diff --git a/src/web/WebLogService.cpp b/src/web/WebLogService.cpp index eee6b85f0..84acf883f 100644 --- a/src/web/WebLogService.cpp +++ b/src/web/WebLogService.cpp @@ -21,12 +21,12 @@ namespace emsesp { WebLogService::WebLogService(AsyncWebServer * server, SecurityManager * securityManager) - : events_(EVENT_SOURCE_LOG_PATH) { + : events_(EMSESP_EVENT_SOURCE_LOG_PATH) { // get & set settings - server->on(LOG_SETTINGS_PATH, [this](AsyncWebServerRequest * request, JsonVariant json) { getSetValues(request, json); }); + server->on(EMSESP_LOG_SETTINGS_PATH, [this](AsyncWebServerRequest * request, JsonVariant json) { getSetValues(request, json); }); // for bring back the whole log - is a command, hence a POST - server->on(FETCH_LOG_PATH, HTTP_POST, [this](AsyncWebServerRequest * request) { fetchLog(request); }); + server->on(EMSESP_FETCH_LOG_PATH, HTTP_POST, [this](AsyncWebServerRequest * request) { fetchLog(request); }); // events_.setFilter(securityManager->filterRequest(AuthenticationPredicates::IS_ADMIN)); server->addHandler(&events_); diff --git a/src/web/WebLogService.h b/src/web/WebLogService.h index 68f77c3cf..23074ffd9 100644 --- a/src/web/WebLogService.h +++ b/src/web/WebLogService.h @@ -19,9 +19,9 @@ #ifndef WebLogService_h #define WebLogService_h -#define EVENT_SOURCE_LOG_PATH "/es/log" -#define FETCH_LOG_PATH "/rest/fetchLog" -#define LOG_SETTINGS_PATH "/rest/logSettings" +#define EMSESP_EVENT_SOURCE_LOG_PATH "/es/log" +#define EMSESP_FETCH_LOG_PATH "/rest/fetchLog" +#define EMSESP_LOG_SETTINGS_PATH "/rest/logSettings" namespace emsesp { diff --git a/src/web/WebSchedulerService.cpp b/src/web/WebSchedulerService.cpp index 988b996c9..43116d0cc 100644 --- a/src/web/WebSchedulerService.cpp +++ b/src/web/WebSchedulerService.cpp @@ -25,6 +25,9 @@ namespace emsesp { WebSchedulerService::WebSchedulerService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager) : _httpEndpoint(WebScheduler::read, WebScheduler::update, this, server, EMSESP_SCHEDULER_SERVICE_PATH, securityManager, AuthenticationPredicates::IS_AUTHENTICATED) , _fsPersistence(WebScheduler::read, WebScheduler::update, this, fs, EMSESP_SCHEDULER_FILE) { + server->on(EMSESP_GET_SCHEDULE_PATH, + HTTP_GET, + securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getSchedule(request); }, AuthenticationPredicates::IS_ADMIN)); } // load the settings when the service starts @@ -610,4 +613,17 @@ void WebSchedulerService::test() { } #endif +// return schedule entries in a json object +void WebSchedulerService::getSchedule(AsyncWebServerRequest * request) { + auto * response = new AsyncJsonResponse(false); + JsonObject root = response->getRoot(); + + root["type"] = "schedule"; + + System::extractSettings(EMSESP_SCHEDULER_FILE, "Schedule", root); + + response->setLength(); + request->send(response); +} + } // namespace emsesp diff --git a/src/web/WebSchedulerService.h b/src/web/WebSchedulerService.h index 30f9406c9..26a87bcfb 100644 --- a/src/web/WebSchedulerService.h +++ b/src/web/WebSchedulerService.h @@ -21,6 +21,7 @@ #define EMSESP_SCHEDULER_FILE "/config/emsespScheduler.json" #define EMSESP_SCHEDULER_SERVICE_PATH "/rest/schedule" // GET and POST +#define EMSESP_GET_SCHEDULE_PATH "/rest/getSchedule" // bit flags for the schedule items. Matches those in interface/src/app/main/SchedulerDialog.tsx // 0-127 (0->0x7F) is day schedule @@ -90,6 +91,8 @@ class WebSchedulerService : public StatefulService { HttpEndpoint _httpEndpoint; FSPersistence _fsPersistence; + void getSchedule(AsyncWebServerRequest * request); + std::list * scheduleItems_; // pointer to the list of schedule events bool ha_registered_ = false; std::deque cmd_changed_; diff --git a/src/web/WebSettingsService.cpp b/src/web/WebSettingsService.cpp index a3163bf72..5e27b3b88 100644 --- a/src/web/WebSettingsService.cpp +++ b/src/web/WebSettingsService.cpp @@ -29,6 +29,10 @@ WebSettingsService::WebSettingsService(AsyncWebServer * server, FS * fs, Securit HTTP_GET, securityManager->wrapRequest([this](AsyncWebServerRequest * request) { board_profile(request); }, AuthenticationPredicates::IS_AUTHENTICATED)); addUpdateHandler([this] { onUpdate(); }, false); + + server->on(EMSESP_GET_SETTINGS_PATH, + HTTP_GET, + securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getSettings(request); }, AuthenticationPredicates::IS_ADMIN)); } void WebSettings::read(WebSettings & settings, JsonObject root) { @@ -425,4 +429,25 @@ void WebSettingsService::board_profile(AsyncWebServerRequest * request) { request->send(response); } +// returns json with all system settings +void WebSettingsService::getSettings(AsyncWebServerRequest * request) { + auto * response = new AsyncJsonResponse(false); + JsonObject root = response->getRoot(); + + root["type"] = "settings"; + + JsonObject node = root["System"].to(); + node["version"] = EMSESP_APP_VERSION; + + System::extractSettings(NETWORK_SETTINGS_FILE, "Network", root); + System::extractSettings(AP_SETTINGS_FILE, "AP", root); + System::extractSettings(MQTT_SETTINGS_FILE, "MQTT", root); + System::extractSettings(NTP_SETTINGS_FILE, "NTP", root); + System::extractSettings(SECURITY_SETTINGS_FILE, "Security", root); + System::extractSettings(EMSESP_SETTINGS_FILE, "Settings", root); + + response->setLength(); + request->send(response); +} + } // namespace emsesp diff --git a/src/web/WebSettingsService.h b/src/web/WebSettingsService.h index 56830e8a7..7a67bdf94 100644 --- a/src/web/WebSettingsService.h +++ b/src/web/WebSettingsService.h @@ -22,8 +22,10 @@ #include "../default_settings.h" #define EMSESP_SETTINGS_FILE "/config/emsespSettings.json" + #define EMSESP_SETTINGS_SERVICE_PATH "/rest/settings" #define EMSESP_BOARD_PROFILE_SERVICE_PATH "/rest/boardProfile" +#define EMSESP_GET_SETTINGS_PATH "/rest/getSettings" namespace emsesp { @@ -134,6 +136,7 @@ class WebSettingsService : public StatefulService { FSPersistence _fsPersistence; void board_profile(AsyncWebServerRequest * request); + void getSettings(AsyncWebServerRequest * request); void onUpdate(); };