diff --git a/esp32/include/filesystem.h b/esp32/include/filesystem.h index 6a66921..4acb0b7 100644 --- a/esp32/include/filesystem.h +++ b/esp32/include/filesystem.h @@ -25,6 +25,7 @@ esp_err_t uploadFile(PsychicRequest *request, const std::string &filename, uint6 bool last); esp_err_t getFiles(PsychicRequest *request); +esp_err_t getConfigFile(PsychicRequest *request); esp_err_t handleDelete(PsychicRequest *request, JsonVariant &json); esp_err_t handleEdit(PsychicRequest *request, JsonVariant &json); diff --git a/esp32/src/filesystem.cpp b/esp32/src/filesystem.cpp index ef1df0c..42626aa 100644 --- a/esp32/src/filesystem.cpp +++ b/esp32/src/filesystem.cpp @@ -22,6 +22,20 @@ static Initializer initializer; esp_err_t getFiles(PsychicRequest *request) { return request->reply(200, "application/json", listFiles("/").c_str()); } +esp_err_t getConfigFile(PsychicRequest *request) { + String path = "/config" + request->uri().substring(11); + if (!ESP_FS.exists(path)) { + return request->reply(404, "text/plain", "File not found"); + } + File file = ESP_FS.open(path, "r"); + if (!file) { + return request->reply(500, "text/plain", "Failed to open file"); + } + String content = file.readString(); + file.close(); + return request->reply(200, "application/json", content.c_str()); +} + esp_err_t handleDelete(PsychicRequest *request, JsonVariant &json) { if (json.is()) { const char *filename = json["file"].as(); diff --git a/esp32/src/main.cpp b/esp32/src/main.cpp index 408e842..ada3df8 100644 --- a/esp32/src/main.cpp +++ b/esp32/src/main.cpp @@ -42,7 +42,7 @@ WiFiService wifiService; APService apService; void setupServer() { - server.config.max_uri_handlers = 28 + WWW_ASSETS_COUNT; + server.config.max_uri_handlers = 32 + WWW_ASSETS_COUNT; server.maxUploadSize = 1000000; // 1 MB; server.listen(80); server.serveStatic("/api/config/", ESP_FS, "/config/"); @@ -112,6 +112,16 @@ void setupServer() { [&](PsychicRequest *request, JsonVariant &json) { return mdnsService.queryServices(request, json); }); #endif + + // Filesystem + server.on("/api/files", HTTP_GET, [&](PsychicRequest *request) { return FileSystem::getFiles(request); }); + server.on("/api/files", HTTP_POST, FileSystem::uploadHandler); + server.on("/api/files/delete", HTTP_POST, + [&](PsychicRequest *request, JsonVariant &json) { return FileSystem::handleDelete(request, json); }); + server.on("/api/files/edit", HTTP_POST, + [&](PsychicRequest *request, JsonVariant &json) { return FileSystem::handleEdit(request, json); }); + server.on("/api/files/mkdir", HTTP_POST, + [&](PsychicRequest *request, JsonVariant &json) { return FileSystem::mkdir(request, json); }); #if EMBED_WEBAPP mountStaticAssets(server); #endif