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.

85 lines
3.4 KiB

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