diff --git a/src/cpp/HTTPInterface/CheckTransactionPage.cpp b/src/cpp/HTTPInterface/CheckTransactionPage.cpp index 4e6da6f99..2b0d24b9c 100644 --- a/src/cpp/HTTPInterface/CheckTransactionPage.cpp +++ b/src/cpp/HTTPInterface/CheckTransactionPage.cpp @@ -8,6 +8,7 @@ #line 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" #include "../SingletonManager/SessionManager.h" +#include "../SingletonManager/SingletonTaskObserver.h" #include "../model/TransactionCreation.h" #include "../model/TransactionTransfer.h" @@ -39,7 +40,7 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request, if (_compressResponse) response.set("Content-Encoding", "gzip"); Poco::Net::HTMLForm form(request, request.stream()); -#line 21 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 22 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" const char* pageName = gettext("Überprüfe Transaktion"); auto accountUser = mSession->getUser(); @@ -71,8 +72,21 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request, size_t notReadyTransactions = 0; size_t sumTransactions = mSession->getProcessingTransactionCount(); if(sumTransactions == 0) { - Poco::Thread::sleep(1000); - response.redirect(ServerConfig::g_php_serverPath + "state-balances/overview"); + auto observer = SingletonTaskObserver::getInstance(); + auto emailHash = DRMakeStringHash(mSession->getUser()->getEmail()); + int breakCount = 0; + while(observer->getTaskCount(emailHash, TASK_OBSERVER_SIGN_TRANSACTION) > 0) { + if(breakCount > 100) break; + breakCount++; + Poco::Thread::sleep(10); + } + auto lastExternReferer = mSession->getLastReferer(); + if(lastExternReferer != "") { + printf("last extern referer: %s\n", lastExternReferer.data()); + response.redirect(lastExternReferer); + } else { + response.redirect(ServerConfig::g_php_serverPath + "state-balances/overview"); + } return; } auto processingTransaction = mSession->getNextReadyTransaction(¬ReadyTransactions); @@ -229,71 +243,71 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request, responseStream << "
\n"; responseStream << "\t\n"; responseStream << "\t"; -#line 73 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 87 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" if(sumTransactions > 0 && sumTransactions - notReadyTransactions != 1) { responseStream << "\n"; responseStream << "\t\t"; -#line 74 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 88 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" if(notReadyTransactions > 0) { responseStream << " \n"; responseStream << "\t\t\t"; -#line 75 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 89 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( sumTransactions - notReadyTransactions ); responseStream << " "; -#line 75 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 89 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( gettext("von") ); responseStream << " "; -#line 75 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 89 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( sumTransactions ); responseStream << " "; -#line 75 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 89 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( gettext("Transaktionen sind bereit zum bestätigen") ); responseStream << "\n"; responseStream << "\t\t"; -#line 76 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 90 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } else { responseStream << "\n"; responseStream << "\t\t\t"; -#line 77 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 91 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( sumTransactions ); responseStream << " "; -#line 77 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 91 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( gettext("Transaktionen warten darauf bestätigt zu werden.") ); responseStream << "\n"; responseStream << "\t\t"; -#line 78 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 92 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } responseStream << "\n"; responseStream << "\t"; -#line 79 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 93 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } responseStream << "\n"; responseStream << "\t"; -#line 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 94 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" if(state == PAGE_NO_TRANSACTIONS) { responseStream << "\n"; responseStream << "\t\t"; -#line 81 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 95 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" if(sumTransactions == 0) { responseStream << "\n"; responseStream << "\t\t\t"; -#line 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 96 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( gettext("Es gibt zurzeit keine Transaktionen zum bestätigen") ); responseStream << "\n"; responseStream << "\t\t"; -#line 83 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 97 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } else { responseStream << "\n"; responseStream << "\t\t\t"; -#line 84 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 98 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( gettext("Transaktion(en) werden noch vorbereitet, bitte lade die Seite in wenigen Augenblicken erneut.") ); responseStream << "\n"; responseStream << "\t\t"; -#line 85 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 99 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } responseStream << "\n"; responseStream << " "; -#line 86 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 100 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } responseStream << "\n"; responseStream << "\t\n"; responseStream << "
\n"; -#line 89 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 103 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" if(state != PAGE_NO_TRANSACTIONS) { responseStream << "\n"; responseStream << "
\n"; responseStream << "\t
\n"; responseStream << "\t

"; -#line 92 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 106 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( gettext("Transaktion Unterzeichnen") ); responseStream << "

\n"; responseStream << "\t
\n"; @@ -301,96 +315,96 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request, responseStream << "\t\t
\n"; responseStream << "\t\t\t
\n"; responseStream << "\t\t\t"; -#line 97 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 111 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" if(state == PAGE_TRANSACTION_TRANSFER) { auto transferTransaction = processingTransaction->getTransferTransaction(); memo = transferTransaction->getMemo(); responseStream << "\n"; responseStream << "\t\t\t

"; -#line 101 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 115 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( gettext("Überweisung") ); responseStream << "

\n"; responseStream << "\t\t\t
\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t \n"; responseStream << "\t\t\t\t\t\n"; responseStream << "\t\t\t\t \n"; responseStream << "\t\t\t\t \n"; responseStream << "\t\t\t\t "; -#line 108 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 122 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" for(int i = 0; i < transferTransaction->getKontoTableSize(); i++) { responseStream << "\n"; responseStream << "\t\t\t\t\t\n"; responseStream << "\t\t\t\t\t\t"; -#line 110 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 124 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( transferTransaction->getKontoNameCell(i) ); responseStream << "\n"; responseStream << "\t\t\t\t\t\t"; -#line 111 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 125 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( transferTransaction->getAmountCell(i) ); responseStream << "\n"; responseStream << "\t\t\t\t\t\n"; responseStream << "\t\t\t\t\t"; -#line 113 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 127 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } responseStream << "\n"; responseStream << "\t\t\t\t \n"; responseStream << "\t\t\t\t
"; -#line 105 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 119 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( gettext("Konto") ); responseStream << ""; -#line 105 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 119 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( gettext("Gradido") ); responseStream << "
\n"; responseStream << "\t\t\t
\n"; responseStream << "\t\t\t \n"; responseStream << "\t\t\t "; -#line 118 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 132 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } else if(state == PAGE_TRANSACTION_CREATION) { auto creationTransaction = processingTransaction->getCreationTransaction(); auto transactionUser = creationTransaction->getUser(); memo = creationTransaction->getMemo(); responseStream << "\n"; responseStream << "\t\t\t

"; -#line 123 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 137 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( gettext("Schöpfung") ); responseStream << "

\n"; responseStream << "\t\t\t
\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t \n"; responseStream << "\t\t\t\t\t\n"; responseStream << "\t\t\t\t \n"; responseStream << "\t\t\t\t \n"; responseStream << "\t\t\t\t\t\n"; responseStream << "\t\t\t\t\t\t"; -#line 131 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 145 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" if(transactionUser) { responseStream << "\n"; responseStream << "\t\t\t\t\t\t\t\n"; responseStream << "\t\t\t\t\t\t"; -#line 133 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 147 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } else { responseStream << "\n"; responseStream << "\t\t\t\t\t\t\t\n"; responseStream << "\t\t\t\t\t\t"; -#line 135 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 149 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } responseStream << "\n"; responseStream << "\t\t\t\t\t\t\n"; responseStream << "\t\t\t\t\t\n"; @@ -398,22 +412,22 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request, responseStream << "\t\t\t\t
"; -#line 127 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 141 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( gettext("Konto") ); responseStream << ""; -#line 127 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 141 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( gettext("Gradido") ); responseStream << "
"; -#line 132 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 146 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( transactionUser->getFirstName() ); responseStream << " "; -#line 132 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 146 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( transactionUser->getLastName() ); responseStream << " <"; -#line 132 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 146 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( transactionUser->getEmail() ); responseStream << ">0x"; -#line 134 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 148 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( creationTransaction->getPublicHex() ); responseStream << ""; -#line 136 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 150 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( creationTransaction->getAmountString() ); responseStream << " GDD
\n"; responseStream << "\t\t\t
\n"; responseStream << "\t\t\t "; -#line 141 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 155 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } responseStream << "\n"; responseStream << "\t\t\t
\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t \n"; responseStream << "\t\t\t\t \n"; responseStream << "\t\t\t\t
"; -#line 144 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 158 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( gettext("Aktives Konto") ); responseStream << "
"; -#line 145 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 159 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( accountUser->getFirstName() ); responseStream << " "; -#line 145 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 159 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( accountUser->getLastName() ); responseStream << " <"; -#line 145 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 159 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( accountUser->getEmail() ); responseStream << ">
\n"; @@ -421,12 +435,12 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request, responseStream << "\t\t\t
\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t \n"; responseStream << "\t\t\t\t \n"; responseStream << "\t\t\t\t\t \n"; responseStream << "\t\t\t\t
"; -#line 150 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 164 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( gettext("Verwendungszweck") ); responseStream << "
"; -#line 152 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 166 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( memo ); responseStream << "
\n"; @@ -437,32 +451,32 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request, responseStream << "\t\t\t
\n"; responseStream << "\t\t\t\t
\n"; responseStream << "\t\t\t\t "; -#line 160 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 174 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" if(!accountUser->hasCryptoKey()) { responseStream << "\n"; responseStream << "\t\t\t\t
\n"; responseStream << "\t\t\t\t\t \n"; responseStream << "\t\t\t\t\t \n"; responseStream << "\t\t\t\t
\n"; responseStream << "\t\t\t\t"; -#line 165 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 179 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } responseStream << "\n"; responseStream << "\t\t\t\t \n"; responseStream << "\t\t\t\t \n"; @@ -473,7 +487,7 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request, responseStream << "\t
\n"; responseStream << "\t
\n"; responseStream << "
\n"; -#line 181 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 195 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } // begin include footer_ripple.cpsp responseStream << "\t
\n"; responseStream << "
\n"; diff --git a/src/cpp/HTTPInterface/LoginPage.cpp b/src/cpp/HTTPInterface/LoginPage.cpp index 3af2f05b8..b2c9de543 100644 --- a/src/cpp/HTTPInterface/LoginPage.cpp +++ b/src/cpp/HTTPInterface/LoginPage.cpp @@ -91,6 +91,7 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: getErrors(mSession); auto uri_start = request.serverParams().getServerName(); + auto lastExternReferer = mSession->getLastReferer(); switch(userState) { case USER_EMPTY: @@ -109,7 +110,11 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: return; case USER_NO_PRIVATE_KEY: case USER_COMPLETE: - response.redirect(ServerConfig::g_php_serverPath + "/"); + if(lastExternReferer != "") { + response.redirect(lastExternReferer); + } else { + response.redirect(ServerConfig::g_php_serverPath + "/"); + } return; } @@ -183,20 +188,20 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: responseStream << "
\n"; responseStream << "
\n"; responseStream << " \n"; responseStream << "\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t \n"; responseStream << "\t\t\t\t\"logo\"\n"; responseStream << "\t\t\t\n"; @@ -208,29 +213,29 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: responseStream << "
\n"; responseStream << "\t\t\t
\n"; responseStream << "\t\t\t\t"; -#line 137 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" +#line 142 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" responseStream << ( getErrorsHtml() ); responseStream << "\t \n"; responseStream << "\t\t\t
\n"; responseStream << "
\n"; responseStream << "
\n"; responseStream << "\t\t\t \n"; responseStream << "
\n"; responseStream << "
\n"; responseStream << "
\n"; responseStream << " \n"; @@ -239,12 +244,12 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: responseStream << "
\n"; responseStream << "
\n"; responseStream << " \n"; @@ -255,39 +260,39 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: responseStream << "
\n"; responseStream << "
\n"; responseStream << " gettext("E-Mail") ); responseStream << "\" value=\""; -#line 163 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" +#line 168 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" responseStream << ( presetEmail ); responseStream << "\"/>\n"; responseStream << "
\n"; responseStream << "
\n"; responseStream << " gettext("Password") ); responseStream << "\" />\n"; responseStream << "
\n"; responseStream << " \n"; responseStream << "
\n"; responseStream << "

"; -#line 170 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" +#line 175 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" responseStream << ( langCatalog->gettext("You haven't any account yet? Please follow the link to create one.") ); responseStream << "

\n"; responseStream << " "; -#line 171 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" +#line 176 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" responseStream << ( langCatalog->gettext("Create New Account") ); responseStream << "\n"; responseStream << "
\n"; responseStream << "\t\t\t\t\t
\n"; diff --git a/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp b/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp index 6097c6065..8fb8d7834 100644 --- a/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp +++ b/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp @@ -42,12 +42,18 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c std::string dateTimeString = Poco::DateTimeFormatter::format(Poco::DateTime(), "%d.%m.%y %H:%M:%S"); mRemoveGETParameters.extract(uri, url_first_part); + std::string externReferer; + if (uri != "/favicon.ico") { //printf("[PageRequestHandlerFactory] uri: %s, first part: %s\n", uri.data(), url_first_part.data()); - /*auto referer = request.find("Referer"); + auto referer = request.find("Referer"); if (referer != request.end()) { - printf("referer: %s\n", referer->second.data()); - }*/ + //printf("referer: %s\n", referer->second.data()); + auto refererString = referer->second; + if (refererString.find(ServerConfig::g_serverPath) == refererString.npos) { + externReferer = refererString; + } + }//*/ } if (url_first_part == "/elopage_webhook_261") { @@ -67,6 +73,7 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c try { session_id = atoi(cookies.get("GRADIDO_LOGIN").data()); } catch (...) {} + auto sm = SessionManager::getInstance(); auto s = sm->getSession(session_id); @@ -99,6 +106,10 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c return resetPassword; } if (s) { + if (externReferer != "") { + s->setLastReferer(externReferer); + } + auto user = s->getUser(); if (s->errorCount() || (!user.isNull() && user->errorCount())) { user->sendErrorsAsEmail(); diff --git a/src/cpp/JSONInterface/JsonGetUsers.cpp b/src/cpp/JSONInterface/JsonGetUsers.cpp new file mode 100644 index 000000000..d77546040 --- /dev/null +++ b/src/cpp/JSONInterface/JsonGetUsers.cpp @@ -0,0 +1,88 @@ +#include "JsonGetUsers.h" +#include "Poco/URI.h" + +#include "../SingletonManager/SessionManager.h" +#include "../model/table/User.h" + +Poco::JSON::Object* JsonGetUsers::handle(Poco::Dynamic::Var params) +{ + + int session_id = 0; + Poco::JSON::Object* result = new Poco::JSON::Object; + if (params.isStruct()) { + session_id = params["session_id"]; + //std::string miau = params["miau"]; + } + else if (params.isVector()) { + try { + const Poco::URI::QueryParameters queryParams = params.extract(); + for (auto it = queryParams.begin(); it != queryParams.end(); it++) { + if (it->first == "session_id") { + session_id = stoi(it->second); + break; + } + } + //auto var = params[0]; + } + catch (const std::invalid_argument& ia) { + result->set("state", "error"); + result->set("msg", "error parsing query params, invalid argument: "); + result->set("details", ia.what()); + return result; + } + catch (const std::out_of_range& oor) { + result->set("state", "error"); + result->set("msg", "error parsing query params, Out of Range error: "); + result->set("details", oor.what()); + return result; + } + catch (const std::logic_error & ler) { + result->set("state", "error"); + result->set("msg", "error parsing query params, Logical error: "); + result->set("details", ler.what()); + return result; + } + catch (Poco::Exception& ex) { + //printf("[JsonGetLogin::handle] exception: %s\n", ex.displayText().data()); + result->set("state", "error"); + result->set("msg", "error parsing query params, Poco Error"); + result->set("details", ex.displayText()); + return result; + } + } + + if (session_id) { + auto sm = SessionManager::getInstance(); + auto session = sm->getSession(session_id); + //Session* session = nullptr; + if (session) { + auto user = session->getUser(); + if (!user) { + result->set("state", "not found"); + result->set("msg", "Session didn't contain user"); + return result; + } + result->set("state", "success"); + result->set("clientIP", session->getClientIp().toString()); + Poco::JSON::Object usersObj; + model::table::User newUser; + //auto newUsers = newUser.loadFromDB("email_checked", 0, 0); + result->set("user", user->getJson()); + result->set("Transaction.pending", session->getProcessingTransactionCount()); + //printf("pending: %d\n", session->getProcessingTransactionCount()); + return result; + } + else { + result->set("state", "not found"); + result->set("msg", "Session not found"); + return result; + } + + } + else { + result->set("state", "error"); + result->set("msg", "empty session id"); + } + + return result; +} \ No newline at end of file diff --git a/src/cpp/JSONInterface/JsonGetUsers.h b/src/cpp/JSONInterface/JsonGetUsers.h new file mode 100644 index 000000000..37cbe47f2 --- /dev/null +++ b/src/cpp/JSONInterface/JsonGetUsers.h @@ -0,0 +1,16 @@ +#ifndef __JSON_INTERFACE_JSON_GET_LOGIN_ +#define __JSON_INTERFACE_JSON_GET_LOGIN_ + +#include "JsonRequestHandler.h" + +class JsonGetUsers : public JsonRequestHandler +{ +public: + Poco::JSON::Object* handle(Poco::Dynamic::Var params); + +protected: + + +}; + +#endif // __JSON_INTERFACE_JSON_GET_LOGIN_ \ No newline at end of file diff --git a/src/cpp/SingletonManager/SessionManager.cpp b/src/cpp/SingletonManager/SessionManager.cpp index 7240732c1..6fe1ea240 100644 --- a/src/cpp/SingletonManager/SessionManager.cpp +++ b/src/cpp/SingletonManager/SessionManager.cpp @@ -443,6 +443,7 @@ void SessionManager::deleteLoginCookies(Poco::Net::HTTPServerRequest& request, P // max age of 0 delete cookie keks.setMaxAge(0); response.addCookie(keks); + printf("remove PHP Kekse\n"); } diff --git a/src/cpp/SingletonManager/SingletonTaskObserver.cpp b/src/cpp/SingletonManager/SingletonTaskObserver.cpp index ccf863c1e..d024ea8c3 100644 --- a/src/cpp/SingletonManager/SingletonTaskObserver.cpp +++ b/src/cpp/SingletonManager/SingletonTaskObserver.cpp @@ -41,7 +41,7 @@ void SingletonTaskObserver::addTask(const std::string& email, TaskObserverType t entry = new UserObserverEntry(email, id); mObserverEntrys.addByHash(id, entry); } - if (entry->mEmail != email) { + if (entry->mEmail != "" && entry->mEmail != email) { em->addError(new ParamError(funcName, "hash collision with ", email.data())); em->addError(new ParamError(funcName, "and ", entry->mEmail.data())); em->sendErrorsAsEmail(); @@ -172,6 +172,20 @@ int SingletonTaskObserver::getTaskCount(const std::string& email, TaskObserverTy return count; } +int SingletonTaskObserver::getTaskCount(DHASH id, TaskObserverType type) +{ + lock("SingletonTaskObserver::getTaskCount"); + UserObserverEntry* entry = static_cast(mObserverEntrys.findByHash(id)); + if (!entry) { + unlock(); + return -1; + } + + int count = entry->mTasksCount[type]; + unlock(); + return count; +} + std::vector SingletonTaskObserver::getTasksCount(const std::string& email) { DHASH id = makeHash(email); diff --git a/src/cpp/SingletonManager/SingletonTaskObserver.h b/src/cpp/SingletonManager/SingletonTaskObserver.h index 8afc26098..3eb7983f2 100644 --- a/src/cpp/SingletonManager/SingletonTaskObserver.h +++ b/src/cpp/SingletonManager/SingletonTaskObserver.h @@ -44,6 +44,7 @@ public: //! \return -1 if no entry for email found int getTaskCount(const std::string& email, TaskObserverType type); + int getTaskCount(DHASH id, TaskObserverType type); std::vector getTasksCount(const std::string& email); static const char* TaskObserverTypeToString(TaskObserverType type); diff --git a/src/cpp/model/Session.h b/src/cpp/model/Session.h index 54fceae98..9ccb349ee 100644 --- a/src/cpp/model/Session.h +++ b/src/cpp/model/Session.h @@ -148,6 +148,10 @@ public: Languages getLanguage(); inline const char* gettext(const char* text) { if (mLanguageCatalog.isNull()) return text; return mLanguageCatalog->gettext(text); } + // last referer + inline void setLastReferer(const std::string& lastReferer) { mLastExternReferer = lastReferer; } + inline const std::string& getLastReferer() const { return mLastExternReferer; } + protected: void updateTimeout(); inline void setHandle(int newHandle) { mHandleId = newHandle; } @@ -164,6 +168,7 @@ private: std::string mPassphrase; Poco::DateTime mLastActivity; Poco::Net::IPAddress mClientLoginIP; + std::string mLastExternReferer; Poco::AutoPtr mEmailVerificationCodeObject; diff --git a/src/cpp/model/table/ModelBase.h b/src/cpp/model/table/ModelBase.h index cfaa0a65d..b35811d27 100644 --- a/src/cpp/model/table/ModelBase.h +++ b/src/cpp/model/table/ModelBase.h @@ -88,7 +88,7 @@ namespace model { template std::vector ModelBase::loadFromDB(const std::string& fieldName, const WhereFieldType& fieldValue, int expectedResults) { - printf("ModelBase::loadFromDB multi\n"); + //printf("ModelBase::loadFromDB multi\n"); std::vector results; return results; if (expectedResults > 0) { diff --git a/src/cpp/model/table/User.h b/src/cpp/model/table/User.h index b772634b5..bbe1da92d 100644 --- a/src/cpp/model/table/User.h +++ b/src/cpp/model/table/User.h @@ -22,6 +22,8 @@ namespace model { USER_FIELDS_LANGUAGE }; + + class User : public ModelBase { public: diff --git a/src/cpp/tasks/SigningTransaction.cpp b/src/cpp/tasks/SigningTransaction.cpp index 3d23768a2..f3c65115d 100644 --- a/src/cpp/tasks/SigningTransaction.cpp +++ b/src/cpp/tasks/SigningTransaction.cpp @@ -100,7 +100,7 @@ int SigningTransaction::run() { // finalize - printf("sigpair size: %d\n", transaction.sigmap().sigpair_size()); + //printf("sigpair size: %d\n", transaction.sigmap().sigpair_size()); std::string finalTransactionBin = transaction.SerializeAsString(); if (finalTransactionBin == "") { addError(new Error("SigningTransaction", "error serializing final transaction")); @@ -123,7 +123,7 @@ int SigningTransaction::run() { Poco::JSON::Object requestJson; requestJson.set("method", "putTransaction"); requestJson.set("transaction", std::string((char*)*finalBase64Bin)); - printf("\nbase64 transaction: \n%s\n\n", (char*)*finalBase64Bin); + //printf("\nbase64 transaction: \n%s\n\n", (char*)*finalBase64Bin); mm->releaseMemory(finalBase64Bin); @@ -188,7 +188,7 @@ int SigningTransaction::run() { sendErrorsAsEmail(); return -10; } - printf("state: %s\n", stateString.data()); + //printf("state: %s\n", stateString.data()); int zahl = 1; } catch (Poco::Exception& e) { diff --git a/src/cpsp/checkTransaction.cpsp b/src/cpsp/checkTransaction.cpsp index a2b1f6c3f..0675ae3c8 100644 --- a/src/cpsp/checkTransaction.cpsp +++ b/src/cpsp/checkTransaction.cpsp @@ -6,6 +6,7 @@ <%@ page compressed="true" %> <%! #include "../SingletonManager/SessionManager.h" +#include "../SingletonManager/SingletonTaskObserver.h" #include "../model/TransactionCreation.h" #include "../model/TransactionTransfer.h" @@ -49,8 +50,21 @@ enum PageState { size_t notReadyTransactions = 0; size_t sumTransactions = mSession->getProcessingTransactionCount(); if(sumTransactions == 0) { - Poco::Thread::sleep(1000); - response.redirect(ServerConfig::g_php_serverPath + "state-balances/overview"); + auto observer = SingletonTaskObserver::getInstance(); + auto emailHash = DRMakeStringHash(mSession->getUser()->getEmail()); + int breakCount = 0; + while(observer->getTaskCount(emailHash, TASK_OBSERVER_SIGN_TRANSACTION) > 0) { + if(breakCount > 100) break; + breakCount++; + Poco::Thread::sleep(10); + } + auto lastExternReferer = mSession->getLastReferer(); + if(lastExternReferer != "") { + printf("last extern referer: %s\n", lastExternReferer.data()); + response.redirect(lastExternReferer); + } else { + response.redirect(ServerConfig::g_php_serverPath + "state-balances/overview"); + } return; } auto processingTransaction = mSession->getNextReadyTransaction(¬ReadyTransactions); diff --git a/src/cpsp/login.cpsp b/src/cpsp/login.cpsp index 233878949..884f1d989 100644 --- a/src/cpsp/login.cpsp +++ b/src/cpsp/login.cpsp @@ -70,6 +70,7 @@ getErrors(mSession); auto uri_start = request.serverParams().getServerName(); + auto lastExternReferer = mSession->getLastReferer(); switch(userState) { case USER_EMPTY: @@ -88,7 +89,11 @@ return; case USER_NO_PRIVATE_KEY: case USER_COMPLETE: - response.redirect(ServerConfig::g_php_serverPath + "/"); + if(lastExternReferer != "") { + response.redirect(lastExternReferer); + } else { + response.redirect(ServerConfig::g_php_serverPath + "/"); + } return; }