6
6
#include < iostream>
7
7
#include < stdexcept>
8
8
#include < string>
9
- std::string return_status (std::string result, const std::string& command,Json::Value &res_json)
9
+
10
+ std::string return_status (std::string result, const std::string &command, Json::Value &res_json)
10
11
{
11
- if (!result.empty ()){
12
+ if (!result.empty ())
13
+ {
12
14
result = command + " success" ;
13
15
res_json[" code" ] = 200 ;
14
16
}
@@ -17,32 +19,49 @@ std::string return_status(std::string result, const std::string& command,Json::V
17
19
result = " Error in :" + command;
18
20
res_json[" code" ] = 400 ;
19
21
}
20
-
22
+
21
23
return result;
22
24
}
25
+
23
26
void add_lock (const HttpRequestPtr &req, std::function<void (const HttpResponsePtr &)> &&callback)
24
27
{
28
+ Json::Value res_json;
29
+ Json::FastWriter writer;
30
+
25
31
std::string filename = req->getParameter (" filename" );
26
- if (lockcheck (filename))
32
+ auto res = HttpResponse::newHttpResponse ();
33
+
34
+ if (jwtVerify (req))
27
35
{
28
- auto res = HttpResponse::newHttpResponse ();
29
36
res->addHeader (" Access-Control-Allow-Origin" , " *" );
30
- res->setBody (" This file has been occupied" );
31
- callback (res);
37
+ if (lockcheck (filename))
38
+ {
39
+ res_json[" code" ] = 402 ;
40
+ res_json[" message" ] = " This file has been occupied" ;
41
+ }
42
+ else
43
+ {
44
+ res_json[" code" ] = 200 ;
45
+ res_json[" message" ] = " Success" ;
46
+ }
32
47
}
33
48
else
34
49
{
35
- auto res = HttpResponse::newHttpResponse ();
36
- res->addHeader (" Access-Control-Allow-Origin" , " *" );
37
- res->setBody (" This file is yours" );
38
- callback (res);
50
+ res_json[" code" ] = 401 ;
51
+ res_json[" message" ] = " No Authorization" ;
39
52
}
53
+
54
+ auto output = writer.write (res_json);
55
+ res->setBody (output);
56
+ callback (res);
40
57
}
58
+
41
59
std::string shell_commands (const char *cmd)
42
60
{
43
61
char buffer[1280 ];
44
62
std::string result;
45
63
FILE *pipe = popen (cmd, " r" );
64
+
46
65
if (!pipe)
47
66
throw std::runtime_error (" popen() failed!" );
48
67
try
@@ -58,17 +77,22 @@ std::string shell_commands(const char *cmd)
58
77
throw ;
59
78
}
60
79
pclose (pipe);
80
+
61
81
return result;
62
82
}
63
83
64
84
void commandsCtrl (const HttpRequestPtr &req, std::function<void (const HttpResponsePtr &)> &&callback)
65
85
{
66
86
auto res = HttpResponse::newHttpResponse ();
67
87
std::string result;
88
+
68
89
Json::Value res_json;
69
90
Json::FastWriter writer;
91
+
70
92
res->addHeader (" Access-Control-Allow-Origin" , " *" );
71
- if (jwtVerify (req)){
93
+
94
+ if (jwtVerify (req))
95
+ {
72
96
enum Command
73
97
{
74
98
tree,
@@ -85,9 +109,10 @@ void commandsCtrl(const HttpRequestPtr &req, std::function<void(const HttpRespon
85
109
command = static_cast <Command>(stoi (req->getJsonObject ()->get (" command" , " " ).asString ()));
86
110
std::string params1 = req->getJsonObject ()->get (" params" , " " )[0 ].asString ();
87
111
std::string params2 = req->getJsonObject ()->get (" params" , " " )[1 ].asString ();
112
+
88
113
if ((params1.find (" .." ) != std::string::npos) || (params2.find (" .." ) != std::string::npos))
89
114
{
90
- result = " error :result in wrong directory" ;
115
+ result = " Error :result in wrong directory" ;
91
116
res_json[" code" ] = 400 ;
92
117
}
93
118
else
@@ -99,12 +124,11 @@ void commandsCtrl(const HttpRequestPtr &req, std::function<void(const HttpRespon
99
124
break ;
100
125
case cp:
101
126
result = shell_commands ((" cp -v " + std::string (pathvar) + " /../root/" + params1 + " " + std::string (pathvar) + " /../root/" + params2).c_str ());
102
- result = return_status (result, " cp" ,res_json);
103
-
127
+ result = return_status (result, " cp" , res_json);
104
128
break ;
105
129
case mv:
106
130
result = shell_commands ((" mv -v " + std::string (pathvar) + " /../root/" + params1 + " " + std::string (pathvar) + " /../root/" + params2).c_str ());
107
- result = return_status (result, " mv" ,res_json);
131
+ result = return_status (result, " mv" , res_json);
108
132
break ;
109
133
case rm:
110
134
if (params1.find (" .." ) != std::string::npos)
@@ -114,21 +138,19 @@ void commandsCtrl(const HttpRequestPtr &req, std::function<void(const HttpRespon
114
138
break ;
115
139
}
116
140
result = shell_commands ((" rm -rf -v " + std::string (pathvar) + " /../root/" + params1).c_str ());
117
- result = return_status (result, " rm" ,res_json);
141
+ result = return_status (result, " rm" , res_json);
118
142
break ;
119
143
case mkdir:
120
144
result = shell_commands ((" mkdir -v " + std::string (pathvar) + " /../root/" + params1).c_str ());
121
- result = return_status (result, " mkdir" ,res_json);
145
+ result = return_status (result, " mkdir" , res_json);
122
146
break ;
123
147
case touch:
124
148
if (shell_commands ((" ls -l " + std::string (pathvar) + " /../root/" + params1 + " grep ^- " ).c_str ()).empty ())
125
149
{
126
150
shell_commands ((" touch " + std::string (pathvar) + " /../root/" + params1).c_str ());
127
- // result = shell_commands(("touch " + std::string(pathvar) + "/../root/" + params1).c_str());
128
151
result = " success" ;
129
152
res_json[" code" ] = 200 ;
130
153
}
131
-
132
154
else
133
155
{
134
156
result = " error:file already exists" ;
@@ -151,39 +173,22 @@ void commandsCtrl(const HttpRequestPtr &req, std::function<void(const HttpRespon
151
173
result = " No Authorization" ;
152
174
res_json[" code" ] = 401 ;
153
175
}
176
+
154
177
res_json[" message" ] = result;
155
-
156
- res->addHeader (" Access-Control-Allow-Origin" , " *" );
178
+
157
179
auto output = writer.write (res_json);
158
180
res->setBody (output);
159
181
callback (res);
160
182
}
161
- // void genTree(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
162
- // {
163
- // char *pathvar;
164
- // pathvar = getenv("PWD");
165
- // std::string result = shell_commands(("cd " + std::string(pathvar) + "/.. " + "&&" + "tree -J root").c_str());
166
- // auto res = HttpResponse::newHttpResponse();
167
- // res->addHeader("Access-Control-Allow-Origin", "*");
168
- // res->setBody(result);
169
- // callback(res);
170
- // }
171
- // void catFile(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
172
- // {
173
- // char *pathvar;
174
- // pathvar = getenv("PWD");
175
- // std::string path = req->getParameter("path");
176
- // std::string result = shell_commands(("cat " + std::string(pathvar) + "/../root/" + path).c_str());
177
- // auto res = HttpResponse::newHttpResponse();
178
- // res->addHeader("Access-Control-Allow-Origin", "*");
179
- // res->setBody(result);
180
- // callback(res);
181
- // }
182
183
183
184
void saveFile (const HttpRequestPtr &req, std::function<void (const HttpResponsePtr &)> &&callback)
184
185
{
185
186
auto res = HttpResponse::newHttpResponse ();
186
187
res->addHeader (" Access-Control-Allow-Origin" , " *" );
188
+
189
+ Json::Value res_json;
190
+ Json::FastWriter writer;
191
+
187
192
if (jwtVerify (req))
188
193
{
189
194
auto body = req->getBody ();
@@ -204,53 +209,87 @@ void saveFile(const HttpRequestPtr &req, std::function<void(const HttpResponsePt
204
209
205
210
sql_unlocked (filename);
206
211
207
-
208
- res->setBody (" success" );
209
- callback (res);
212
+ res_json[" code" ] = 200 ;
213
+ res_json[" message" ] = " File save Success" ;
210
214
}
211
215
else
212
216
{
213
- res->setBody (" No Authorization" );
217
+ res_json[" code" ] = 401 ;
218
+ res_json[" message" ] = " No Authorization" ;
214
219
}
220
+
221
+ auto output = writer.write (res_json);
222
+ res->setBody (output);
223
+ callback (res);
215
224
}
216
225
217
226
void imageUpload (const HttpRequestPtr &req, std::function<void (const HttpResponsePtr &)> &&callback)
218
227
{
228
+ // used to return the frontend (json value)
229
+ Json::Value res_json;
230
+ Json::FastWriter writer;
231
+
219
232
auto resp = HttpResponse::newHttpResponse ();
220
233
resp->addHeader (" Access-Control-Allow-Origin" , " *" );
221
234
if (jwtVerify (req))
222
235
{
223
236
MultiPartParser fileUpload;
224
237
if (fileUpload.parse (req) != 0 || fileUpload.getFiles ().size () != 1 )
225
238
{
226
- resp->setBody (" Must only be one file" );
227
- resp->setStatusCode (k403Forbidden);
228
- callback (resp);
229
- return ;
239
+ // resp->setStatusCode(k403Forbidden);
240
+ res_json[" code" ] = 403 ;
241
+ res_json[" message" ] = " Must only be one file" ;
230
242
}
231
- auto &file = fileUpload.getFiles ()[0 ];
232
- auto now = std::chrono::system_clock::now ();
233
- auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch ()).count ();
234
- std::string timestamp = std::to_string (ms) + ' .' + std::string (file.getFileExtension ());
243
+ else
244
+ {
245
+ auto &file = fileUpload.getFiles ()[0 ];
246
+ auto now = std::chrono::system_clock::now ();
247
+ auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch ()).count ();
248
+ std::string timestamp = std::to_string (ms) + ' .' + std::string (file.getFileExtension ());
249
+
250
+ resp->setBody (timestamp);
251
+ file.save ();
252
+ shell_commands ((" mv ./uploads/" + file.getFileName () + " ./uploads/" + timestamp).c_str ());
235
253
236
- resp->setBody (timestamp);
237
- file.save ();
238
- shell_commands ((" mv ./uploads/" + file.getFileName () + " ./uploads/" + timestamp).c_str ());
254
+ LOG_INFO << " The uploaded file has been saved to the ./uploads "
255
+ " directory" ;
239
256
240
- LOG_INFO << " The uploaded file has been saved to the ./uploads "
241
- " directory" ;
257
+ res_json[" code" ] = 200 ;
258
+ res_json[" message" ] = " Upload Success" ;
259
+ }
242
260
}
243
261
else
244
262
{
245
- resp->setBody (" No Authorization" );
263
+ res_json[" code" ] = 401 ;
264
+ res_json[" messsage" ] = " No Authorization" ;
246
265
}
266
+
267
+ auto output = writer.write (res_json);
268
+ resp->setBody (output);
247
269
callback (resp);
248
270
}
249
271
250
272
void getPicture (const HttpRequestPtr &req, std::function<void (const HttpResponsePtr &)> &&callback)
251
273
{
274
+ Json::Value res_json;
275
+ Json::FastWriter writer;
276
+
252
277
std::string filename = req->getParameter (" filename" );
253
278
auto resp = HttpResponse::newFileResponse (" ./uploads/" + filename);
254
279
resp->addHeader (" Access-Control-Allow-Origin" , " *" );
280
+
281
+ if (jwtVerify (req))
282
+ {
283
+ res_json[" code" ] = 200 ;
284
+ res_json[" message" ] = " Picture get success!" ;
285
+ }
286
+ else
287
+ {
288
+ res_json[" code" ] = 404 ;
289
+ res_json[" message" ] = " PICTURE NOT FOUND!!!" ;
290
+ }
291
+
292
+ auto output = writer.write (res_json);
293
+ resp->setBody (output);
255
294
callback (resp);
256
295
}
0 commit comments