|
14 | 14 |
|
15 | 15 | #define LOG_SCOPE "APB::WebServer " |
16 | 16 |
|
| 17 | +#ifdef ALLOW_ALL_CORS |
| 18 | +#define ALLOW_CORS_VALUE true |
| 19 | +#else |
| 20 | +#define ALLOW_CORS_VALUE false |
| 21 | +#endif |
| 22 | + |
17 | 23 | using namespace std::placeholders; |
18 | 24 | using namespace GuLinux; |
19 | 25 |
|
20 | | -APB::WebServer::WebServer(Scheduler &scheduler) : server(80), |
| 26 | +APB::WebServer::WebServer(Scheduler &scheduler) : AsyncWebServerBase{}, |
21 | 27 | events("/api/events"), |
22 | 28 | scheduler(scheduler) |
23 | 29 | { |
24 | 30 | } |
25 | 31 |
|
26 | 32 |
|
| 33 | + |
27 | 34 | void APB::WebServer::setup() { |
28 | 35 | Log.traceln(LOG_SCOPE "Setup"); |
29 | | - ElegantOTA.begin(&server); |
30 | | - #ifdef ALLOW_ALL_CORS |
31 | | - #warning "Adding Access-Control-Allow-Origin:* header to all requests (CORS)" |
32 | | - DefaultHeaders::Instance().addHeader("Access-Control-Allow-Origin", "*"); |
33 | | - #endif |
34 | | - ElegantOTA.onStart([this](){ Log.infoln(LOG_SCOPE "OTA Started"); }); |
35 | | - ElegantOTA.onProgress([this](size_t current, size_t total){ |
36 | | - Log.infoln(LOG_SCOPE "OTA progress: %d%%(%d/%d)", int(current * 100.0 /total), current, total); |
37 | | - }); |
38 | | - ElegantOTA.onEnd([this](bool success){ Log.infoln(LOG_SCOPE "OTA Finished, success=%d", success); }); |
39 | | - Log.traceln(LOG_SCOPE "ElegantOTA setup"); |
| 36 | + |
| 37 | + setupBase(true, ALLOW_CORS_VALUE); |
| 38 | + |
40 | 39 |
|
41 | 40 | onJsonRequest("/api/config/accessPoint", std::bind(&WiFiManager::onConfigAccessPoint, &WiFiManager::Instance, _1, _2), HTTP_POST | HTTP_DELETE); |
42 | 41 | onJsonRequest("/api/config/station", std::bind(&WiFiManager::onConfigStation, &WiFiManager::Instance, _1, _2), HTTP_POST | HTTP_DELETE); |
43 | 42 | onJsonRequest("/api/config/statusLedDuty", std::bind(&WebServer::onConfigStatusLedDuty, this, _1, _2), HTTP_POST); |
44 | 43 | onJsonRequest("/api/config/powerSourceType", std::bind(&WebServer::onConfigPowerSourceType, this, _1, _2), HTTP_POST); |
45 | | - server.on("/api/metrics", HTTP_GET, std::bind(&WebServer::onGetMetrics, this, _1)); |
46 | | - server.on("/api/config/write", HTTP_POST, std::bind(&WebServer::onPostWriteConfig, this, _1)); |
47 | | - server.on("/api/config", HTTP_GET, std::bind(&WebServer::onGetConfig, this, _1)); |
48 | | - server.on("/api/info", HTTP_GET, std::bind(&WebServer::onGetESPInfo, this, _1)); |
49 | | - server.on("/api/history", HTTP_GET, std::bind(&WebServer::onGetHistory, this, _1)); |
50 | | - server.on("/api/power", HTTP_GET, std::bind(&WebServer::onGetPower, this, _1)); |
51 | | - server.on("/api/wifi/connect", HTTP_POST, std::bind(&WiFiManager::onPostReconnectWiFi, &WiFiManager::Instance, _1)); |
| 44 | + webserver.on("/api/metrics", HTTP_GET, std::bind(&WebServer::onGetMetrics, this, _1)); |
| 45 | + webserver.on("/api/config/write", HTTP_POST, std::bind(&WebServer::onPostWriteConfig, this, _1)); |
| 46 | + webserver.on("/api/config", HTTP_GET, std::bind(&WebServer::onGetConfig, this, _1)); |
| 47 | + webserver.on("/api/info", HTTP_GET, std::bind(&WebServer::onGetESPInfo, this, _1)); |
| 48 | + webserver.on("/api/history", HTTP_GET, std::bind(&WebServer::onGetHistory, this, _1)); |
| 49 | + webserver.on("/api/power", HTTP_GET, std::bind(&WebServer::onGetPower, this, _1)); |
| 50 | + webserver.on("/api/wifi/connect", HTTP_POST, std::bind(&WiFiManager::onPostReconnectWiFi, &WiFiManager::Instance, _1)); |
52 | 51 | #ifdef CONFIGURATION_FOR_PROTOTYPE |
53 | 52 | server.on("/api/wifi", HTTP_DELETE, [this](AsyncWebServerRequest *request){ |
54 | 53 | new Task(1'000, TASK_ONCE, [](){WiFi.disconnect();}, &scheduler, true); |
55 | 54 | JsonResponse response(request); |
56 | 55 | response.root()["status"] = "Dropping WiFi"; |
57 | 56 | }); |
58 | 57 | #endif |
59 | | - server.on("/api/wifi", HTTP_GET, std::bind(&WiFiManager::onGetWiFiStatus, &WiFiManager::Instance, _1)); |
60 | | - server.on("/api/restart", HTTP_POST, std::bind(&WebServer::onRestart, this, _1)); |
| 58 | + webserver.on("/api/wifi", HTTP_GET, std::bind(&WiFiManager::onGetWiFiStatus, &WiFiManager::Instance, _1)); |
| 59 | + webserver.on("/api/restart", HTTP_POST, std::bind(&WebServer::onRestart, this, _1)); |
61 | 60 |
|
62 | | - server.on("/api/status", HTTP_GET, std::bind(&WebServer::onGetStatus, this, _1)); |
63 | | - server.on("/api/ambient", HTTP_GET, std::bind(&WebServer::onGetAmbient, this, _1)); |
64 | | - server.on("/api/heaters", HTTP_GET, std::bind(&WebServer::onGetHeaters, this, _1)); |
65 | | - server.serveStatic("/", LittleFS, "/web/").setDefaultFile("index.html"); |
66 | | - server.serveStatic("/static", LittleFS, "/web/static").setDefaultFile("index.html"); |
67 | | - server.addHandler(&events); |
68 | | - server.onNotFound(std::bind(&APB::WebServer::onNotFound, this, _1)); |
| 61 | + webserver.on("/api/status", HTTP_GET, std::bind(&WebServer::onGetStatus, this, _1)); |
| 62 | + webserver.on("/api/ambient", HTTP_GET, std::bind(&WebServer::onGetAmbient, this, _1)); |
| 63 | + webserver.on("/api/heaters", HTTP_GET, std::bind(&WebServer::onGetHeaters, this, _1)); |
| 64 | + webserver.serveStatic("/", LittleFS, "/web/").setDefaultFile("index.html"); |
| 65 | + webserver.serveStatic("/static", LittleFS, "/web/static").setDefaultFile("index.html"); |
| 66 | + webserver.addHandler(&events); |
| 67 | + webserver.onNotFound(std::bind(&APB::WebServer::onNotFound, this, _1)); |
69 | 68 | onJsonRequest("/api/heater", std::bind(&APB::WebServer::onPostSetHeater, this, _1, _2), HTTP_POST); |
70 | 69 |
|
71 | 70 | Log.infoln(LOG_SCOPE "Setup finished"); |
72 | | - server.begin(); |
| 71 | + webserver.begin(); |
73 | 72 |
|
74 | 73 | new Task(1000, TASK_FOREVER, [this](){ |
75 | 74 | eventsDocument.clear(); |
@@ -370,8 +369,4 @@ void APB::WebServer::onConfigPowerSourceType(AsyncWebServerRequest *request, Jso |
370 | 369 | response.root()["powerSourceType"] = Settings::PowerSourcesNames.at(Settings::Instance.powerSource()); |
371 | 370 | } |
372 | 371 |
|
373 | | -void APB::WebServer::onJsonRequest(const char *path, ArJsonRequestHandlerFunction f, WebRequestMethodComposite method) { |
374 | | - auto handler = new AsyncCallbackJsonWebHandler(path, f); |
375 | | - handler->setMethod(method); |
376 | | - server.addHandler(handler); |
377 | | -} |
| 372 | + |
0 commit comments