From 73443e373b13c587ff569745a782028a09943124 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Fri, 7 May 2021 12:42:59 +0200 Subject: [PATCH 1/2] fix link generation --- login_server/src/cpp/controller/EmailVerificationCode.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/login_server/src/cpp/controller/EmailVerificationCode.cpp b/login_server/src/cpp/controller/EmailVerificationCode.cpp index d685fd925..77384c209 100644 --- a/login_server/src/cpp/controller/EmailVerificationCode.cpp +++ b/login_server/src/cpp/controller/EmailVerificationCode.cpp @@ -122,10 +122,10 @@ namespace controller { std::string EmailVerificationCode::getLink() { std::string link = mBaseUrl; - if (ServerConfig::g_frontend_checkEmailPath.size() > 1 && ServerConfig::g_frontend_checkEmailPath.data()[0] != '/') { - link += '/'; + if (ServerConfig::g_frontend_checkEmailPath.size() > 1) { + link = ServerConfig::g_frontend_checkEmailPath; } - link += ServerConfig::g_frontend_checkEmailPath; + if (link.data()[link.size() - 1] != '/') { link += '/'; } From 2d665299c7db2325366c25d8c6bf09a0301aa5dd Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 11 May 2021 11:32:39 +0200 Subject: [PATCH 2/2] use setBaseUrl function instead of hacking getLink function --- login_server/src/cpp/JSONInterface/JsonCreateUser.cpp | 2 +- login_server/src/cpp/JSONInterface/JsonRequestHandler.cpp | 8 +++++++- login_server/src/cpp/JSONInterface/JsonRequestHandler.h | 1 + login_server/src/cpp/JSONInterface/JsonSendEmail.cpp | 6 ++++-- login_server/src/cpp/controller/EmailVerificationCode.cpp | 3 --- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/login_server/src/cpp/JSONInterface/JsonCreateUser.cpp b/login_server/src/cpp/JSONInterface/JsonCreateUser.cpp index c66d10c8d..4917f611a 100644 --- a/login_server/src/cpp/JSONInterface/JsonCreateUser.cpp +++ b/login_server/src/cpp/JSONInterface/JsonCreateUser.cpp @@ -109,7 +109,7 @@ Poco::JSON::Object* JsonCreateUser::handle(Poco::Dynamic::Var params) emailOptInModel->sendErrorsAsEmail(); return stateError("insert emailOptIn failed"); } - + emailOptIn->setBaseUrl(mServerHost + "/" + ServerConfig::g_frontend_checkEmailPath); em->addEmail(new model::Email(emailOptIn, user, model::Email::convertTypeFromInt(emailType))); if (login_after_register && session) { diff --git a/login_server/src/cpp/JSONInterface/JsonRequestHandler.cpp b/login_server/src/cpp/JSONInterface/JsonRequestHandler.cpp index 99b4eb0fe..a577155b9 100644 --- a/login_server/src/cpp/JSONInterface/JsonRequestHandler.cpp +++ b/login_server/src/cpp/JSONInterface/JsonRequestHandler.cpp @@ -43,7 +43,13 @@ void JsonRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& request, Po //std::ostream& responseStream = _compressResponse ? _gzipStream : _responseStream; mClientIp = request.clientAddress().host(); - + + if (request.secure()) { + mServerHost = "https://" + request.getHost(); + } + else { + mServerHost = "http://" + request.getHost(); + } auto method = request.getMethod(); std::istream& request_stream = request.stream(); Poco::JSON::Object* json_result = nullptr; diff --git a/login_server/src/cpp/JSONInterface/JsonRequestHandler.h b/login_server/src/cpp/JSONInterface/JsonRequestHandler.h index ed0272ac8..834ac512e 100644 --- a/login_server/src/cpp/JSONInterface/JsonRequestHandler.h +++ b/login_server/src/cpp/JSONInterface/JsonRequestHandler.h @@ -26,6 +26,7 @@ public: protected: Poco::JSON::Object* mResultJson; Poco::Net::IPAddress mClientIp; + std::string mServerHost; Session* mSession; Poco::JSON::Object* checkAndLoadSession(Poco::Dynamic::Var params, bool checkIp = false); diff --git a/login_server/src/cpp/JSONInterface/JsonSendEmail.cpp b/login_server/src/cpp/JSONInterface/JsonSendEmail.cpp index 9228c31cb..3179d81ce 100644 --- a/login_server/src/cpp/JSONInterface/JsonSendEmail.cpp +++ b/login_server/src/cpp/JSONInterface/JsonSendEmail.cpp @@ -105,12 +105,12 @@ Poco::JSON::Object* JsonSendEmail::handle(Poco::Dynamic::Var params) return stateError("invalid email"); } auto receiver_user_id = receiver_user->getModel()->getID(); - + std::string checkEmailUrl = receiver_user->getGroupBaseUrl() + ServerConfig::g_frontend_checkEmailPath; if (emailVerificationCodeType == model::table::EMAIL_OPT_IN_RESET_PASSWORD) { session = sm->getNewSession(); if (emailType == model::EMAIL_USER_RESET_PASSWORD) { - auto r = session->sendResetPasswordEmail(receiver_user, true, receiver_user->getGroupBaseUrl()); + auto r = session->sendResetPasswordEmail(receiver_user, true, checkEmailUrl); if (1 == r) { return stateWarning("email already sended"); } @@ -120,6 +120,7 @@ Poco::JSON::Object* JsonSendEmail::handle(Poco::Dynamic::Var params) } else if (emailType == model::EMAIL_CUSTOM_TEXT) { auto email_verification_code_object = controller::EmailVerificationCode::loadOrCreate(receiver_user_id, model::table::EMAIL_OPT_IN_RESET_PASSWORD); + email_verification_code_object->setBaseUrl(checkEmailUrl); auto email = new model::Email(email_verification_code_object, receiver_user, emailCustomText, emailCustomSubject); em->addEmail(email); } @@ -135,6 +136,7 @@ Poco::JSON::Object* JsonSendEmail::handle(Poco::Dynamic::Var params) } auto email_verification_code_object = controller::EmailVerificationCode::loadOrCreate(receiver_user_id, emailVerificationCodeType); + email_verification_code_object->setBaseUrl(checkEmailUrl); model::Email* email = nullptr; if (emailType == model::EMAIL_CUSTOM_TEXT) { email = new model::Email(email_verification_code_object, receiver_user, emailCustomText, emailCustomSubject); diff --git a/login_server/src/cpp/controller/EmailVerificationCode.cpp b/login_server/src/cpp/controller/EmailVerificationCode.cpp index 77384c209..16fcefbb8 100644 --- a/login_server/src/cpp/controller/EmailVerificationCode.cpp +++ b/login_server/src/cpp/controller/EmailVerificationCode.cpp @@ -122,9 +122,6 @@ namespace controller { std::string EmailVerificationCode::getLink() { std::string link = mBaseUrl; - if (ServerConfig::g_frontend_checkEmailPath.size() > 1) { - link = ServerConfig::g_frontend_checkEmailPath; - } if (link.data()[link.size() - 1] != '/') { link += '/';