From 46e8a4349236268768445ca59e8e1b2fb211a1b0 Mon Sep 17 00:00:00 2001 From: Dario Date: Thu, 5 Nov 2020 17:05:06 +0100 Subject: [PATCH] use correct community server link in check transactions, login and register direct --- .../HTTPInterface/CheckTransactionPage.cpp | 2 +- src/cpp/HTTPInterface/LoginPage.cpp | 66 +++++++++---------- src/cpp/HTTPInterface/RegisterDirectPage.cpp | 2 +- src/cpp/controller/NodeServer.cpp | 7 ++ src/cpp/controller/NodeServer.h | 1 + src/cpp/controller/User.cpp | 25 +++++++ src/cpp/controller/User.h | 4 ++ src/cpp/model/table/ModelBase.h | 2 - src/cpp/model/table/NodeServer.cpp | 17 +++++ src/cpp/model/table/NodeServer.h | 1 + src/cpsp/checkTransaction.cpsp | 2 +- src/cpsp/login.cpsp | 2 +- src/cpsp/registerDirect.cpsp | 2 +- 13 files changed, 93 insertions(+), 40 deletions(-) diff --git a/src/cpp/HTTPInterface/CheckTransactionPage.cpp b/src/cpp/HTTPInterface/CheckTransactionPage.cpp index 00a242545..49d5069c8 100644 --- a/src/cpp/HTTPInterface/CheckTransactionPage.cpp +++ b/src/cpp/HTTPInterface/CheckTransactionPage.cpp @@ -267,7 +267,7 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request, } else if(!account_user->getModel()->getGroupId()) { response.redirect(ServerConfig::g_serverPath + "/userUpdateGroup"); } else { - response.redirect(ServerConfig::g_php_serverPath + "state-balances/overview"); + response.redirect(account_user->getGroupBaseUrl() + "state-balances/overview"); } return; } diff --git a/src/cpp/HTTPInterface/LoginPage.cpp b/src/cpp/HTTPInterface/LoginPage.cpp index 5bf7fae11..a2a1a9701 100644 --- a/src/cpp/HTTPInterface/LoginPage.cpp +++ b/src/cpp/HTTPInterface/LoginPage.cpp @@ -5,7 +5,7 @@ #include "Poco/DeflatingStream.h" -#line 7 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\login.cpsp" +#line 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" #include "../gettext.h" @@ -16,7 +16,7 @@ #include "../SingletonManager/LanguageManager.h" #include "../SingletonManager/ErrorManager.h" -#line 1 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\header.cpsp" +#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp" #include "../ServerConfig.h" @@ -35,7 +35,7 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: if (_compressResponse) response.set("Content-Encoding", "gzip"); Poco::Net::HTMLForm form(request, request.stream()); -#line 18 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\login.cpsp" +#line 18 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" const char* pageName = "Login"; auto sm = SessionManager::getInstance(); @@ -180,7 +180,7 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: response.redirect(refererString); } else { //printf("redirect to: %s\n", ServerConfig::g_php_serverPath.data()); - response.redirect(ServerConfig::g_php_serverPath + "/"); + response.redirect(user->getGroupBaseUrl() + "/"); } return; } @@ -201,7 +201,7 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: sm->deleteLoginCookies(request, response); } -#line 3 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\header.cpsp" +#line 3 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp" bool withMaterialIcons = false; std::ostream& _responseStream = response.send(); @@ -216,20 +216,20 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: responseStream << "\n"; responseStream << "\n"; responseStream << "Gradido Login Server: "; -#line 11 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\header.cpsp" +#line 11 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp" responseStream << ( pageName ); responseStream << "\n"; responseStream << "\n"; -#line 13 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\header.cpsp" +#line 13 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp" if(withMaterialIcons) { responseStream << "\n"; responseStream << "\n"; -#line 15 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\header.cpsp" +#line 15 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp" } responseStream << "\n"; responseStream << "\n"; responseStream << "\n"; @@ -237,20 +237,20 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: responseStream << "
\n"; responseStream << " "; // end include header.cpsp responseStream << "\n"; -#line 170 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\login.cpsp" +#line 170 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" responseStream << ( getErrorsHtml() ); responseStream << "\n"; responseStream << "\n"; responseStream << "
\n"; @@ -271,22 +271,22 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: responseStream << "
\n"; responseStream << "
\n"; responseStream << "\t\n"; responseStream << "\t\n"; @@ -296,22 +296,22 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: responseStream << "\n"; responseStream << "
\n"; responseStream << "\t\t\n"; responseStream << "\t\t\tgettext("E-Mail") ); responseStream << "\" value=\""; -#line 176 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\login.cpsp" +#line 176 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" responseStream << ( presetEmail ); responseStream << "\"/>\n"; responseStream << "\t\t\tgettext("Password") ); responseStream << "\" />\n"; responseStream << "\t\t \n"; responseStream << "\t\t\n"; @@ -319,7 +319,7 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: responseStream << " \n"; responseStream << "
\n"; responseStream << " "; -#line 6 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\footer.cpsp" +#line 6 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\footer.cpsp" responseStream << ( mTimeProfiler.string() ); responseStream << "\n"; responseStream << "
\n"; responseStream << "
\n"; responseStream << "

