diff --git a/file_controller.cc b/file_controller.cc index a67ba34..5db17ac 100644 --- a/file_controller.cc +++ b/file_controller.cc @@ -24,7 +24,7 @@ void add_lock(const HttpRequestPtr &req, std::function &&callback) +void commondsCtrl(const HttpRequestPtr &req, std::function &&callback) { - auto res = HttpResponse::newHttpResponse(); - if (jwtVerify(req)) + + std::cout << "commondsCtrl" << std::endl; + enum Command { + tree, + cp, + mv, + rm, + mkdir, + touch, + cat +}command; + char *pathvar; + pathvar = getenv("PWD"); + + command = static_cast(stoi(req->getJsonObject()->get("command","").asString())); + std::string params1 = req->getJsonObject()->get("params","")[0].asString(); + std::string params2 = req->getJsonObject()->get("params","")[1].asString(); + std::string result; + switch (command) { - char *pathvar; - pathvar = getenv("PWD"); - std::string result = shell_commons(("cd " + std::string(pathvar) + "/.. " + "&&" + "tree -J root").c_str()); - res->addHeader("Access-Control-Allow-Origin", "*"); - res->setBody(result); - callback(res); - } - else{ - res->setBody("No Authorization"); + case tree: + result = shell_commons(("cd " + std::string(pathvar) + "/.. " + "&&" + "tree -J root").c_str()); + break; + case cp: + result = shell_commons(("cp -v " + std::string(pathvar) + "/../root/" + params1 + " " + std::string(pathvar) + "/../root/" + params2).c_str()); + if(result!="") + result = "success"; + else + result = "error: in cp" ; + break; + case mv: + result = shell_commons(("mv -v " + std::string(pathvar) + "/../root/" + params1 + " " + std::string(pathvar) + "/../root/" + params2).c_str()); + if(result!="") + result = "success"; + else + result = "error: in mv" ; + break; + case rm: + if(params1.find("..") != std::string::npos){ + result = "error:result in wrong directory"; + break; + } + result = shell_commons(("rm -rf -v " + std::string(pathvar) + "/../root/" + params1).c_str()); + if(result!="") + result = "success"; + else + result = "error: in rm" ; + break; + case mkdir: + result = shell_commons(("mkdir " + std::string(pathvar) + "/../root/" + params1).c_str()); + if(result!="") + result = "success"; + else + result = "error: in mkdir" ; + break; + case touch: + if("" == shell_commons(("ls -l " + std::string(pathvar) + "/../root/" + params1 + " grep ^- ").c_str())) + { + result = shell_commons(("touch " + std::string(pathvar) + "/../root/" + params1).c_str()); + result = "success"; + } + + else + { + result = "error:file already exists"; + } + break; + case cat: + result = shell_commons(("cat " + std::string(pathvar) + "/../root/" + params1).c_str()); + break; + default: + result = "error:command not found"; + break; } -} - -void catFile(const HttpRequestPtr &req, std::function &&callback) -{ - auto res = HttpResponse::newHttpResponse(); - if (jwtVerify(req)) - { - char *pathvar; - pathvar = getenv("PWD"); - std::string path = req->getParameter("path"); - std::string result = shell_commons(("cat " + std::string(pathvar) + "/../root/" + path).c_str()); + res->addHeader("Access-Control-Allow-Origin", "*"); + res->setBody(result); + callback(res); - res->addHeader("Access-Control-Allow-Origin", "*"); - res->setBody(result); - - callback(res); - } - else - { - res->setBody("No Authorization"); - } } +// void genTree(const HttpRequestPtr &req, std::function &&callback) +// { +// char *pathvar; +// pathvar = getenv("PWD"); +// std::string result = shell_commons(("cd " + std::string(pathvar) + "/.. " + "&&" + "tree -J root").c_str()); +// auto res = HttpResponse::newHttpResponse(); +// res->addHeader("Access-Control-Allow-Origin", "*"); +// res->setBody(result); +// callback(res); +// } +// void catFile(const HttpRequestPtr &req, std::function &&callback) +// { +// char *pathvar; +// pathvar = getenv("PWD"); +// std::string path = req->getParameter("path"); +// std::string result = shell_commons(("cat " + std::string(pathvar) + "/../root/" + path).c_str()); +// auto res = HttpResponse::newHttpResponse(); +// res->addHeader("Access-Control-Allow-Origin", "*"); +// res->setBody(result); +// callback(res); +// } + void saveFile(const HttpRequestPtr &req, std::function &&callback) { @@ -155,6 +221,7 @@ void getPicture(const HttpRequestPtr &req, std::functiongetParameter("filename"); auto resp = HttpResponse::newFileResponse("./uploads/" + filename); + if (jwtVerify(req)) { resp->addHeader("Access-Control-Allow-Origin", "*"); @@ -164,4 +231,5 @@ void getPicture(const HttpRequestPtr &req, std::functionsetBody("No Authorization"); } -} \ No newline at end of file +} + diff --git a/file_controller.h b/file_controller.h index 3d9435b..35f7129 100644 --- a/file_controller.h +++ b/file_controller.h @@ -4,11 +4,15 @@ #include using namespace drogon; std::string shell_commons(const char *cmd); -void genTree(const HttpRequestPtr &req, std::function &&callback); -void catFile(const HttpRequestPtr &req, std::function &&callback); +// void genTree(const HttpRequestPtr &req, std::function &&callback); +// void catFile(const HttpRequestPtr &req, std::function &&callback); void saveFile(const HttpRequestPtr &req, std::function &&callback); void imageUpload(const HttpRequestPtr &req, std::function &&callback); void getPicture(const HttpRequestPtr &req, std::function &&callback); + +void commondsCtrl(const HttpRequestPtr &req, std::function &&callback); + void add_lock(const HttpRequestPtr &req, std::function &&callback); + // std::string #endif diff --git a/main.cc b/main.cc index 83d6ab2..a540b1a 100644 --- a/main.cc +++ b/main.cc @@ -25,10 +25,13 @@ int main() { friend_operation(req, std::move(callback)); }); drogon::app().registerHandler("/api/info", [](const HttpRequestPtr &req, std::function &&callback) { info(req, std::move(callback)); }); - drogon::app().registerHandler("/api/file/tree", [](const HttpRequestPtr &req, std::function &&callback) - { genTree(req, std::move(callback)); }); - drogon::app().registerHandler("/api/file/cat", [](const HttpRequestPtr &req, std::function &&callback) - { catFile(req, std::move(callback)); }); + + + // drogon::app().registerHandler("/api/file/tree", [](const HttpRequestPtr &req, std::function &&callback) + // { genTree(req, std::move(callback)); }); + // drogon::app().registerHandler("/api/file/cat", [](const HttpRequestPtr &req, std::function &&callback) + // { catFile(req, std::move(callback)); }); + drogon::app().registerHandler("/api/file/save", [](const HttpRequestPtr &req, std::function &&callback) { saveFile(req, std::move(callback)); }); drogon::app().registerHandler("/api/avatar", [](const HttpRequestPtr &req, std::function &&callback) @@ -38,8 +41,13 @@ int main() drogon::app().registerHandler("/api/file/get", [](const HttpRequestPtr &req, std::function &&callback) { getPicture(req, std::move(callback)); }, {Get}); + + drogon::app().registerHandler("/api/file/commonds", [](const HttpRequestPtr &req, std::function &&callback) + { commondsCtrl(req, std::move(callback)); }); + drogon::app().registerHandler("/api/file/lock", [](const HttpRequestPtr &req, std::function &&callback) {add_lock(req, std::move(callback));}); + drogon::app().setUploadPath("./uploads").run(); return 0; }