Make /api/files/... to proto endpoints

This commit is contained in:
Niklas Jensen
2026-01-25 19:54:59 +01:00
committed by nikguin04
parent bd012046f2
commit f9a99ce013
5 changed files with 58 additions and 34 deletions
+23 -14
View File
@@ -124,15 +124,17 @@ esp_err_t handleDelete(httpd_req_t *request, const api_FileDeleteRequest &req) {
}
}
esp_err_t handleEdit(httpd_req_t *request, JsonVariant &json) {
if (json.is<JsonObject>()) {
const char *filename = json["file"].as<const char *>();
const char *content = json["content"].as<const char *>();
ESP_LOGI(TAG, "Editing file: %s", filename);
return editFile(filename, content) ? WebServer::sendOk(request)
: WebServer::sendError(request, 500, "Edit failed");
esp_err_t handleEdit(httpd_req_t *request, const api_FileEditRequest &req) {
ESP_LOGI(TAG, "Editing file: %s", req.path);
api_Response res = api_Response_init_zero;
if (editFile(req.path, req.content->bytes, req.content->size)) {
res.status_code = 200;
res.which_payload = api_Response_empty_message_tag;
return WebServer::sendProto(request, 200, res, api_Response_fields);
} else {
return WebServer::sendError(request, 500, "Edit failed");
}
return WebServer::sendError(request, 400, "Invalid request");
}
bool deleteFile(const char *filename) { return ESP_FS.remove(filename); }
@@ -167,19 +169,26 @@ std::string listFiles(const std::string &directory, bool isRoot) {
return output;
}
bool editFile(const char *filename, const char *content) {
bool editFile(const char *filename, const uint8_t *content, size_t size) {
File file = ESP_FS.open(filename, FILE_WRITE);
if (!file) return false;
file.print(content);
file.write(content, size);
file.close();
return true;
}
esp_err_t mkdir(httpd_req_t *request, JsonVariant &json) {
const char *path = json["path"].as<const char *>();
ESP_LOGI(TAG, "Creating directory: %s", path);
return ESP_FS.mkdir(path) ? WebServer::sendOk(request) : WebServer::sendError(request, 500, "mkdir failed");
esp_err_t mkdir(httpd_req_t *request, const api_FileMkdirRequest &req) {
ESP_LOGI(TAG, "Creating directory: %s", req.path);
api_Response res = api_Response_init_zero;
if (ESP_FS.mkdir(req.path)) {
res.status_code = 200;
res.which_payload = api_Response_empty_message_tag;
return WebServer::sendProto(request, 200, res, api_Response_fields);
} else {
return WebServer::sendError(request, 500, "mkdir failed");
}
}
} // namespace FileSystem
+2 -4
View File
@@ -106,10 +106,8 @@ void setupServer() {
server.on("/api/config/*", HTTP_GET, [](httpd_req_t *request) { return FileSystem::getConfigFile(request); });
server.on("/api/files", HTTP_GET, [&](httpd_req_t *request) { return FileSystem::getFilesProto(request); });
PROTO_ENDPOINT(server, "/api/files/delete", file_delete_request, FileSystem::handleDelete);
server.on("/api/files/edit", HTTP_POST,
[&](httpd_req_t *request, JsonVariant &json) { return FileSystem::handleEdit(request, json); });
server.on("/api/files/mkdir", HTTP_POST,
[&](httpd_req_t *request, JsonVariant &json) { return FileSystem::mkdir(request, json); });
PROTO_ENDPOINT(server, "/api/files/edit", file_edit_request, FileSystem::handleEdit);
PROTO_ENDPOINT(server, "/api/files/mkdir", file_mkdir_request, FileSystem::mkdir);
#if EMBED_WEBAPP
mountStaticAssets(server);
#endif