Login Server in Entwicklung

\n"; responseStream << "

Alpha "; -#line 10 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\footer.cpsp" +#line 10 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\footer.cpsp" responseStream << ( ServerConfig::g_versionString ); responseStream << "

\n"; responseStream << "
\n"; diff --git a/src/cpp/HTTPInterface/RegisterDirectPage.cpp b/src/cpp/HTTPInterface/RegisterDirectPage.cpp index 54864e858..6aeb48c92 100644 --- a/src/cpp/HTTPInterface/RegisterDirectPage.cpp +++ b/src/cpp/HTTPInterface/RegisterDirectPage.cpp @@ -67,7 +67,7 @@ void RegisterDirectPage::handleRequest(Poco::Net::HTTPServerRequest& request, Po auto user_host = request.clientAddress().host(); session->setClientIp(user_host); response.addCookie(session->getLoginCookie()); - response.redirect(ServerConfig::g_php_serverPath + "/"); + response.redirect(ServerConfig::g_serverPath + "/userUpdateGroup"); return; } } diff --git a/src/cpp/controller/NodeServer.cpp b/src/cpp/controller/NodeServer.cpp index 29494d180..5722aedd9 100644 --- a/src/cpp/controller/NodeServer.cpp +++ b/src/cpp/controller/NodeServer.cpp @@ -189,4 +189,11 @@ namespace controller { return JsonRequest(connection.getUri(), model->getPort()); } + std::string NodeServer::getBaseUri() + { + auto model = getModel(); + NodeServerConnection connection(model->getUrl(), model->getPort()); + return connection.getUri(); + } + } \ No newline at end of file diff --git a/src/cpp/controller/NodeServer.h b/src/cpp/controller/NodeServer.h index 28b06d1fd..3cab1cea2 100644 --- a/src/cpp/controller/NodeServer.h +++ b/src/cpp/controller/NodeServer.h @@ -53,6 +53,7 @@ namespace controller { inline void setHederaId(Poco::AutoPtr hederaId) { mHederaID = hederaId; } inline Poco::AutoPtr getHederaId() { return mHederaID; } + std::string getBaseUri(); JsonRequest createJsonRequest(); protected: NodeServer(model::table::NodeServer* dbModel); diff --git a/src/cpp/controller/User.cpp b/src/cpp/controller/User.cpp index a23785b09..e639b29cd 100644 --- a/src/cpp/controller/User.cpp +++ b/src/cpp/controller/User.cpp @@ -7,6 +7,8 @@ #include "../SingletonManager/ErrorManager.h" #include "../SingletonManager/SingletonTaskObserver.h" +#include "NodeServer.h" + #include "../lib/DataTypeConverter.h" #include "../tasks/VerificationEmailResendTask.h" @@ -515,4 +517,27 @@ namespace controller { } return updated_count; } + + + std::string User::getGroupBaseUrl() + { + UNIQUE_LOCK; + if (mGroupBaseUrl != "") { + return mGroupBaseUrl; + } + static const char* function_name = "User::getGroupBaseUrl"; + auto model = getModel(); + if (!model->getGroupId()) return ServerConfig::g_php_serverPath; + auto servers = controller::NodeServer::load(model::table::NODE_SERVER_GRADIDO_COMMUNITY, model->getGroupId()); + if (!servers.size()) return ServerConfig::g_php_serverPath; + if (servers.size() > 1) { + auto em = ErrorManager::getInstance(); + em->addError(new ParamError(function_name, "error, more than one community server found for group", model->getGroupId())); + em->sendErrorsAsEmail(); + return ServerConfig::g_php_serverPath; + } + mGroupBaseUrl = servers[0]->getBaseUri(); + return mGroupBaseUrl; + } + } diff --git a/src/cpp/controller/User.h b/src/cpp/controller/User.h index 40311b543..3a62f6fcf 100644 --- a/src/cpp/controller/User.h +++ b/src/cpp/controller/User.h @@ -146,6 +146,8 @@ namespace controller { inline void setBalance(int gradidoBalance) { std::unique_lock _lock(mSharedMutex); mGradidoCurrentBalance = gradidoBalance; } inline int getBalance() { std::shared_lock _lock(mSharedMutex); return mGradidoCurrentBalance; } + std::string getGroupBaseUrl(); + // connection to other tables @@ -164,6 +166,8 @@ namespace controller { //! use it for showing balance in menu in check transaction int mGradidoCurrentBalance; + std::string mGroupBaseUrl; + mutable std::shared_mutex mSharedMutex; }; } diff --git a/src/cpp/model/table/ModelBase.h b/src/cpp/model/table/ModelBase.h index 2d4e499f5..b4c834bf2 100644 --- a/src/cpp/model/table/ModelBase.h +++ b/src/cpp/model/table/ModelBase.h @@ -226,9 +226,7 @@ namespace model { Poco::ScopedLock _poco_lock(mWorkMutex); UNIQUE_LOCK; if (fieldNames.size() != fieldValues.size() || fieldNames.size() <= 1) { - lock(); addError(new Error(getTableName(), "fieldNames and fieldValues size don't match or smaller as 1")); - unlock(); return results; } if (expectedResults > 0) { diff --git a/src/cpp/model/table/NodeServer.cpp b/src/cpp/model/table/NodeServer.cpp index ae3bdbf81..2160fa373 100644 --- a/src/cpp/model/table/NodeServer.cpp +++ b/src/cpp/model/table/NodeServer.cpp @@ -86,6 +86,23 @@ namespace model { return select; } + Poco::Data::Statement NodeServer::_loadMultipleFromDB(Poco::Data::Session session, const std::vector fieldNames, MysqlConditionType conditionType/* = MYSQL_CONDITION_AND*/) + { + Poco::Data::Statement select(session); + select << "SELECT id, url, port, group_id, server_type, node_hedera_id, last_live_sign FROM " << getTableName() + << " where " << fieldNames[0] << " = ? "; + if (conditionType == MYSQL_CONDITION_AND) { + for (int i = 1; i < fieldNames.size(); i++) { + select << " AND " << fieldNames[i] << " = ?"; + } + } + else if (conditionType == MYSQL_CONDITION_OR) { + for (int i = 1; i < fieldNames.size(); i++) { + select << " OR " << fieldNames[i] << " = ?"; + } + } + return select; + } Poco::Data::Statement NodeServer::_loadIdFromDB(Poco::Data::Session session) { diff --git a/src/cpp/model/table/NodeServer.h b/src/cpp/model/table/NodeServer.h index fc92cdc9c..ea1e3e10e 100644 --- a/src/cpp/model/table/NodeServer.h +++ b/src/cpp/model/table/NodeServer.h @@ -55,6 +55,7 @@ namespace model { protected: Poco::Data::Statement _loadFromDB(Poco::Data::Session session, const std::string& fieldName); Poco::Data::Statement _loadMultipleFromDB(Poco::Data::Session session, const std::string& fieldName); + Poco::Data::Statement _loadMultipleFromDB(Poco::Data::Session session, const std::vector fieldNames, MysqlConditionType conditionType = MYSQL_CONDITION_AND); Poco::Data::Statement _loadIdFromDB(Poco::Data::Session session); Poco::Data::Statement _insertIntoDB(Poco::Data::Session session); diff --git a/src/cpsp/checkTransaction.cpsp b/src/cpsp/checkTransaction.cpsp index 2b30f8045..ca4262b11 100644 --- a/src/cpsp/checkTransaction.cpsp +++ b/src/cpsp/checkTransaction.cpsp @@ -249,7 +249,7 @@ enum PageState { } else if(!account_user->getModel()->getGroupId()) { response.redirect(ServerConfig::g_serverPath + "/userUpdateGroup"); } else { - response.redirect(ServerConfig::g_php_serverPath + "state-balances/overview"); + response.redirect(account_user->getGroupBaseUrl() + "state-balances/overview"); } return; } diff --git a/src/cpsp/login.cpsp b/src/cpsp/login.cpsp index bfa7011d2..5309fbbce 100644 --- a/src/cpsp/login.cpsp +++ b/src/cpsp/login.cpsp @@ -156,7 +156,7 @@ response.redirect(refererString); } else { //printf("redirect to: %s\n", ServerConfig::g_php_serverPath.data()); - response.redirect(ServerConfig::g_php_serverPath + "/"); + response.redirect(user->getGroupBaseUrl() + "/"); } return; } diff --git a/src/cpsp/registerDirect.cpsp b/src/cpsp/registerDirect.cpsp index f6c3dc49a..fa7681f9a 100644 --- a/src/cpsp/registerDirect.cpsp +++ b/src/cpsp/registerDirect.cpsp @@ -51,7 +51,7 @@ auto user_host = request.clientAddress().host(); session->setClientIp(user_host); response.addCookie(session->getLoginCookie()); - response.redirect(ServerConfig::g_php_serverPath + "/"); + response.redirect(ServerConfig::g_serverPath + "/userUpdateGroup"); return; } }