1
1
#include " file_controller.h"
2
2
#include " jwt_controller.h"
3
3
#include < json/json.h>
4
- #include < stdio.h >
4
+ #include < cstdio >
5
5
#include < mysql.h>
6
- #include < chrono>
7
6
#include < iostream>
8
7
#include < stdexcept>
9
8
#include < string>
10
- std:: string return_status (std::string result,std::string command )
9
+ std::string return_status (std::string result, const std::string& command,Json::Value &res_json )
11
10
{
12
- if (result != " " )
13
- result = " success" ;
11
+ if (!result.empty ()){
12
+ result = command + " success" ;
13
+ res_json[" code" ] = 200 ;
14
+ }
14
15
else
15
- result = " error in :" +command;
16
+ {
17
+ result = " Error in :" + command;
18
+ res_json[" code" ] = 400 ;
19
+ }
20
+
16
21
return result;
17
22
}
18
23
void add_lock (const HttpRequestPtr &req, std::function<void (const HttpResponsePtr &)> &&callback)
@@ -36,13 +41,13 @@ void add_lock(const HttpRequestPtr &req, std::function<void(const HttpResponsePt
36
41
std::string shell_commands (const char *cmd)
37
42
{
38
43
char buffer[1280 ];
39
- std::string result = " " ;
44
+ std::string result;
40
45
FILE *pipe = popen (cmd, " r" );
41
46
if (!pipe)
42
47
throw std::runtime_error (" popen() failed!" );
43
48
try
44
49
{
45
- while (fgets (buffer, sizeof buffer, pipe) != NULL )
50
+ while (fgets (buffer, sizeof buffer, pipe) != nullptr )
46
51
{
47
52
result += buffer;
48
53
}
@@ -58,74 +63,91 @@ std::string shell_commands(const char *cmd)
58
63
59
64
void commandsCtrl (const HttpRequestPtr &req, std::function<void (const HttpResponsePtr &)> &&callback)
60
65
{
61
-
62
- std::cout << " commandsCtrl" << std::endl;
63
- enum Command
64
- {
65
- tree,
66
- cp,
67
- mv,
68
- rm,
69
- mkdir,
70
- touch,
71
- cat
72
- } command;
73
- char *pathvar;
74
- pathvar = getenv (" PWD" );
75
-
76
- command = static_cast <Command>(stoi (req->getJsonObject ()->get (" command" , " " ).asString ()));
77
- std::string params1 = req->getJsonObject ()->get (" params" , " " )[0 ].asString ();
78
- std::string params2 = req->getJsonObject ()->get (" params" , " " )[1 ].asString ();
66
+ auto res = HttpResponse::newHttpResponse ();
79
67
std::string result;
80
- switch (command)
81
- {
82
- case tree:
83
- result = shell_commands ((" cd " + std::string (pathvar) + " /.. " + " &&" + " tree -J root" ).c_str ());
84
- break ;
85
- case cp:
86
- result = shell_commands ((" cp -v " + std::string (pathvar) + " /../root/" + params1 + " " + std::string (pathvar) + " /../root/" + params2).c_str ());
87
- result = return_status (result," cp" );
68
+ Json::Value res_json;
69
+ Json::FastWriter writer;
70
+ res->addHeader (" Access-Control-Allow-Origin" , " *" );
71
+ if (jwtVerify (req)){
72
+ enum Command
73
+ {
74
+ tree,
75
+ cp,
76
+ mv,
77
+ rm,
78
+ mkdir,
79
+ touch,
80
+ cat
81
+ } command;
82
+ char *pathvar;
83
+ pathvar = getenv (" PWD" );
88
84
89
- break ;
90
- case mv:
91
- result = shell_commands ((" mv -v " + std::string (pathvar) + " /../root/" + params1 + " " + std::string (pathvar) + " /../root/" + params2).c_str ());
92
- result = return_status (result," mv" );
93
- break ;
94
- case rm:
95
- if (params1.find (" .." ) != std::string::npos)
85
+ command = static_cast <Command>(stoi (req->getJsonObject ()->get (" command" , " " ).asString ()));
86
+ std::string params1 = req->getJsonObject ()->get (" params" , " " )[0 ].asString ();
87
+ std::string params2 = req->getJsonObject ()->get (" params" , " " )[1 ].asString ();
88
+ switch (command)
96
89
{
97
- result = " error:result in wrong directory" ;
90
+ case tree:
91
+ result = shell_commands ((" cd " + std::string (pathvar) + " /.. " + " &&" + " tree -J root" ).c_str ());
98
92
break ;
99
- }
100
- result = shell_commands ((" rm -rf -v " + std::string (pathvar) + " /../root/" + params1).c_str ());
101
- result = return_status (result," rm" );
102
- break ;
103
- case mkdir:
104
- result = shell_commands ((" mkdir -v " + std::string (pathvar) + " /../root/" + params1).c_str ());
105
- result = return_status (result," mkdir" );
106
- break ;
107
- case touch:
108
- if (" " == shell_commands ((" ls -l " + std::string (pathvar) + " /../root/" + params1 + " grep ^- " ).c_str ()))
109
- {
110
- result = shell_commands ((" touch " + std::string (pathvar) + " /../root/" + params1).c_str ());
111
- result = " success" ;
112
- }
93
+ case cp:
94
+ result = shell_commands ((" cp -v " + std::string (pathvar) + " /../root/" + params1 + " " + std::string (pathvar) + " /../root/" + params2).c_str ());
95
+ result = return_status (result, " cp" ,res_json);
113
96
114
- else
115
- {
116
- result = " error:file already exists" ;
97
+ break ;
98
+ case mv:
99
+ result = shell_commands ((" mv -v " + std::string (pathvar) + " /../root/" + params1 + " " + std::string (pathvar) + " /../root/" + params2).c_str ());
100
+ result = return_status (result, " mv" ,res_json);
101
+ break ;
102
+ case rm:
103
+ if (params1.find (" .." ) != std::string::npos)
104
+ {
105
+ result = " error:result in wrong directory" ;
106
+ res_json[" code" ] = 400 ;
107
+ break ;
108
+ }
109
+ result = shell_commands ((" rm -rf -v " + std::string (pathvar) + " /../root/" + params1).c_str ());
110
+ result = return_status (result, " rm" ,res_json);
111
+ break ;
112
+ case mkdir:
113
+ result = shell_commands ((" mkdir -v " + std::string (pathvar) + " /../root/" + params1).c_str ());
114
+ result = return_status (result, " mkdir" ,res_json);
115
+ break ;
116
+ case touch:
117
+ if (shell_commands ((" ls -l " + std::string (pathvar) + " /../root/" + params1 + " grep ^- " ).c_str ()).empty ())
118
+ {
119
+ shell_commands ((" touch " + std::string (pathvar) + " /../root/" + params1).c_str ());
120
+ // result = shell_commands(("touch " + std::string(pathvar) + "/../root/" + params1).c_str());
121
+ result = " success" ;
122
+ res_json[" code" ] = 200 ;
123
+ }
124
+
125
+ else
126
+ {
127
+ result = " error:file already exists" ;
128
+ res_json[" code" ] = 400 ;
129
+ }
130
+ break ;
131
+ case cat:
132
+ result = shell_commands ((" cat " + std::string (pathvar) + " /../root/" + params1).c_str ());
133
+ res_json[" code" ] = 200 ;
134
+ break ;
135
+ default :
136
+ result = " error:command not found" ;
137
+ res_json[" code" ] = 400 ;
138
+ break ;
117
139
}
118
- break ;
119
- case cat:
120
- result = shell_commands ((" cat " + std::string (pathvar) + " /../root/" + params1).c_str ());
121
- break ;
122
- default :
123
- result = " error:command not found" ;
124
- break ;
125
140
}
126
- auto res = HttpResponse::newHttpResponse ();
141
+ else
142
+ {
143
+ result = " No Authorization" ;
144
+ res_json[" code" ] = 401 ;
145
+ }
146
+ res_json[" message" ] = result;
147
+
127
148
res->addHeader (" Access-Control-Allow-Origin" , " *" );
128
- res->setBody (result);
149
+ auto output = writer.write (res_json);
150
+ res->setBody (output);
129
151
callback (res);
130
152
}
131
153
// void genTree(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
@@ -153,6 +175,7 @@ void commandsCtrl(const HttpRequestPtr &req, std::function<void(const HttpRespon
153
175
void saveFile (const HttpRequestPtr &req, std::function<void (const HttpResponsePtr &)> &&callback)
154
176
{
155
177
auto res = HttpResponse::newHttpResponse ();
178
+ res->addHeader (" Access-Control-Allow-Origin" , " *" );
156
179
if (jwtVerify (req))
157
180
{
158
181
auto body = req->getBody ();
@@ -173,7 +196,7 @@ void saveFile(const HttpRequestPtr &req, std::function<void(const HttpResponsePt
173
196
174
197
sql_unlocked (filename);
175
198
176
- res-> addHeader ( " Access-Control-Allow-Origin " , " * " );
199
+
177
200
res->setBody (" success" );
178
201
callback (res);
179
202
}
@@ -186,12 +209,12 @@ void saveFile(const HttpRequestPtr &req, std::function<void(const HttpResponsePt
186
209
void imageUpload (const HttpRequestPtr &req, std::function<void (const HttpResponsePtr &)> &&callback)
187
210
{
188
211
auto resp = HttpResponse::newHttpResponse ();
212
+ resp->addHeader (" Access-Control-Allow-Origin" , " *" );
189
213
if (jwtVerify (req))
190
214
{
191
215
MultiPartParser fileUpload;
192
216
if (fileUpload.parse (req) != 0 || fileUpload.getFiles ().size () != 1 )
193
217
{
194
- auto resp = HttpResponse::newHttpResponse ();
195
218
resp->setBody (" Must only be one file" );
196
219
resp->setStatusCode (k403Forbidden);
197
220
callback (resp);
@@ -202,33 +225,24 @@ void imageUpload(const HttpRequestPtr &req, std::function<void(const HttpRespons
202
225
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch ()).count ();
203
226
std::string timestamp = std::to_string (ms) + ' .' + std::string (file.getFileExtension ());
204
227
205
- resp->addHeader (" Access-Control-Allow-Origin" , " *" );
206
228
resp->setBody (timestamp);
207
229
file.save ();
208
230
shell_commands ((" mv ./uploads/" + file.getFileName () + " ./uploads/" + timestamp).c_str ());
209
231
210
232
LOG_INFO << " The uploaded file has been saved to the ./uploads "
211
233
" directory" ;
212
- callback (resp);
213
234
}
214
235
else
215
236
{
216
237
resp->setBody (" No Authorization" );
217
238
}
239
+ callback (resp);
218
240
}
219
241
220
242
void getPicture (const HttpRequestPtr &req, std::function<void (const HttpResponsePtr &)> &&callback)
221
243
{
222
244
std::string filename = req->getParameter (" filename" );
223
245
auto resp = HttpResponse::newFileResponse (" ./uploads/" + filename);
224
-
225
- if (jwtVerify (req))
226
- {
227
- resp->addHeader (" Access-Control-Allow-Origin" , " *" );
228
- callback (resp);
229
- }
230
- else
231
- {
232
- resp->setBody (" No Authorization" );
233
- }
246
+ resp->addHeader (" Access-Control-Allow-Origin" , " *" );
247
+ callback (resp);
234
248
}
0 commit comments