From 06837320f79750667a1f1b498a0321be8bffb78c Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Fri, 15 Apr 2022 13:14:43 +0200 Subject: [PATCH] WIP: Extended WebAPI to handle network config --- include/WebApi.h | 3 +++ src/WebApi.cpp | 66 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/include/WebApi.h b/include/WebApi.h index f7204b1..08222ad 100644 --- a/include/WebApi.h +++ b/include/WebApi.h @@ -18,6 +18,9 @@ private: void onNetworkStatus(AsyncWebServerRequest* request); void onSystemStatus(AsyncWebServerRequest* request); + + void onNetworkAdminGet(AsyncWebServerRequest* request); + void onNetworkAdminPost(AsyncWebServerRequest* request); }; extern WebApiClass WebApi; \ No newline at end of file diff --git a/src/WebApi.cpp b/src/WebApi.cpp index 00d7b64..db62bdb 100644 --- a/src/WebApi.cpp +++ b/src/WebApi.cpp @@ -23,9 +23,12 @@ void WebApiClass::init() _ws.onEvent(std::bind(&WebApiClass::onWebsocketEvent, this, _1, _2, _3, _4, _5, _6)); - _server.on("/api/network/status", HTTP_GET, std::bind(&WebApiClass::onNetworkStatus, this, _1)); _server.on("/api/system/status", HTTP_GET, std::bind(&WebApiClass::onSystemStatus, this, _1)); + _server.on("/api/network/status", HTTP_GET, std::bind(&WebApiClass::onNetworkStatus, this, _1)); + _server.on("/api/network/config", HTTP_GET, std::bind(&WebApiClass::onNetworkAdminGet, this, _1)); + _server.on("/api/network/config", HTTP_POST, std::bind(&WebApiClass::onNetworkAdminPost, this, _1)); + _server.serveStatic("/", LITTLEFS, "/", "max-age=86400").setDefaultFile("index.html"); _server.onNotFound(std::bind(&WebApiClass::onNotFound, this, _1)); _server.begin(); @@ -112,4 +115,65 @@ void WebApiClass::onSystemStatus(AsyncWebServerRequest* request) request->send(response); } +void WebApiClass::onNetworkAdminGet(AsyncWebServerRequest* request) +{ + AsyncJsonResponse* response = new AsyncJsonResponse(); + JsonObject root = response->getRoot(); + CONFIG_T& config = Configuration.get(); + + root[F("hostname")] = config.WiFi_Hostname; + root[F("dhcp")] = config.WiFi_Dhcp; + root[F("ipaddress")] = IPAddress( + config.WiFi_Ip[0], + config.WiFi_Ip[1], + config.WiFi_Ip[2], + config.WiFi_Ip[3]) + .toString(); + root[F("netmask")] = IPAddress( + config.WiFi_Netmask[0], + config.WiFi_Netmask[1], + config.WiFi_Netmask[2], + config.WiFi_Netmask[3]) + .toString(); + root[F("gateway")] = IPAddress( + config.WiFi_Gateway[0], + config.WiFi_Gateway[1], + config.WiFi_Gateway[2], + config.WiFi_Gateway[3]) + .toString(); + root[F("dns1")] = IPAddress( + config.WiFi_Dns1[0], + config.WiFi_Dns1[1], + config.WiFi_Dns1[2], + config.WiFi_Dns1[3]) + .toString(); + root[F("dns2")] = IPAddress( + config.WiFi_Dns2[0], + config.WiFi_Dns2[1], + config.WiFi_Dns2[2], + config.WiFi_Dns2[3]) + .toString(); + root[F("ssid")] = config.WiFi_Ssid; + root[F("password")] = config.WiFi_Password; + + response->setLength(); + request->send(response); +} + +void WebApiClass::onNetworkAdminPost(AsyncWebServerRequest* request) +{ + AsyncJsonResponse* response = new AsyncJsonResponse(); + JsonObject retMsg = response->getRoot(); + retMsg[F("type")] = F("warning"); + + if (!request->hasParam("data", true)) { + retMsg[F("message")] = F("No values found!"); + response->setLength(); + request->send(response); + return; + } + + String json = request->getParam("data", true)->value(); +} + WebApiClass WebApi; \ No newline at end of file