Skip to content

Commit 50daa12

Browse files
committed
😄 Combining multiple functions
1 parent a314773 commit 50daa12

File tree

3 files changed

+107
-22
lines changed

3 files changed

+107
-22
lines changed

file_controller.cc

Lines changed: 96 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
std::string shell_commons(const char *cmd)
1212
{
13-
char buffer[128];
13+
char buffer[1280];
1414
std::string result = "";
1515
FILE *pipe = popen(cmd, "r");
1616
if (!pipe)
@@ -31,27 +31,108 @@ std::string shell_commons(const char *cmd)
3131
return result;
3232
}
3333

34-
void genTree(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
34+
void commondsCtrl(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
3535
{
36+
std::cout << "commondsCtrl" << std::endl;
37+
enum Command {
38+
tree,
39+
cp,
40+
mv,
41+
rm,
42+
mkdir,
43+
touch,
44+
cat
45+
}command;
3646
char *pathvar;
3747
pathvar = getenv("PWD");
38-
std::string result = shell_commons(("cd " + std::string(pathvar) + "/.. " + "&&" + "tree -J root").c_str());
39-
auto res = HttpResponse::newHttpResponse();
40-
res->addHeader("Access-Control-Allow-Origin", "*");
41-
res->setBody(result);
42-
callback(res);
43-
}
44-
void catFile(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
45-
{
46-
char *pathvar;
47-
pathvar = getenv("PWD");
48-
std::string path = req->getParameter("path");
49-
std::string result = shell_commons(("cat " + std::string(pathvar) + "/../root/" + path).c_str());
48+
49+
command = static_cast<Command>(stoi(req->getJsonObject()->get("command","").asString()));
50+
std::string params1 = req->getJsonObject()->get("params","")[0].asString();
51+
std::string params2 = req->getJsonObject()->get("params","")[1].asString();
52+
std::string result;
53+
switch (command)
54+
{
55+
case tree:
56+
result = shell_commons(("cd " + std::string(pathvar) + "/.. " + "&&" + "tree -J root").c_str());
57+
break;
58+
case cp:
59+
result = shell_commons(("cp -v " + std::string(pathvar) + "/../root/" + params1 + " " + std::string(pathvar) + "/../root/" + params2).c_str());
60+
if(result!="")
61+
result = "success";
62+
else
63+
result = "error: in cp" ;
64+
break;
65+
case mv:
66+
result = shell_commons(("mv -v " + std::string(pathvar) + "/../root/" + params1 + " " + std::string(pathvar) + "/../root/" + params2).c_str());
67+
if(result!="")
68+
result = "success";
69+
else
70+
result = "error: in mv" ;
71+
break;
72+
case rm:
73+
if(params1.find("..") != std::string::npos){
74+
result = "error:result in wrong directory";
75+
break;
76+
}
77+
result = shell_commons(("rm -rf -v " + std::string(pathvar) + "/../root/" + params1).c_str());
78+
if(result!="")
79+
result = "success";
80+
else
81+
result = "error: in rm" ;
82+
break;
83+
case mkdir:
84+
result = shell_commons(("mkdir " + std::string(pathvar) + "/../root/" + params1).c_str());
85+
if(result!="")
86+
result = "success";
87+
else
88+
result = "error: in mkdir" ;
89+
break;
90+
case touch:
91+
if("" == shell_commons(("ls -l " + std::string(pathvar) + "/../root/" + params1 + " grep ^- ").c_str()))
92+
{
93+
result = shell_commons(("touch " + std::string(pathvar) + "/../root/" + params1).c_str());
94+
result = "success";
95+
}
96+
97+
else
98+
{
99+
result = "error:file already exists";
100+
}
101+
break;
102+
case cat:
103+
result = shell_commons(("cat " + std::string(pathvar) + "/../root/" + params1).c_str());
104+
break;
105+
default:
106+
result = "error:command not found";
107+
break;
108+
}
50109
auto res = HttpResponse::newHttpResponse();
51110
res->addHeader("Access-Control-Allow-Origin", "*");
52111
res->setBody(result);
53112
callback(res);
113+
54114
}
115+
// void genTree(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
116+
// {
117+
// char *pathvar;
118+
// pathvar = getenv("PWD");
119+
// std::string result = shell_commons(("cd " + std::string(pathvar) + "/.. " + "&&" + "tree -J root").c_str());
120+
// auto res = HttpResponse::newHttpResponse();
121+
// res->addHeader("Access-Control-Allow-Origin", "*");
122+
// res->setBody(result);
123+
// callback(res);
124+
// }
125+
// void catFile(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
126+
// {
127+
// char *pathvar;
128+
// pathvar = getenv("PWD");
129+
// std::string path = req->getParameter("path");
130+
// std::string result = shell_commons(("cat " + std::string(pathvar) + "/../root/" + path).c_str());
131+
// auto res = HttpResponse::newHttpResponse();
132+
// res->addHeader("Access-Control-Allow-Origin", "*");
133+
// res->setBody(result);
134+
// callback(res);
135+
// }
55136
void saveFile(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
56137
{
57138
auto body = req->getBody();
@@ -121,4 +202,4 @@ void getPicture(const HttpRequestPtr &req, std::function<void(const HttpResponse
121202
auto resp = HttpResponse::newFileResponse("./uploads/" + filename);
122203
resp->addHeader("Access-Control-Allow-Origin", "*");
123204
callback(resp);
124-
}
205+
}

file_controller.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
#include <drogon/drogon.h>
55
using namespace drogon;
66
std::string shell_commons(const char *cmd);
7-
void genTree(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback);
8-
void catFile(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback);
7+
// void genTree(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback);
8+
// void catFile(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback);
99
void saveFile(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback);
1010
void imageUpload(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback);
1111
void getPicture(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback);
12+
void commondsCtrl(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback);
1213
// std::string
1314
#endif

main.cc

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,21 @@ int main()
2626
drogon::app().registerHandler("/api/info", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
2727
{ info(req, std::move(callback)); });
2828

29-
drogon::app().registerHandler("/api/file/tree", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
30-
{ genTree(req, std::move(callback)); });
31-
drogon::app().registerHandler("/api/file/cat", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
32-
{ catFile(req, std::move(callback)); });
29+
// drogon::app().registerHandler("/api/file/tree", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
30+
// { genTree(req, std::move(callback)); });
31+
// drogon::app().registerHandler("/api/file/cat", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
32+
// { catFile(req, std::move(callback)); });
3333
drogon::app().registerHandler("/api/file/save", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
3434
{ saveFile(req, std::move(callback)); });
3535
drogon::app().registerHandler("/api/avatar", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
3636
{ avatar(req, std::move(callback)); });
3737
drogon::app().registerHandler("/api/upload", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
3838
{ imageUpload(req, std::move(callback)); });
3939
drogon::app().registerHandler("/api/file/get", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
40-
{ getPicture(req, std::move(callback)); }, {Get});
40+
{ getPicture(req, std::move(callback)); },
41+
{Get});
42+
drogon::app().registerHandler("/api/file/commonds", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
43+
{ commondsCtrl(req, std::move(callback)); });
4144
drogon::app().setUploadPath("./uploads").run();
4245
return 0;
4346
}

0 commit comments

Comments
 (0)