Skip to content

Commit 8c26ffd

Browse files
committed
bwb jwtVerify
2 parents 958bace + a314773 commit 8c26ffd

File tree

8 files changed

+175
-84
lines changed

8 files changed

+175
-84
lines changed

file_controller.cc

Lines changed: 122 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,29 @@
11
#include "file_controller.h"
2+
#include "jwt_controller.h"
3+
#include <json/json.h>
4+
#include <stdio.h>
5+
6+
#include <chrono>
27
#include <iostream>
38
#include <stdexcept>
4-
#include <stdio.h>
59
#include <string>
6-
#include <json/json.h>
710

8-
9-
std::string shell_commons(const char* cmd) {
11+
std::string shell_commons(const char *cmd)
12+
{
1013
char buffer[128];
1114
std::string result = "";
12-
FILE* pipe = popen(cmd, "r");
13-
if (!pipe) throw std::runtime_error("popen() failed!");
14-
try {
15-
while (fgets(buffer, sizeof buffer, pipe) != NULL) {
15+
FILE *pipe = popen(cmd, "r");
16+
if (!pipe)
17+
throw std::runtime_error("popen() failed!");
18+
try
19+
{
20+
while (fgets(buffer, sizeof buffer, pipe) != NULL)
21+
{
1622
result += buffer;
1723
}
18-
} catch (...) {
24+
}
25+
catch (...)
26+
{
1927
pclose(pipe);
2028
throw;
2129
}
@@ -25,43 +33,118 @@ std::string shell_commons(const char* cmd) {
2533

2634
void genTree(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
2735
{
28-
char *pathvar;
29-
pathvar = getenv("PWD");
30-
std::string result = shell_commons(("cd "+std::string(pathvar)+"/.. " + "&&"+"tree -J root" ).c_str()) ;
3136
auto res = HttpResponse::newHttpResponse();
32-
res->addHeader("Access-Control-Allow-Origin", "*");
33-
res ->setBody(result);
34-
callback(res);
37+
if (jwtVerify(req))
38+
{
39+
char *pathvar;
40+
pathvar = getenv("PWD");
41+
std::string result = shell_commons(("cd " + std::string(pathvar) + "/.. " + "&&" + "tree -J root").c_str());
42+
res->addHeader("Access-Control-Allow-Origin", "*");
43+
res->setBody(result);
44+
callback(res);
45+
}
46+
else{
47+
res->setBody("No Authorization");
48+
}
3549
}
50+
3651
void catFile(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
3752
{
38-
char *pathvar;
39-
pathvar = getenv("PWD");
40-
std::string path = req->getParameter("path");
41-
std::string result = shell_commons(("cat "+std::string(pathvar)+"/../root/"+path).c_str()) ;
4253
auto res = HttpResponse::newHttpResponse();
43-
res->addHeader("Access-Control-Allow-Origin", "*");
44-
res ->setBody(result);
45-
callback(res);
54+
if (jwtVerify(req))
55+
{
56+
char *pathvar;
57+
pathvar = getenv("PWD");
58+
std::string path = req->getParameter("path");
59+
std::string result = shell_commons(("cat " + std::string(pathvar) + "/../root/" + path).c_str());
60+
61+
res->addHeader("Access-Control-Allow-Origin", "*");
62+
res->setBody(result);
63+
64+
callback(res);
65+
}
66+
else
67+
{
68+
res->setBody("No Authorization");
69+
}
4670
}
71+
4772
void saveFile(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
4873
{
49-
auto body = req->getBody();
50-
Json::Value req_json;
51-
Json::Reader reader;
52-
std::string bodyStr(body);
53-
if (!reader.parse(bodyStr, req_json)) {
54-
std::cout<<"parse failed"<<std::endl;
55-
callback(HttpResponse::newHttpResponse());
56-
return;
57-
}
58-
char *pathvar;
59-
pathvar = getenv("PWD");
60-
std::string filename = req_json["filename"].asString();
61-
std::string content = req_json["content"].asString();
62-
std::string result = shell_commons(("echo '"+content+"'>"+std::string(pathvar)+"/../root/"+filename).c_str()) ;
6374
auto res = HttpResponse::newHttpResponse();
64-
res->addHeader("Access-Control-Allow-Origin", "*");
65-
res ->setBody("success");
66-
callback(res);
75+
if (jwtVerify(req))
76+
{
77+
auto body = req->getBody();
78+
Json::Value req_json;
79+
Json::Reader reader;
80+
std::string bodyStr(body);
81+
if (!reader.parse(bodyStr, req_json))
82+
{
83+
std::cout << "parse failed" << std::endl;
84+
callback(HttpResponse::newHttpResponse());
85+
return;
86+
}
87+
char *pathvar;
88+
pathvar = getenv("PWD");
89+
std::string filename = req_json["filename"].asString();
90+
std::string content = req_json["content"].asString();
91+
std::string result = shell_commons(("echo '" + content + "'>" + std::string(pathvar) + "/../root/" + filename).c_str());
92+
93+
res->addHeader("Access-Control-Allow-Origin", "*");
94+
res->setBody("success");
95+
callback(res);
96+
}
97+
else
98+
{
99+
res->setBody("No Authorization");
100+
}
101+
}
102+
103+
void imageUpload(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
104+
{
105+
auto resp = HttpResponse::newHttpResponse();
106+
if (jwtVerify(req))
107+
{
108+
MultiPartParser fileUpload;
109+
if (fileUpload.parse(req) != 0 || fileUpload.getFiles().size() != 1)
110+
{
111+
auto resp = HttpResponse::newHttpResponse();
112+
resp->setBody("Must only be one file");
113+
resp->setStatusCode(k403Forbidden);
114+
callback(resp);
115+
return;
116+
}
117+
auto &file = fileUpload.getFiles()[0];
118+
auto now = std::chrono::system_clock::now();
119+
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count();
120+
std::string timestamp = std::to_string(ms) + '.' + std::string(file.getFileExtension());
121+
122+
resp->addHeader("Access-Control-Allow-Origin", "*");
123+
resp->setBody(timestamp);
124+
file.save();
125+
shell_commons(("mv ./uploads/" + file.getFileName() + " ./uploads/" + timestamp).c_str());
126+
127+
LOG_INFO << "The uploaded file has been saved to the ./uploads "
128+
"directory";
129+
callback(resp);
130+
}
131+
else
132+
{
133+
resp->setBody("No Authorization");
134+
}
67135
}
136+
137+
void getPicture(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
138+
{
139+
std::string filename = req->getParameter("filename");
140+
auto resp = HttpResponse::newFileResponse("./uploads/" + filename);
141+
if (jwtVerify(req))
142+
{
143+
resp->addHeader("Access-Control-Allow-Origin", "*");
144+
callback(resp);
145+
}
146+
else
147+
{
148+
resp->setBody("No Authorization");
149+
}
150+
}

file_controller.h

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

jwt_controller.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include <drogon/drogon.h>
33
#include <jwt-cpp/jwt.h>
44
#include <cstring>
5+
#include <iomanip>
56
#include <chrono>
67
#include "jwt_controller.h"
78

main.cc

Lines changed: 30 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,46 +4,40 @@
44
#include "user_controller.h"
55
#include "file_controller.h"
66
#include <drogon/WebSocketController.h>
7+
78
using namespace drogon;
89
std::unordered_map<std::string, WebSocketConnectionPtr> clientTable;
9-
int main() {
10+
int main()
11+
{
1012
drogon::app().addListener("0.0.0.0", 8081);
1113
std::cout << "ready" << std::endl;
12-
drogon::app().registerHandler("/api/signup", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback) {
13-
Handle(req, std::move(callback),registerUser);
14-
});
15-
drogon::app().registerHandler("/api/login", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback) {
16-
Handle(req, std::move(callback),loginUser);
17-
});
18-
drogon::app().registerHandler("/api/chat", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback) {
19-
chat(req, std::move(callback));
20-
});
21-
drogon::app().registerHandler("/api/check", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback) {
22-
check(req, std::move(callback));
23-
});
24-
drogon::app().registerHandler("/api/nfmgr", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback) {
25-
request_processing(req, std::move(callback));
26-
});
27-
drogon::app().registerHandler("/api/newfriends", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback) {
28-
friend_operation(req, std::move(callback));
29-
});
30-
drogon::app().registerHandler("/api/info", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback) {
31-
info(req, std::move(callback));
32-
});
14+
drogon::app().registerHandler("/api/signup", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
15+
{ Handle(req, std::move(callback), registerUser); });
16+
drogon::app().registerHandler("/api/login", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
17+
{ Handle(req, std::move(callback), loginUser); });
18+
drogon::app().registerHandler("/api/chat", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
19+
{ chat(req, std::move(callback)); });
20+
drogon::app().registerHandler("/api/check", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
21+
{ check(req, std::move(callback)); });
22+
drogon::app().registerHandler("/api/nfmgr", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
23+
{ request_processing(req, std::move(callback)); });
24+
drogon::app().registerHandler("/api/newfriends", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
25+
{ friend_operation(req, std::move(callback)); });
26+
drogon::app().registerHandler("/api/info", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
27+
{ info(req, std::move(callback)); });
3328

34-
drogon::app().registerHandler("/api/file/tree", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback) {
35-
genTree(req, std::move(callback));
36-
});
37-
drogon::app().registerHandler("/api/file/cat", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback) {
38-
catFile(req, std::move(callback));
39-
});
40-
drogon::app().registerHandler("/api/file/save", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback) {
41-
saveFile(req, std::move(callback));
42-
});
43-
drogon::app().registerHandler("/api/avatar", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback) {
44-
avatar(req, std::move(callback));
45-
});
46-
drogon::app().run();
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)); });
33+
drogon::app().registerHandler("/api/file/save", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
34+
{ saveFile(req, std::move(callback)); });
35+
drogon::app().registerHandler("/api/avatar", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
36+
{ avatar(req, std::move(callback)); });
37+
drogon::app().registerHandler("/api/upload", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
38+
{ imageUpload(req, std::move(callback)); });
39+
drogon::app().registerHandler("/api/file/get", [](const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
40+
{ getPicture(req, std::move(callback)); }, {Get});
41+
drogon::app().setUploadPath("./uploads").run();
4742
return 0;
4843
}
49-

