Hot fix: now bad cookies do not ruin everything
This commit is contained in:
parent
799e156f88
commit
90f8289bcd
2
.gitignore
vendored
2
.gitignore
vendored
@ -14,3 +14,5 @@ local.sh
|
||||
|
||||
iu9-ca-web-chat.db
|
||||
log/
|
||||
core
|
||||
|
||||
|
@ -149,8 +149,10 @@ struct CAWebChat {
|
||||
"login_cookie.cpp",
|
||||
"backend_logic/server_data_interact.cpp",
|
||||
"backend_logic/when_login.cpp",
|
||||
"backend_logic/when_list_rooms.cpp",
|
||||
"backend_logic/when_internalapi_pollevents.cpp",
|
||||
"backend_logic/when_internalapi_getchatlist.cpp",
|
||||
"backend_logic/when_internalapi_getchatinfo.cpp",
|
||||
};
|
||||
for (std::string& u: T.units)
|
||||
u = "web_chat/iu9_ca_web_chat_lib/" + u;
|
||||
|
@ -55,26 +55,31 @@ namespace een9 {
|
||||
};
|
||||
skip_ows();
|
||||
while (pos < hv.size()) {
|
||||
if (!result.empty()) {
|
||||
if (!isThis(';'))
|
||||
THROW("Incorrect Cookie header line, missing ;");
|
||||
pos++;
|
||||
skip_ows();
|
||||
}
|
||||
std::string name_of_pechenye = read_to_space_or_eq();
|
||||
ASSERT(isCookieName(name_of_pechenye), "Incorrect Cookie name");
|
||||
// ASSERT(isCookieName(name_of_pechenye), "Incorrect Cookie name");
|
||||
skip_ows();
|
||||
ASSERT(isThis('='), "Incorrect Cookie header line, missing =");
|
||||
if (!isThis('='))
|
||||
THROW("Incorrect Cookie header line, missing =");
|
||||
pos++;
|
||||
skip_ows();
|
||||
std::string value_of_pechenye;
|
||||
if (isThis('"')) {
|
||||
pos++;
|
||||
value_of_pechenye = read_to_space_or_dq_or_semc();
|
||||
ASSERT(isThis('"'), "Incorrect Cookie header line, missing \"");
|
||||
if (!isThis('"'))
|
||||
THROW("Incorrect Cookie header line, missing \"");
|
||||
pos++;
|
||||
} else {
|
||||
value_of_pechenye = read_to_space_or_dq_or_semc();
|
||||
}
|
||||
ASSERT(isCookieValue(value_of_pechenye), "Incorrect Cookie value");
|
||||
if (result.empty())
|
||||
result.emplace_back();
|
||||
result.back().first = std::move(name_of_pechenye);
|
||||
result.back().second = std::move(value_of_pechenye);
|
||||
// ASSERT(isCookieValue(value_of_pechenye), "Incorrect Cookie value");
|
||||
result.emplace_back(name_of_pechenye, value_of_pechenye);
|
||||
skip_ows();
|
||||
}
|
||||
return result;
|
||||
@ -84,10 +89,14 @@ namespace een9 {
|
||||
findAllClientCookies(const std::vector<std::pair<std::string, std::string>>& header) {
|
||||
std::vector<std::pair<std::string, std::string>> result;
|
||||
for (const std::pair<std::string, std::string>& line: header) {
|
||||
if (line.first == "Cookie") {
|
||||
std::vector<std::pair<std::string, std::string>> new_cookies = parseCookieHeader(line.second);
|
||||
result.reserve(result.size() + new_cookies.size());
|
||||
result.insert(result.end(), new_cookies.begin(), new_cookies.end());
|
||||
try {
|
||||
if (line.first == "Cookie") {
|
||||
std::vector<std::pair<std::string, std::string>> new_cookies = parseCookieHeader(line.second);
|
||||
result.reserve(result.size() + new_cookies.size());
|
||||
result.insert(result.end(), new_cookies.begin(), new_cookies.end());
|
||||
}
|
||||
} catch (const std::exception& e) {
|
||||
printf("!!!findAllClientCookies failure\n");
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
@ -63,6 +63,8 @@ namespace iu9cawebchat {
|
||||
std::string when_page_login(WorkerGuestData& wgd, const json::JSON& config_presentation,
|
||||
const een9::ClientRequest& req, const std::vector<LoginCookie>& login_cookies, const json::JSON& userinfo);
|
||||
|
||||
std::string when_page_list_rooms(WorkerGuestData& wgd, const json::JSON& config_presentation,
|
||||
const een9::ClientRequest& req, const std::vector<LoginCookie>& login_cookies, const json::JSON& userinfo);
|
||||
|
||||
json::JSON internalapi_pollEvents(SqliteConnection& conn, int64_t uid, const json::JSON& Sent);
|
||||
|
||||
|
@ -0,0 +1,5 @@
|
||||
#include "server_data_interact.h"
|
||||
|
||||
namespace iu9cawebchat {
|
||||
// todo
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
#include "server_data_interact.h"
|
||||
|
||||
namespace iu9cawebchat {
|
||||
std::string when_page_list_rooms(WorkerGuestData& wgd, const json::JSON& config_presentation,
|
||||
const een9::ClientRequest& req, const std::vector<LoginCookie>& login_cookies, const json::JSON& userinfo) {
|
||||
if (userinfo.isNull()) {
|
||||
printf("Somebody entered /list-room with %s without being logged in\n", req.method.c_str());
|
||||
if (!login_cookies.empty()) {
|
||||
printf("Login cookies: \n");
|
||||
for (auto& c: login_cookies) {
|
||||
printf("%s as %s\n", c.nickname.c_str(), c.password.c_str());
|
||||
}
|
||||
}
|
||||
return een9::form_http_server_response_307("/login");
|
||||
}
|
||||
return RTEE("list-rooms", config_presentation, wgd, userinfo);
|
||||
}
|
||||
}
|
@ -82,20 +82,18 @@ namespace iu9cawebchat {
|
||||
int64_t logged_in_user = -1;
|
||||
initial_extraction_of_all_the_useful_info_from_cookies(*wgd.db, req, cookies, login_cookies, userinfo, logged_in_user);
|
||||
|
||||
std::string result;
|
||||
|
||||
if (req.uri_path == "/" || req.uri_path == "/list-rooms") {
|
||||
if (logged_in_user < 0)
|
||||
result = een9::form_http_server_response_307("/login");
|
||||
return RTEE("list-rooms", config_presentation, wgd, userinfo);
|
||||
return when_page_list_rooms(wgd, config_presentation, req, login_cookies, userinfo);
|
||||
}
|
||||
if (req.uri_path == "/login") {
|
||||
return when_page_login(wgd, config_presentation, req, login_cookies, userinfo);
|
||||
}
|
||||
if (req.uri_path == "/chat") {
|
||||
// todo: write it actually
|
||||
return RTEE("chat", config_presentation, wgd, userinfo);
|
||||
}
|
||||
if (req.uri_path == "/profile") {
|
||||
// todo: write it actually
|
||||
return RTEE("profile", config_presentation, wgd, userinfo);
|
||||
}
|
||||
// if (req.uri_path == "/registration") {
|
||||
|
Loading…
Reference in New Issue
Block a user