Skip to content

Commit 31d9ff0

Browse files
Merge pull request #30 from lglglglgy/main
😄 Combining multiple functions
2 parents 552f5b4 + 797a7e6 commit 31d9ff0

File tree

3 files changed

+120
-40
lines changed

3 files changed

+120
-40
lines changed

file_controller.cc

Lines changed: 102 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ void add_lock(const HttpRequestPtr &req, std::function<void(const HttpResponsePt
2424
}
2525
std::string shell_commons(const char *cmd)
2626
{
27-
char buffer[128];
27+
char buffer[1280];
2828
std::string result = "";
2929
FILE *pipe = popen(cmd, "r");
3030
if (!pipe)
@@ -45,44 +45,110 @@ std::string shell_commons(const char *cmd)
4545
return result;
4646
}
4747

48-
void genTree(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
48+
void commondsCtrl(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
4949
{
50-
auto res = HttpResponse::newHttpResponse();
51-
if (jwtVerify(req))
50+
51+
std::cout << "commondsCtrl" << std::endl;
52+
enum Command {
53+
tree,
54+
cp,
55+
mv,
56+
rm,
57+
mkdir,
58+
touch,
59+
cat
60+
}command;
61+
char *pathvar;
62+
pathvar = getenv("PWD");
63+
64+
command = static_cast<Command>(stoi(req->getJsonObject()->get("command","").asString()));
65+
std::string params1 = req->getJsonObject()->get("params","")[0].asString();
66+
std::string params2 = req->getJsonObject()->get("params","")[1].asString();
67+
std::string result;
68+
switch (command)
5269
{
53-
char *pathvar;
54-
pathvar = getenv("PWD");
55-
std::string result = shell_commons(("cd " + std::string(pathvar) + "/.. " + "&&" + "tree -J root").c_str());
56-
res->addHeader("Access-Control-Allow-Origin", "*");
57-
res->setBody(result);
58-
callback(res);
59-
}
60-
else{
61-
res->setBody("No Authorization");
70+
case tree:
71+
result = shell_commons(("cd " + std::string(pathvar) + "/.. " + "&&" + "tree -J root").c_str());
72+
break;
73+
case cp:
74+
result = shell_commons(("cp -v " + std::string(pathvar) + "/../root/" + params1 + " " + std::string(pathvar) + "/../root/" + params2).c_str());
75+
if(result!="")
76+
result = "success";
77+
else
78+
result = "error: in cp" ;
79+
break;
80+
case mv:
81+
result = shell_commons(("mv -v " + std::string(pathvar) + "/../root/" + params1 + " " + std::string(pathvar) + "/../root/" + params2).c_str());
82+
if(result!="")
83+
result = "success";
84+
else
85+
result = "error: in mv" ;
86+
break;
87+
case rm:
88+
if(params1.find("..") != std::string::npos){
89+
result = "error:result in wrong directory";
90+
break;
91+
}
92+
result = shell_commons(("rm -rf -v " + std::string(pathvar) + "/../root/" + params1).c_str());
93+
if(result!="")
94+
result = "success";
95+
else
96+
result = "error: in rm" ;
97+
break;
98+
case mkdir:
99+
result = shell_commons(("mkdir " + std::string(pathvar) + "/../root/" + params1).c_str());
100+
if(result!="")
101+
result = "success";
102+
else
103+
result = "error: in mkdir" ;
104+
break;
105+
case touch:
106+
if("" == shell_commons(("ls -l " + std::string(pathvar) + "/../root/" + params1 + " grep ^- ").c_str()))
107+
{
108+
result = shell_commons(("touch " + std::string(pathvar) + "/../root/" + params1).c_str());
109+
result = "success";
110+
}
111+
112+
else
113+
{
114+
result = "error:file already exists";
115+
}
116+
break;
117+
case cat:
118+
result = shell_commons(("cat " + std::string(pathvar) + "/../root/" + params1).c_str());
119+
break;
120+
default:
121+
result = "error:command not found";
122+
break;
62123
}
63-
}
64-
65-
void catFile(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
66-
{
67-
68124
auto res = HttpResponse::newHttpResponse();
69-
if (jwtVerify(req))
70-
{
71-
char *pathvar;
72-
pathvar = getenv("PWD");
73-
std::string path = req->getParameter("path");
74-
std::string result = shell_commons(("cat " + std::string(pathvar) + "/../root/" + path).c_str());
125+
res->addHeader("Access-Control-Allow-Origin", "*");
126+
res->setBody(result);
127+
callback(res);
75128

76-
res->addHeader("Access-Control-Allow-Origin", "*");
77-
res->setBody(result);
78-
79-
callback(res);
80-
}
81-
else
82-
{
83-
res->setBody("No Authorization");
84-
}
85129
}
130+
// void genTree(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
131+
// {
132+
// char *pathvar;
133+
// pathvar = getenv("PWD");
134+
// std::string result = shell_commons(("cd " + std::string(pathvar) + "/.. " + "&&" + "tree -J root").c_str());
135+
// auto res = HttpResponse::newHttpResponse();
136+
// res->addHeader("Access-Control-Allow-Origin", "*");
137+
// res->setBody(result);
138+
// callback(res);
139+
// }
140+
// void catFile(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
141+
// {
142+
// char *pathvar;
143+
// pathvar = getenv("PWD");
144+
// std::string path = req->getParameter("path");
145+
// std::string result = shell_commons(("cat " + std::string(pathvar) + "/../root/" + path).c_str());
146+
// auto res = HttpResponse::newHttpResponse();
147+
// res->addHeader("Access-Control-Allow-Origin", "*");
148+
// res->setBody(result);
149+
// callback(res);
150+
// }
151+
86152

87153
void saveFile(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
88154
{
@@ -155,6 +221,7 @@ void getPicture(const HttpRequestPtr &req, std::function<void(const HttpResponse
155221
{
156222
std::string filename = req->getParameter("filename");
157223
auto resp = HttpResponse::newFileResponse("./uploads/" + filename);
224+
158225
if (jwtVerify(req))
159226
{
160227
resp->addHeader("Access-Control-Allow-Origin", "*");
@@ -164,4 +231,5 @@ void getPicture(const HttpRequestPtr &req, std::function<void(const HttpResponse
164231
{
165232
resp->setBody("No Authorization");
166233
}
167-
}
234+
}
235+

file_controller.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,15 @@
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+
13+
void commondsCtrl(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback);
14+
1215
void add_lock(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback);
16+
1317
// std::string
1418
#endif

main.cc

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,13 @@ int main()
2525
{ friend_operation(req, std::move(callback)); });
2626
drogon::app().registerHandler("/api/info", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
2727
{ info(req, std::move(callback)); });
28-
drogon::app().registerHandler("/api/file/tree", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
29-
{ genTree(req, std::move(callback)); });
30-
drogon::app().registerHandler("/api/file/cat", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
31-
{ catFile(req, std::move(callback)); });
28+
29+
30+
// drogon::app().registerHandler("/api/file/tree", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
31+
// { genTree(req, std::move(callback)); });
32+
// drogon::app().registerHandler("/api/file/cat", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
33+
// { catFile(req, std::move(callback)); });
34+
3235
drogon::app().registerHandler("/api/file/save", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
3336
{ saveFile(req, std::move(callback)); });
3437
drogon::app().registerHandler("/api/avatar", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
@@ -38,8 +41,13 @@ int main()
3841
drogon::app().registerHandler("/api/file/get", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
3942
{ getPicture(req, std::move(callback)); },
4043
{Get});
44+
45+
drogon::app().registerHandler("/api/file/commonds", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
46+
{ commondsCtrl(req, std::move(callback)); });
47+
4148
drogon::app().registerHandler("/api/file/lock", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
4249
{add_lock(req, std::move(callback));});
50+
4351
drogon::app().setUploadPath("./uploads").run();
4452
return 0;
4553
}

0 commit comments

Comments
 (0)