fix crash with sessions with empty user, skip elopage webhook logic

This commit is contained in:
Dario 2020-06-20 12:47:46 +02:00
parent b4c0d6b062
commit b6c2cc94a5
5 changed files with 33 additions and 6 deletions

View File

@ -33,6 +33,10 @@ void ElopageWebhook::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
std::ostream& _responseStream = response.send();
_responseStream << "200 OK";
// don't use it anymore, register now direct
// elopage request are only logged from gpt server
return;
std::istream& stream = request.stream();
std::string completeRequest;
Poco::Net::NameValueCollection elopageRequestData;

View File

@ -19,6 +19,10 @@ void ElopageWebhookLight::handleRequest(Poco::Net::HTTPServerRequest& request, P
std::ostream& _responseStream = response.send();
_responseStream << "200 OK";
// don't use it anymore, register now direct
// elopage request are only logged from gpt server
return;
std::istream& stream = request.stream();
std::string completeRequest;
Poco::Net::NameValueCollection elopageRequestData;

View File

@ -115,12 +115,13 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c
return handleCheckEmail(s, uri, request, timeUsed);
}
}
if (url_first_part == "/register") {
/*if (url_first_part == "/register") {
auto pageRequestHandler = new RegisterPage;
pageRequestHandler->setProfiler(timeUsed);
return pageRequestHandler;
}
if (url_first_part == "/registerDirect") {
}*/
if (url_first_part.size() >= 9 && url_first_part.substr(0,9) == "/register") {
//if (url_first_part == "/register" || url_first_part == "/registerDirect" ) {
auto pageRequestHandler = new RegisterDirectPage;
pageRequestHandler->setProfiler(timeUsed);
return pageRequestHandler;
@ -146,11 +147,17 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c
if (externReferer != "") {
s->setLastReferer(externReferer);
}
model::table::User* userModel = nullptr;
auto user = s->getUser();
if (s->errorCount() || (!user.isNull() && user->errorCount())) {
auto newUser = s->getNewUser();
if (newUser) userModel = newUser->getModel();
if (s->errorCount() || (!user.isNull() && user->errorCount()) || (userModel && userModel->errorCount())) {
if (!user.isNull() && user->errorCount()) {
s->getErrors(user);
}
if (userModel && userModel->errorCount()) {
s->getErrors(userModel);
}
s->sendErrorsAsEmail();
auto pageRequestHandler = new Error500Page(s);
pageRequestHandler->setProfiler(timeUsed);
@ -171,7 +178,7 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c
pageRequestHandler->setProfiler(timeUsed);
return pageRequestHandler;
}
if (s->getNewUser()->getModel()->getRole() == model::table::ROLE_ADMIN) {
if (userModel && userModel->getRole() == model::table::ROLE_ADMIN) {
if (url_first_part == "/adminRegister") {
auto pageRequestHandler = new RegisterAdminPage(s);
pageRequestHandler->setProfiler(timeUsed);
@ -229,7 +236,7 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c
return pageRequestHandler;
}
if (s && !user.isNull() && user->hasCryptoKey()) {
if(s && newUser && newUser->hasPassword() && newUser->hasPublicKey()) {
//printf("[PageRequestHandlerFactory] go to dashboard page with user\n");
auto pageRequestHandler = new DashboardPage(s);
pageRequestHandler->setProfiler(timeUsed);

View File

@ -73,6 +73,13 @@ namespace controller {
std::shared_lock<std::shared_mutex> _lock(mSharedMutex);
return mPassword;
}
inline bool hasPassword() {
std::shared_lock<std::shared_mutex> _lock(mSharedMutex);
return mPassword;
}
inline bool hasPublicKey() {
return getModel()->getPublicKey();
}
//! \brief set key pair, public in model, private if password exist else with next setPassword call into model
//! \param gradidoKeyPair take owner ship
//! \param return 0 if public key set

View File

@ -31,8 +31,13 @@
form.get("register-email", ""),
form.get("register-password", "")
);
getErrors(session);
if(!errorCount()) {
auto user_host = request.clientAddress().host();
session->setClientIp(user_host);
response.addCookie(session->getLoginCookie());
response.redirect(ServerConfig::g_php_serverPath + "/");
return;
}