Refactor file handling API and add endpoint to delete files
This commit is contained in:
parent
aa9f36ee8f
commit
16901482d9
@ -18,9 +18,10 @@ enum WebApiError {
|
|||||||
DtuInvalidCmtFrequency,
|
DtuInvalidCmtFrequency,
|
||||||
DtuInvalidCmtCountry,
|
DtuInvalidCmtCountry,
|
||||||
|
|
||||||
ConfigBase = 3000,
|
FileBase = 3000,
|
||||||
ConfigNotDeleted,
|
FileNotDeleted,
|
||||||
ConfigSuccess,
|
FileSuccess,
|
||||||
|
FileDeleteSuccess,
|
||||||
|
|
||||||
InverterBase = 4000,
|
InverterBase = 4000,
|
||||||
InverterSerialZero,
|
InverterSerialZero,
|
||||||
|
|||||||
@ -11,6 +11,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
void onFileGet(AsyncWebServerRequest* request);
|
void onFileGet(AsyncWebServerRequest* request);
|
||||||
void onFileDelete(AsyncWebServerRequest* request);
|
void onFileDelete(AsyncWebServerRequest* request);
|
||||||
|
void onFileDeleteAll(AsyncWebServerRequest* request);
|
||||||
void onFileListGet(AsyncWebServerRequest* request);
|
void onFileListGet(AsyncWebServerRequest* request);
|
||||||
void onFileUploadFinish(AsyncWebServerRequest* request);
|
void onFileUploadFinish(AsyncWebServerRequest* request);
|
||||||
void onFileUpload(AsyncWebServerRequest* request, String filename, size_t index, uint8_t* data, size_t len, bool final);
|
void onFileUpload(AsyncWebServerRequest* request, String filename, size_t index, uint8_t* data, size_t len, bool final);
|
||||||
|
|||||||
@ -22,12 +22,40 @@ void WebApiFileClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
|||||||
|
|
||||||
server.on("/api/file/get", HTTP_GET, std::bind(&WebApiFileClass::onFileGet, this, _1));
|
server.on("/api/file/get", HTTP_GET, std::bind(&WebApiFileClass::onFileGet, this, _1));
|
||||||
server.on("/api/file/delete", HTTP_POST, std::bind(&WebApiFileClass::onFileDelete, this, _1));
|
server.on("/api/file/delete", HTTP_POST, std::bind(&WebApiFileClass::onFileDelete, this, _1));
|
||||||
|
server.on("/api/file/delete_all", HTTP_POST, std::bind(&WebApiFileClass::onFileDeleteAll, this, _1));
|
||||||
server.on("/api/file/list", HTTP_GET, std::bind(&WebApiFileClass::onFileListGet, this, _1));
|
server.on("/api/file/list", HTTP_GET, std::bind(&WebApiFileClass::onFileListGet, this, _1));
|
||||||
server.on("/api/file/upload", HTTP_POST,
|
server.on("/api/file/upload", HTTP_POST,
|
||||||
std::bind(&WebApiFileClass::onFileUploadFinish, this, _1),
|
std::bind(&WebApiFileClass::onFileUploadFinish, this, _1),
|
||||||
std::bind(&WebApiFileClass::onFileUpload, this, _1, _2, _3, _4, _5, _6));
|
std::bind(&WebApiFileClass::onFileUpload, this, _1, _2, _3, _4, _5, _6));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebApiFileClass::onFileListGet(AsyncWebServerRequest* request)
|
||||||
|
{
|
||||||
|
if (!WebApi.checkCredentials(request)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
AsyncJsonResponse* response = new AsyncJsonResponse();
|
||||||
|
auto& root = response->getRoot();
|
||||||
|
auto data = root.to<JsonArray>();
|
||||||
|
|
||||||
|
File rootfs = LittleFS.open("/");
|
||||||
|
File file = rootfs.openNextFile();
|
||||||
|
while (file) {
|
||||||
|
if (file.isDirectory()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
JsonObject obj = data.add<JsonObject>();
|
||||||
|
obj["name"] = String(file.name());
|
||||||
|
obj["size"] = file.size();
|
||||||
|
|
||||||
|
file = rootfs.openNextFile();
|
||||||
|
}
|
||||||
|
file.close();
|
||||||
|
|
||||||
|
WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
void WebApiFileClass::onFileGet(AsyncWebServerRequest* request)
|
void WebApiFileClass::onFileGet(AsyncWebServerRequest* request)
|
||||||
{
|
{
|
||||||
if (!WebApi.checkCredentials(request)) {
|
if (!WebApi.checkCredentials(request)) {
|
||||||
@ -62,6 +90,42 @@ void WebApiFileClass::onFileDelete(AsyncWebServerRequest* request)
|
|||||||
|
|
||||||
auto& retMsg = response->getRoot();
|
auto& retMsg = response->getRoot();
|
||||||
|
|
||||||
|
if (!(root["file"].is<String>())) {
|
||||||
|
retMsg["message"] = "Values are missing!";
|
||||||
|
retMsg["code"] = WebApiError::GenericValueMissing;
|
||||||
|
WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String name = "/" + root["file"].as<String>();
|
||||||
|
if (!LittleFS.exists(name)) {
|
||||||
|
request->send(404);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LittleFS.remove(name);
|
||||||
|
|
||||||
|
retMsg["type"] = "success";
|
||||||
|
retMsg["message"] = "File deleted";
|
||||||
|
retMsg["code"] = WebApiError::FileDeleteSuccess;
|
||||||
|
|
||||||
|
WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebApiFileClass::onFileDeleteAll(AsyncWebServerRequest* request)
|
||||||
|
{
|
||||||
|
if (!WebApi.checkCredentials(request)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
AsyncJsonResponse* response = new AsyncJsonResponse();
|
||||||
|
JsonDocument root;
|
||||||
|
if (!WebApi.parseRequestData(request, response, root)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto& retMsg = response->getRoot();
|
||||||
|
|
||||||
if (!(root["delete"].is<bool>())) {
|
if (!(root["delete"].is<bool>())) {
|
||||||
retMsg["message"] = "Values are missing!";
|
retMsg["message"] = "Values are missing!";
|
||||||
retMsg["code"] = WebApiError::GenericValueMissing;
|
retMsg["code"] = WebApiError::GenericValueMissing;
|
||||||
@ -71,14 +135,14 @@ void WebApiFileClass::onFileDelete(AsyncWebServerRequest* request)
|
|||||||
|
|
||||||
if (root["delete"].as<bool>() == false) {
|
if (root["delete"].as<bool>() == false) {
|
||||||
retMsg["message"] = "Not deleted anything!";
|
retMsg["message"] = "Not deleted anything!";
|
||||||
retMsg["code"] = WebApiError::ConfigNotDeleted;
|
retMsg["code"] = WebApiError::FileNotDeleted;
|
||||||
WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__);
|
WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
retMsg["type"] = "success";
|
retMsg["type"] = "success";
|
||||||
retMsg["message"] = "Configuration resettet. Rebooting now...";
|
retMsg["message"] = "Configuration resettet. Rebooting now...";
|
||||||
retMsg["code"] = WebApiError::ConfigSuccess;
|
retMsg["code"] = WebApiError::FileSuccess;
|
||||||
|
|
||||||
WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__);
|
WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__);
|
||||||
|
|
||||||
@ -86,48 +150,6 @@ void WebApiFileClass::onFileDelete(AsyncWebServerRequest* request)
|
|||||||
RestartHelper.triggerRestart();
|
RestartHelper.triggerRestart();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebApiFileClass::onFileListGet(AsyncWebServerRequest* request)
|
|
||||||
{
|
|
||||||
if (!WebApi.checkCredentials(request)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
AsyncJsonResponse* response = new AsyncJsonResponse();
|
|
||||||
auto& root = response->getRoot();
|
|
||||||
auto data = root["configs"].to<JsonArray>();
|
|
||||||
|
|
||||||
File rootfs = LittleFS.open("/");
|
|
||||||
File file = rootfs.openNextFile();
|
|
||||||
while (file) {
|
|
||||||
if (file.isDirectory()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
JsonObject obj = data.add<JsonObject>();
|
|
||||||
obj["name"] = String(file.name());
|
|
||||||
|
|
||||||
file = rootfs.openNextFile();
|
|
||||||
}
|
|
||||||
file.close();
|
|
||||||
|
|
||||||
WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__);
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebApiFileClass::onFileUploadFinish(AsyncWebServerRequest* request)
|
|
||||||
{
|
|
||||||
if (!WebApi.checkCredentials(request)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// the request handler is triggered after the upload has finished...
|
|
||||||
// create the response, add header, and send response
|
|
||||||
|
|
||||||
AsyncWebServerResponse* response = request->beginResponse(200, "text/plain", "OK");
|
|
||||||
response->addHeader("Connection", "close");
|
|
||||||
response->addHeader("Access-Control-Allow-Origin", "*");
|
|
||||||
request->send(response);
|
|
||||||
RestartHelper.triggerRestart();
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebApiFileClass::onFileUpload(AsyncWebServerRequest* request, String filename, size_t index, uint8_t* data, size_t len, bool final)
|
void WebApiFileClass::onFileUpload(AsyncWebServerRequest* request, String filename, size_t index, uint8_t* data, size_t len, bool final)
|
||||||
{
|
{
|
||||||
if (!WebApi.checkCredentials(request)) {
|
if (!WebApi.checkCredentials(request)) {
|
||||||
@ -154,3 +176,19 @@ void WebApiFileClass::onFileUpload(AsyncWebServerRequest* request, String filena
|
|||||||
request->_tempFile.close();
|
request->_tempFile.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebApiFileClass::onFileUploadFinish(AsyncWebServerRequest* request)
|
||||||
|
{
|
||||||
|
if (!WebApi.checkCredentials(request)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// the request handler is triggered after the upload has finished...
|
||||||
|
// create the response, add header, and send response
|
||||||
|
|
||||||
|
AsyncWebServerResponse* response = request->beginResponse(200, "text/plain", "OK");
|
||||||
|
response->addHeader("Connection", "close");
|
||||||
|
response->addHeader("Access-Control-Allow-Origin", "*");
|
||||||
|
request->send(response);
|
||||||
|
RestartHelper.triggerRestart();
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user