msg_controller.cc

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ void chat(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)
2323
std::string sender = jwtDecrypt(req->getHeader("Authorization").substr(7));
2424
std::string content = req_json["content"].asString();
2525
std::string receiver = req_json["receiver"].asString();
26+
2627
sql_addhistory(sender, receiver, content, "0");
28+
2729
std::string msg = req_json["content"].asString();
2830
auto output = writer.write(res_json);
2931
res->setBody(output);
@@ -57,10 +59,12 @@ void friend_operation(const HttpRequestPtr &req, std::function<void(const HttpRe
5759
std::string sender = jwtDecrypt(req->getHeader("Authorization").substr(7));
5860
std::string receiver = req->getParameter("username");
5961
std::string operation = req->getParameter("operation");
62+
6063
if (operation == "add")
6164
sql_addrequest(sender, receiver);
6265
else
6366
sql_delete_operation(sender, receiver);
67+
6468
res->setBody("Success");
6569
} else {
6670
res->setBody("No Authorization");
@@ -71,15 +75,19 @@ void friend_operation(const HttpRequestPtr &req, std::function<void(const HttpRe
7175
void request_processing(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback) {
7276
auto res = HttpResponse::newHttpResponse();
7377
res->addHeader("Access-Control-Allow-Origin", "*");
78+
7479
if (jwtVerify(req)) {
80+
7581
std::string receiver = jwtDecrypt(req->getHeader("Authorization").substr(7));
7682
std::string sender = req->getParameter("username");
7783
std::string attitude = req->getParameter("info");
84+
7885
sql_process_request(sender, receiver, attitude);
7986
res->setBody("Success");
8087
} else {
8188
res->setBody("No Authorization");
8289
}
90+
8391
callback(res);
8492
}
8593
// get chat info
@@ -96,16 +104,20 @@ void info(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)
96104
Json::FastWriter writer;
97105
auto res = HttpResponse::newHttpResponse();
98106
res->addHeader("Access-Control-Allow-Origin", "*");
107+
99108
if (jwtVerify(req)) {
109+
100110
me = jwtDecrypt(req->getHeader("Authorization").substr(7));
101111
if (req_json["person"].asString() == "") {
102112
res->setBody(writer.write(get_chat_info(me, "")));
103113
} else {
104114
who_send_me = req_json["person"].asString();
105115
res->setBody(writer.write(get_chat_info(me, who_send_me)));
106116
}
117+
107118
} else {
108119
res->setBody("No Authorization");
109120
}
121+
110122
callback(res);
111123
}

mysql.cc

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,17 @@ void process(sql::PreparedStatement *readdatament, std::vector<std::string> s, s
1212
readdatament->setString(1, s[i]);
1313
sql::ResultSet *resultSet = readdatament->executeQuery();
1414
std::string friendlist;
15-
1615
if (resultSet->next())
1716
{
1817
friendlist = resultSet->getString("friends");
1918
}
20-
2119
int pos = friendlist.find(s[i + 1]);
22-
2320
if (pos != std::string::npos && pos != 0)
2421
friendlist.erase(pos - 1, s[i + 1].length() + 1);
2522
else if (pos == 0)
2623
friendlist.erase(pos, s[i + 1].length() + 1);
27-
2824
std::string changedata = "UPDATE users SET friends=? WHERE username =?";
2925
sql::PreparedStatement *updateStatement = con->prepareStatement(changedata);
30-
3126
updateStatement->setString(1, friendlist);
3227
updateStatement->setString(2, s[i]);
3328
updateStatement->execute();
@@ -382,7 +377,7 @@ bool sql_check(std::string user, std::string passwd)
382377
Json::Value sql_find_my_msg(std::string me)
383378

384379
{
385-
std::cout << "login user: " << me << std::endl;
380+
// std::cout << "login user: " << me << std::endl;
386381
try
387382
{
388383
sql::mysql::MySQL_Driver *driver = sql::mysql::get_mysql_driver_instance();

root/lgy

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
123
1+
ok![](http://127.0.0.1:8081/api/file/get?filename=1695257143488.png)
2+
3+
4+

user_controller.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include <drogon/drogon.h>
22
#include <json/json.h>
33
#include "mysql.h"
4+
#include <iomanip>
45
#include <openssl/sha.h>
56
#include "jwt_controller.h"
67
#include "msg_controller.h"

0 commit comments

Comments
 (0)