Fork of the excellent esp8266-react - https://github.com/rjwats/esp8266-react
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
3.9 KiB

  1. #include <ESP8266React.h>
  2. ESP8266React::ESP8266React(AsyncWebServer* server) :
  3. _featureService(server),
  4. _securitySettingsService(server, &ESPFS),
  5. _wifiSettingsService(server, &ESPFS, &_securitySettingsService),
  6. _wifiScanner(server, &_securitySettingsService),
  7. _wifiStatus(server, &_securitySettingsService),
  8. _apSettingsService(server, &ESPFS, &_securitySettingsService),
  9. _apStatus(server, &_securitySettingsService, &_apSettingsService),
  10. #if FT_ENABLED(FT_NTP)
  11. _ntpSettingsService(server, &ESPFS, &_securitySettingsService),
  12. _ntpStatus(server, &_securitySettingsService),
  13. #endif
  14. #if FT_ENABLED(FT_OTA)
  15. _otaSettingsService(server, &ESPFS, &_securitySettingsService),
  16. #endif
  17. #if FT_ENABLED(FT_UPLOAD_FIRMWARE)
  18. _uploadFirmwareService(server, &_securitySettingsService),
  19. #endif
  20. #if FT_ENABLED(FT_MQTT)
  21. _mqttSettingsService(server, &ESPFS, &_securitySettingsService),
  22. _mqttStatus(server, &_mqttSettingsService, &_securitySettingsService),
  23. #endif
  24. #if FT_ENABLED(FT_SECURITY)
  25. _authenticationService(server, &_securitySettingsService),
  26. #endif
  27. _restartService(server, &_securitySettingsService),
  28. _factoryResetService(server, &ESPFS, &_securitySettingsService),
  29. _systemStatus(server, &_securitySettingsService) {
  30. #ifdef PROGMEM_WWW
  31. // Serve static resources from PROGMEM
  32. WWWData::registerRoutes(
  33. [server, this](const String& uri, const String& contentType, const uint8_t* content, size_t len) {
  34. ArRequestHandlerFunction requestHandler = [contentType, content, len](AsyncWebServerRequest* request) {
  35. AsyncWebServerResponse* response = request->beginResponse_P(200, contentType, content, len);
  36. response->addHeader("Content-Encoding", "gzip");
  37. request->send(response);
  38. };
  39. server->on(uri.c_str(), HTTP_GET, requestHandler);
  40. // Serving non matching get requests with "/index.html"
  41. // OPTIONS get a straight up 200 response
  42. if (uri.equals("/index.html")) {
  43. server->onNotFound([requestHandler](AsyncWebServerRequest* request) {
  44. if (request->method() == HTTP_GET) {
  45. requestHandler(request);
  46. } else if (request->method() == HTTP_OPTIONS) {
  47. request->send(200);
  48. } else {
  49. request->send(404);
  50. }
  51. });
  52. }
  53. });
  54. #else
  55. // Serve static resources from /www/
  56. server->serveStatic("/js/", *fs, "/www/js/");
  57. server->serveStatic("/css/", *fs, "/www/css/");
  58. server->serveStatic("/fonts/", *fs, "/www/fonts/");
  59. server->serveStatic("/app/", *fs, "/www/app/");
  60. server->serveStatic("/favicon.ico", *fs, "/www/favicon.ico");
  61. // Serving all other get requests with "/www/index.htm"
  62. // OPTIONS get a straight up 200 response
  63. server->onNotFound([](AsyncWebServerRequest* request) {
  64. if (request->method() == HTTP_GET) {
  65. request->send(ESPFS, "/www/index.html");
  66. } else if (request->method() == HTTP_OPTIONS) {
  67. request->send(200);
  68. } else {
  69. request->send(404);
  70. }
  71. });
  72. #endif
  73. // Disable CORS if required
  74. #if defined(ENABLE_CORS)
  75. DefaultHeaders::Instance().addHeader("Access-Control-Allow-Origin", CORS_ORIGIN);
  76. DefaultHeaders::Instance().addHeader("Access-Control-Allow-Headers", "Accept, Content-Type, Authorization");
  77. DefaultHeaders::Instance().addHeader("Access-Control-Allow-Credentials", "true");
  78. #endif
  79. }
  80. void ESP8266React::begin() {
  81. #ifdef ESP32
  82. ESPFS.begin(true);
  83. #elif defined(ESP8266)
  84. ESPFS.begin();
  85. #endif
  86. _wifiSettingsService.begin();
  87. _apSettingsService.begin();
  88. #if FT_ENABLED(FT_NTP)
  89. _ntpSettingsService.begin();
  90. #endif
  91. #if FT_ENABLED(FT_OTA)
  92. _otaSettingsService.begin();
  93. #endif
  94. #if FT_ENABLED(FT_MQTT)
  95. _mqttSettingsService.begin();
  96. #endif
  97. #if FT_ENABLED(FT_SECURITY)
  98. _securitySettingsService.begin();
  99. #endif
  100. }
  101. void ESP8266React::loop() {
  102. _wifiSettingsService.loop();
  103. _apSettingsService.loop();
  104. #if FT_ENABLED(FT_OTA)
  105. _otaSettingsService.loop();
  106. #endif
  107. #if FT_ENABLED(FT_MQTT)
  108. _mqttSettingsService.loop();
  109. #endif
  110. }