From 2b1f0f1b2dfa011c3eb80d20dac248703ecca016 Mon Sep 17 00:00:00 2001 From: Dario Date: Wed, 4 Dec 2019 17:04:14 +0100 Subject: [PATCH] update check transaction --- src/cpp/HTTPInterface/CheckEmailPage.cpp | 7 +- .../HTTPInterface/CheckTransactionPage.cpp | 550 ++++++++++++------ src/cpp/HTTPInterface/ElopageWebhook.cpp | 14 +- src/cpp/JSONInterface/JsonRequestHandler.cpp | 43 +- src/cpp/JSONInterface/JsonRequestHandler.h | 5 + src/cpp/JSONInterface/JsonTransaction.cpp | 78 ++- src/cpp/ServerConfig.cpp | 5 +- src/cpp/ServerConfig.h | 2 + src/cpp/main.cpp | 11 + src/cpp/model/TransactionBase.h | 2 +- src/cpp/model/TransactionCreation.cpp | 2 +- src/cpp/model/TransactionTransfer.cpp | 143 ++++- src/cpp/model/TransactionTransfer.h | 20 + src/cpp/model/User.cpp | 22 +- src/cpp/model/User.h | 5 + src/cpsp/checkTransaction.cpsp | 155 +++-- src/cpsp/footer_ripple.cpsp | 41 ++ src/cpsp/header.cpsp | 4 +- src/cpsp/header_navi.cpsp | 91 +++ src/cpsp/header_old.cpsp | 2 +- 20 files changed, 958 insertions(+), 244 deletions(-) create mode 100644 src/cpsp/footer_ripple.cpsp create mode 100644 src/cpsp/header_navi.cpsp diff --git a/src/cpp/HTTPInterface/CheckEmailPage.cpp b/src/cpp/HTTPInterface/CheckEmailPage.cpp index 3229c385b..85415788c 100644 --- a/src/cpp/HTTPInterface/CheckEmailPage.cpp +++ b/src/cpp/HTTPInterface/CheckEmailPage.cpp @@ -93,10 +93,13 @@ void CheckEmailPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco:: responseStream << ( ServerConfig::g_php_serverPath ); responseStream << "css/loginServer/style.css\">\n"; responseStream << "\n"; - responseStream << "\n"; + responseStream << "\n"; responseStream << "
\n"; responseStream << "\t

Login Server in Entwicklung

\n"; - responseStream << "\t

Alpha 0.8.1

\n"; + responseStream << "\t

Alpha "; +#line 15 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp" + responseStream << ( ServerConfig::g_versionString ); + responseStream << "

\n"; responseStream << "
\n"; responseStream << "\n"; responseStream << "\n"; - responseStream << "\n"; + responseStream << "css/rippleUI/style.css\">\n"; + responseStream << "\n"; responseStream << "\n"; - responseStream << "\n"; + responseStream << "\n"; responseStream << "
\n"; responseStream << "\t

Login Server in Entwicklung

\n"; - responseStream << "\t

Alpha 0.6.0

\n"; + responseStream << "\t

Alpha "; +#line 17 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi.cpsp" + responseStream << ( ServerConfig::g_versionString ); + responseStream << "

\n"; responseStream << "
\n"; - responseStream << ""; - // end include header.cpsp - // begin include navi.cpsp - responseStream << ""; - // end include navi.cpsp - responseStream << "\n"; - responseStream << "
\n"; - responseStream << "\t

Eine Transaktion prüfen

\n"; - responseStream << "\t"; -#line 68 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << "img/logo_schrift_half.webp\" alt=\"Logo\">\n"; + responseStream << " \"Logo\"\n"; + responseStream << " \n"; + responseStream << " \n"; + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << " \n"; + responseStream << "
"; +#line 51 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi.cpsp" responseStream << ( getErrorsHtml() ); + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << " \n"; + responseStream << "
\n"; + responseStream << " \n"; + responseStream << "
\n"; + responseStream << " \n"; + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << " \n"; + responseStream << "
\n"; + responseStream << "
"; + // end include header_navi.cpsp responseStream << "\n"; + responseStream << "
\n"; + responseStream << "\t\n"; responseStream << "\t"; -#line 69 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 70 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" if(sumTransactions > 0 && sumTransactions - notReadyTransactions != 1) { responseStream << "\n"; responseStream << "\t\t"; -#line 70 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 71 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" if(notReadyTransactions > 0) { responseStream << " \n"; - responseStream << "\t\t\t
";
-#line 71 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
-	responseStream << ( sumTransactions - notReadyTransactions );
-	responseStream << " von ";
-#line 71 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
-	responseStream << ( sumTransactions );
-	responseStream << " Transaktionen sind bereit zum prüfen
\n"; - responseStream << "\t\t"; + responseStream << "\t\t\t"; +#line 72 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << ( sumTransactions - notReadyTransactions ); + responseStream << " "; +#line 72 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << ( gettext("von") ); + responseStream << " "; #line 72 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" - } else { responseStream << "\n"; - responseStream << "\t\t\t
";
-#line 73 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
 	responseStream << ( sumTransactions );
-	responseStream << " Transaktionen warten darauf überprüft zu werden.
\n"; + responseStream << " "; +#line 72 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << ( gettext("Transaktionen sind bereit zum bestätigen") ); + responseStream << "\n"; responseStream << "\t\t"; +#line 73 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + } else { responseStream << "\n"; + responseStream << "\t\t\t"; #line 74 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" - } responseStream << "\n"; - responseStream << "\t"; + responseStream << ( sumTransactions ); + responseStream << " "; +#line 74 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << ( gettext("Transaktionen warten darauf bestätigt zu werden.") ); + responseStream << "\n"; + responseStream << "\t\t"; #line 75 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } responseStream << "\n"; responseStream << "\t"; #line 76 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + } responseStream << "\n"; + responseStream << "\t"; +#line 77 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" if(state == PAGE_NO_TRANSACTIONS) { responseStream << "\n"; - responseStream << "\t
\n"; responseStream << "\t\t"; #line 78 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" if(sumTransactions == 0) { responseStream << "\n"; - responseStream << "\t\t\t
Es gibt zurzeit keine Transaktionen zum überprüfen
\n"; + responseStream << "\t\t\t"; +#line 79 "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 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } else { responseStream << "\n"; - responseStream << "\t\t\t
Transaktion(en) werden noch vorbereitet, bitte lade die Seite in wenigen Augenblicken erneut.
\n"; + responseStream << "\t\t\t"; +#line 81 "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 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } responseStream << "\n"; - responseStream << "\t
\n"; - responseStream << "\t\n"; - responseStream << "\t"; -#line 85 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" - } else if(state == PAGE_TRANSACTION_CREATION) { - auto creationTransaction = processingTransaction->getCreationTransaction(); - auto transactionUser = creationTransaction->getUser(); - - responseStream << "\n"; - responseStream << "\t
\n"; - responseStream << "\t\t

Schöpfungstransaktion

\n"; - responseStream << "\t\tMemo: \n"; - responseStream << "\t\t

"; -#line 93 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" - responseStream << ( creationTransaction->getMemo() ); + responseStream << " "; +#line 83 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + } responseStream << "\n"; + responseStream << "\t\n"; + responseStream << "

\n"; +#line 86 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + if(state != PAGE_NO_TRANSACTIONS) { responseStream << "\n"; + responseStream << "
\n"; + responseStream << "\t
\n"; + responseStream << "\t

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

\n"; - responseStream << "\t\tEmpfänger: \n"; - responseStream << "\t\t"; -#line 95 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << "\t
\n"; + responseStream << "\t\t
\n"; + responseStream << "\t\t
\n"; + responseStream << "\t\t\t
\n"; + responseStream << "\t\t\t"; +#line 94 "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 98 "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 105 "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 107 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << ( transferTransaction->getKontoNameCell(i) ); + responseStream << "\n"; + responseStream << "\t\t\t\t\t\t"; +#line 108 "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 110 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + } responseStream << "\n"; + responseStream << "\t\t\t\t \n"; + responseStream << "\t\t\t\t
"; +#line 102 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << ( gettext("Konto") ); + responseStream << ""; +#line 102 "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 115 "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 120 "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 128 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" if(transactionUser) { responseStream << "\n"; - responseStream << "\t\t\t

"; -#line 96 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << "\t\t\t\t\t\t\t

\n"; + responseStream << "\t\t\t\t\t\t"; +#line 130 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } else { responseStream << "\n"; - responseStream << "\t\t\t

"; -#line 99 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << "\t\t\t\t\t\t\t

\n"; + responseStream << "\t\t\t\t\t\t"; +#line 132 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } responseStream << "\n"; - responseStream << "\t\tSumme: \n"; - responseStream << "\t\t"; -#line 102 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << "\t\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 124 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << ( gettext("Konto") ); + responseStream << ""; +#line 124 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << ( gettext("Gradido") ); + responseStream << "
"; +#line 129 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( transactionUser->getFirstName() ); responseStream << " "; -#line 96 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 129 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( transactionUser->getLastName() ); - responseStream << "

\n"; - responseStream << "\t\t\t

"; -#line 97 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << " <"; +#line 129 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( transactionUser->getEmail() ); - responseStream << "

\n"; - responseStream << "\t\t"; -#line 98 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << ">
0x"; +#line 131 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( creationTransaction->getPublicHex() ); - responseStream << "

\n"; - responseStream << "\t\t"; -#line 100 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << "
"; +#line 133 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( creationTransaction->getAmountString() ); - responseStream << " Gradido\n"; - responseStream << "\t\t
\n"; - responseStream << "\t\t\tUnterschreiben mit aktuellem Account?
\n"; - responseStream << "\t\t\t

"; -#line 105 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << " GDD

\n"; + responseStream << "\t\t\t
\n"; + responseStream << "\t\t\t "; +#line 138 "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 141 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << ( gettext("Aktives Konto") ); + responseStream << "
"; +#line 142 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( accountUser->getFirstName() ); responseStream << " "; -#line 105 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" +#line 142 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( accountUser->getLastName() ); - responseStream << "

\n"; - responseStream << "\t\t\t

"; -#line 106 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << " <"; +#line 142 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" responseStream << ( accountUser->getEmail() ); - responseStream << "

\n"; - responseStream << "\t\t\t"; -#line 107 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" - // TODO: additional password check responseStream << "\n"; - responseStream << "\t\t\t"; -#line 108 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << ">
\n"; + responseStream << "\t\t\t
\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\t \n"; + responseStream << "\t\t\t\t
"; +#line 147 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << ( gettext("Verwendungszweck") ); + responseStream << "
"; +#line 149 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + responseStream << ( memo ); + responseStream << "
\n"; + responseStream << "\t\t\t
\n"; + responseStream << "\t\t\t
\n"; + responseStream << "\t\t
\n"; + responseStream << "\t\t\t\n"; + responseStream << "\t\t\t
\n"; + responseStream << "\t\t\t\t
\n"; + responseStream << "\t\t\t\t "; +#line 157 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" if(!accountUser->hasCryptoKey()) { responseStream << "\n"; - responseStream << "\t\t\t

Ich brauche nochmal dein Passwort

\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"; -#line 114 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" - } responseStream << "\n"; - responseStream << "\t\t\t\n"; - responseStream << "\t\t\t\n"; - responseStream << "\t\t\n"; - responseStream << "\t
\t\n"; - responseStream << "\t"; -#line 119 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + 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 162 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" } responseStream << "\n"; + responseStream << "\t\t\t\t \n"; + responseStream << "\t\t\t\t \n"; + responseStream << "\t\t\t\t
\n"; + responseStream << "\t\t\t
\n"; + responseStream << "\t\t\t\n"; + responseStream << "\t\t
\n"; + responseStream << "\t
\n"; + responseStream << "\t
\n"; responseStream << "
\n"; - // begin include footer.cpsp - responseStream << "\t
\n"; - responseStream << "\t\t\t"; -#line 2 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\footer.cpsp" +#line 178 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp" + } // begin include footer_ripple.cpsp + responseStream << "\t
\n"; + responseStream << "
\n"; + responseStream << " \n"; + responseStream << " \n"; + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << " \n"; + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << " Copyright © 2019 Gradido\n"; + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << " \n"; + responseStream << "
\n"; + responseStream << " \n"; + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << " "; +#line 23 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\footer_ripple.cpsp" responseStream << ( mTimeProfiler.string() ); responseStream << "\n"; - responseStream << "\t
\n"; - responseStream << "\n"; - responseStream << ""; - // end include footer.cpsp + responseStream << "
\n"; + responseStream << " \n"; + responseStream << " \n"; + responseStream << " \n"; + responseStream << " \n"; + responseStream << " \n"; + responseStream << " \n"; + responseStream << " \n"; + responseStream << " \n"; + responseStream << " \n"; + responseStream << " \n"; + responseStream << " \n"; + responseStream << " \n"; + responseStream << " \n"; + responseStream << " \n"; + responseStream << " \n"; + responseStream << "\n"; + responseStream << " "; + // end include footer_ripple.cpsp if (_compressResponse) _gzipStream.close(); } diff --git a/src/cpp/HTTPInterface/ElopageWebhook.cpp b/src/cpp/HTTPInterface/ElopageWebhook.cpp index dfd70a90c..8cbffe62c 100644 --- a/src/cpp/HTTPInterface/ElopageWebhook.cpp +++ b/src/cpp/HTTPInterface/ElopageWebhook.cpp @@ -238,8 +238,20 @@ int HandleElopageRequestTask::run() std::string order_id = mRequestData.get("order_id", ""); auto param_error_order_id = new ParamError("HandleElopageRequestTask", "order_id", order_id.data()); + /*! + * + + Registrierung – Schritt 1 von 3, 36001 + Gradido-Basis, 43741 + Premium-Mitgliedschaft, 43870 + Gold-Mitgliedschaft, 43944 + Business-Mitgliedschaft, 43960 + + + * + */ // only for product 36001 and 43741 create user accounts and send emails - if (product_id == 36001 || product_id == 43741) { + if (product_id == 36001 || product_id == 43741 || product_id == 43870 || product_id == 43944 || product_id == 43960) { mEmail = mRequestData.get("payer[email]", ""); mFirstName = mRequestData.get("payer[first_name]", ""); mLastName = mRequestData.get("payer[last_name]", ""); diff --git a/src/cpp/JSONInterface/JsonRequestHandler.cpp b/src/cpp/JSONInterface/JsonRequestHandler.cpp index 55b40cb07..76b6dda28 100644 --- a/src/cpp/JSONInterface/JsonRequestHandler.cpp +++ b/src/cpp/JSONInterface/JsonRequestHandler.cpp @@ -27,14 +27,19 @@ void JsonRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& request, Po Poco::JSON::Object* json_result = nullptr; if (method == "POST" || method == "PUT") { // extract parameter from request - Poco::JSON::Parser jsonParser; - try { + Poco::Dynamic::Var parsedResult = parseJsonWithErrorPrintFile(request_stream); + //Poco::JSON::Parser jsonParser; + + /*try { auto params = jsonParser.parse(request_stream); // call logic json_result = handle(params); } catch (Poco::Exception& ex) { printf("[JsonRequestHandler::handleRequest] Exception: %s\n", ex.displayText().data()); + }*/ + if (parsedResult.size() != 0) { + json_result = handle(parsedResult); } } else if(method == "GET") { @@ -50,3 +55,37 @@ void JsonRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& request, Po //if (_compressResponse) _gzipStream.close(); } + + +Poco::Dynamic::Var JsonRequestHandler::parseJsonWithErrorPrintFile(std::istream& request_stream, ErrorList* errorHandler /* = nullptr*/, const char* functionName /* = nullptr*/) +{ + // debugging answer + + std::stringstream responseStringStream; + for (std::string line; std::getline(request_stream, line); ) { + responseStringStream << line << std::endl; + } + + // extract parameter from request + Poco::JSON::Parser jsonParser; + Poco::Dynamic::Var parsedJson; + try { + parsedJson = jsonParser.parse(responseStringStream.str()); + + return parsedJson; + } + catch (Poco::Exception& ex) { + if (errorHandler) { + errorHandler->addError(new ParamError(functionName, "error parsing request answer", ex.displayText().data())); + errorHandler->sendErrorsAsEmail(responseStringStream.str()); + } + std::string dateTimeString = Poco::DateTimeFormatter::format(Poco::DateTime(), "%d.%m.%y %H:%M:%S"); + std::string filename = dateTimeString + "_response.html"; + FILE* f = fopen(filename.data(), "wt"); + std::string responseString = responseStringStream.str(); + fwrite(responseString.data(), 1, responseString.size(), f); + fclose(f); + return Poco::Dynamic::Var(); + } + return Poco::Dynamic::Var(); +} \ No newline at end of file diff --git a/src/cpp/JSONInterface/JsonRequestHandler.h b/src/cpp/JSONInterface/JsonRequestHandler.h index fca79dd31..0142db1ca 100644 --- a/src/cpp/JSONInterface/JsonRequestHandler.h +++ b/src/cpp/JSONInterface/JsonRequestHandler.h @@ -4,6 +4,9 @@ #include "Poco/Net/HTTPRequestHandler.h" #include "Poco/JSON/Object.h" +#include "../lib/ErrorList.h" + + class JsonRequestHandler : public Poco::Net::HTTPRequestHandler { public: @@ -11,6 +14,8 @@ public: virtual Poco::JSON::Object* handle(Poco::Dynamic::Var params) = 0; + static Poco::Dynamic::Var parseJsonWithErrorPrintFile(std::istream& request_stream, ErrorList* errorHandler = nullptr, const char* functionName = nullptr); + protected: diff --git a/src/cpp/JSONInterface/JsonTransaction.cpp b/src/cpp/JSONInterface/JsonTransaction.cpp index 0f1f4e2f2..bc747db05 100644 --- a/src/cpp/JSONInterface/JsonTransaction.cpp +++ b/src/cpp/JSONInterface/JsonTransaction.cpp @@ -8,7 +8,56 @@ Poco::JSON::Object* JsonTransaction::handle(Poco::Dynamic::Var params) Poco::JSON::Object* result = new Poco::JSON::Object; int session_id = 0; - if (params.isVector()) { + // if is json object + if (params.type() == typeid(Poco::JSON::Object::Ptr)) { + Poco::JSON::Object::Ptr paramJsonObject = params.extract(); + + try { + /// Throws a RangeException if the value does not fit + /// into the result variable. + /// Throws a NotImplementedException if conversion is + /// not available for the given type. + /// Throws InvalidAccessException if Var is empty. + paramJsonObject->get("session_id").convert(session_id); + auto sm = SessionManager::getInstance(); + if (session_id != 0) { + auto session = sm->getSession(session_id); + if (!session) { + result->set("state", "error"); + result->set("msg", "session not found"); + return result; + } + + int balance = 0; + paramJsonObject->get("balance").convert(balance); + if (balance) { + auto u = session->getUser(); + if (u) { + u->setBalance(balance); + } + } + + std::string transactionBase64String; + paramJsonObject->get("transaction_base64").convert(transactionBase64String); + + if (!session->startProcessingTransaction(transactionBase64String)) { + auto lastError = session->getLastError(); + if (lastError) delete lastError; + result->set("state", "error"); + result->set("msg", "already enlisted"); + return result; + } + + result->set("state", "success"); + return result; + } + + } + catch (Poco::Exception& ex) { + printf("[JsonTransaction::handle] try to use params as jsonObject: %s\n", ex.displayText().data()); + } + } + else if (params.isVector()) { const Poco::URI::QueryParameters queryParams = params.extract(); auto transactionIT = queryParams.begin(); for (auto it = queryParams.begin(); it != queryParams.end(); it++) { @@ -44,9 +93,32 @@ Poco::JSON::Object* JsonTransaction::handle(Poco::Dynamic::Var params) return result; } } + else if (params.isStruct()) { + result->set("state", "error"); + result->set("msg", "struct not implemented yet"); + } + else if (params.isArray()) { + result->set("state", "error"); + result->set("msg", "array not implemented yet"); + } + else if (params.isList()) { + result->set("state", "error"); + result->set("msg", "list not implemented yet"); + } + else if (params.isString()) { + result->set("state", "error"); + result->set("msg", "string not implemented yet"); + } + else if (params.isDeque()) { + result->set("state", "error"); + result->set("meg", "deque not implemented yet"); + } + else { - result->set("state", "error"); - result->set("msg", "format not implemented"); + result->set("state", "error"); + result->set("msg", "format not implemented"); + result->set("details", std::string(params.type().name())); + } return result; } \ No newline at end of file diff --git a/src/cpp/ServerConfig.cpp b/src/cpp/ServerConfig.cpp index b917a39e5..305fd701b 100644 --- a/src/cpp/ServerConfig.cpp +++ b/src/cpp/ServerConfig.cpp @@ -43,8 +43,8 @@ namespace ServerConfig { std::string g_php_serverPath; std::string g_php_serverHost; Poco::Mutex g_TimeMutex; - - + int g_FakeLoginSleepTime = 820; + std::string g_versionString = ""; bool loadMnemonicWordLists() { @@ -100,6 +100,7 @@ namespace ServerConfig { g_default_locale = LanguageManager::languageFromString(cfg.getString("loginServer.default_locale")); g_php_serverPath = cfg.getString("phpServer.url", ""); g_php_serverHost = cfg.getString("phpServer.host", ""); + //g_FakeLoginSleepTime = cfg.getInt("crypto.fake_login_sleep_time", g_FakeLoginSleepTime); return true; } diff --git a/src/cpp/ServerConfig.h b/src/cpp/ServerConfig.h index ad19858af..e1acdd2bf 100644 --- a/src/cpp/ServerConfig.h +++ b/src/cpp/ServerConfig.h @@ -43,6 +43,8 @@ namespace ServerConfig { extern std::string g_php_serverPath; extern std::string g_php_serverHost; extern Poco::Mutex g_TimeMutex; + extern int g_FakeLoginSleepTime; + extern std::string g_versionString; bool loadMnemonicWordLists(); bool initServerCrypto(const Poco::Util::LayeredConfiguration& cfg); diff --git a/src/cpp/main.cpp b/src/cpp/main.cpp index 68d6bf2c4..4c3017057 100644 --- a/src/cpp/main.cpp +++ b/src/cpp/main.cpp @@ -5,8 +5,12 @@ #include "model/User.h" #include "model/Session.h" +#include "lib/Profiler.h" +#include "ServerConfig.h" #ifndef _TEST_BUILD + + int main(int argc, char** argv) { GOOGLE_PROTOBUF_VERIFY_VERSION; @@ -15,8 +19,15 @@ int main(int argc, char** argv) printf("error initing sodium, early exit\n"); return -1; } + ServerConfig::g_versionString = "0.9.0"; printf("User size: %d Bytes, Session size: %d Bytes\n", sizeof(User), sizeof(Session)); + // first check time for crypto + auto testUser = new User("email@google.de", "Max", "Mustermann"); + Profiler timeUsed; + testUser->validatePwd("haz27Newpassword", nullptr); + ServerConfig::g_FakeLoginSleepTime = (int)std::round(timeUsed.millis()); + delete testUser; Gradido_LoginServer app; diff --git a/src/cpp/model/TransactionBase.h b/src/cpp/model/TransactionBase.h index cd4999fff..c808dad90 100644 --- a/src/cpp/model/TransactionBase.h +++ b/src/cpp/model/TransactionBase.h @@ -13,7 +13,7 @@ #include "../proto/gradido/BasicTypes.pb.h" #include "../SingletonManager/MemoryManager.h" -class TransactionBase : public ErrorList +class TransactionBase : public ErrorList, public UniLib::lib::MultithreadContainer { public: TransactionBase(const std::string& memo); diff --git a/src/cpp/model/TransactionCreation.cpp b/src/cpp/model/TransactionCreation.cpp index d26af84cd..f4196a265 100644 --- a/src/cpp/model/TransactionCreation.cpp +++ b/src/cpp/model/TransactionCreation.cpp @@ -29,7 +29,7 @@ int TransactionCreation::prepare() addError(new Error(functionName, "receiver public invalid (size not 32)")); return -2; } - mReceiverUser = new User(receiverPublic.data()); + mReceiverUser = new User((const unsigned char*)receiverPublic.data()); getErrors(mReceiverUser); if (mReceiverUser->getUserState() == USER_EMPTY) { sodium_bin2hex(mReceiverPublicHex, 65, (const unsigned char*)receiverPublic.data(), receiverPublic.size()); diff --git a/src/cpp/model/TransactionTransfer.cpp b/src/cpp/model/TransactionTransfer.cpp index a5c1fcbf1..08b1011a1 100644 --- a/src/cpp/model/TransactionTransfer.cpp +++ b/src/cpp/model/TransactionTransfer.cpp @@ -1,14 +1,155 @@ #include "TransactionTransfer.h" + + +TransactionTransfer::KontoTableEntry::KontoTableEntry(User* user, google::protobuf::int64 amount, bool negativeAmount/* = false*/) +{ + if (!user) return; + + composeAmountCellString(amount, negativeAmount); + + kontoNameCell = ""; + kontoNameCell += user->getFirstName(); + kontoNameCell += " "; + kontoNameCell += user->getLastName(); + kontoNameCell += " <"; + kontoNameCell += user->getEmail(); + kontoNameCell += ">"; +} + +TransactionTransfer::KontoTableEntry::KontoTableEntry(const std::string& pubkeyHex, google::protobuf::int64 amount, bool negativeAmount/* = false*/) +{ + composeAmountCellString(amount, negativeAmount); + kontoNameCell = "0x" + pubkeyHex + ""; +} + +void TransactionTransfer::KontoTableEntry::composeAmountCellString(google::protobuf::int64 amount, bool negativeAmount) +{ + if (negativeAmount) { + amountCell = "-"; + } + else { + amountCell = ""; + } + amountCell += amountToString(amount); + amountCell += " GDD"; +} + +// ******************************************************************************************************************************** + TransactionTransfer::TransactionTransfer(const std::string& memo, const model::messages::gradido::Transfer& protoTransfer) : TransactionBase(memo), mProtoTransfer(protoTransfer) { } +TransactionTransfer::~TransactionTransfer() +{ + mKontoTable.clear(); +} int TransactionTransfer::prepare() { - + lock(); + const static char functionName[] = { "TransactionTransfer::prepare" }; + if (mProtoTransfer.senderamounts_size() == 0) { + addError(new Error(functionName, "hasn't sender amount(s)")); + unlock(); + return -1; + } + if (mProtoTransfer.receiveramounts_size() == 0) { + addError(new Error(functionName, "hasn't receiver amount(s)")); + unlock(); + return -2; + } + mKontoTable.reserve(mProtoTransfer.senderamounts_size() + mProtoTransfer.receiveramounts_size()); + + //auto receiverAmount = mProtoTransfer.receiveramount(); + //auto senderAmount + int senderSum = 0; + int receiverSum = 0; + + char pubkeyHexTemp[65]; + + for (int i = 0; i < mProtoTransfer.senderamounts_size(); i++) { + auto senderAmount = mProtoTransfer.senderamounts(i); + auto pubkey = senderAmount.ed25519_sender_pubkey(); + senderSum += senderAmount.amount(); + if (pubkey.size() != 32) { + addError(new ParamError(functionName, "invalid public key for sender ", i)); + unlock(); + return -3; + } + User user((const unsigned char*)pubkey.data()); + if (user.getUserState() == USER_EMPTY) { + sodium_bin2hex(pubkeyHexTemp, 65, (const unsigned char*)pubkey.data(), pubkey.size()); + mKontoTable.push_back(KontoTableEntry(pubkeyHexTemp, senderAmount.amount(), true)); + } + else { + mKontoTable.push_back(KontoTableEntry(&user, senderAmount.amount(), true)); + } + } + for (int i = 0; i < mProtoTransfer.receiveramounts_size(); i++) { + auto receiverAmount = mProtoTransfer.receiveramounts(i); + auto pubkey = receiverAmount.ed25519_receiver_pubkey(); + receiverSum += receiverAmount.amount(); + if (receiverAmount.ed25519_receiver_pubkey().size() != 32) { + addError(new ParamError(functionName, "invalid public key for receiver ", i)); + unlock(); + return -4; + } + User user((const unsigned char*)pubkey.data()); + if (user.getUserState() == USER_EMPTY) { + sodium_bin2hex(pubkeyHexTemp, 65, (const unsigned char*)pubkey.data(), pubkey.size()); + mKontoTable.push_back(KontoTableEntry(pubkeyHexTemp, receiverAmount.amount(), false)); + } + else { + mKontoTable.push_back(KontoTableEntry(&user, receiverAmount.amount(), false)); + } + } + if (senderSum != receiverSum) { + addError(new Error(functionName, "sender amounts sum != receiver amounts sum")); + unlock(); + return -5; + } + + + /* + mReceiverUser = new User(receiverPublic.data()); + getErrors(mReceiverUser); + if (mReceiverUser->getUserState() == USER_EMPTY) { + sodium_bin2hex(mReceiverPublicHex, 65, (const unsigned char*)receiverPublic.data(), receiverPublic.size()); + delete mReceiverUser; + mReceiverUser = nullptr; + } + else { + memcpy(mReceiverPublicHex, mReceiverUser->getPublicKeyHex().data(), 64); + } + //*/ + + unlock(); return 0; } + +const std::string& TransactionTransfer::getKontoNameCell(int index) +{ + lock(); + if (index >= mKontoTable.size()) { + unlock(); + return "invalid index"; + } + unlock(); + + return mKontoTable[index].kontoNameCell; +} +const std::string& TransactionTransfer::getAmountCell(int index) +{ + lock(); + if (index >= mKontoTable.size()) { + unlock(); + return "invalid index"; + } + unlock(); + + return mKontoTable[index].amountCell; +} diff --git a/src/cpp/model/TransactionTransfer.h b/src/cpp/model/TransactionTransfer.h index ec10883e2..987076b27 100644 --- a/src/cpp/model/TransactionTransfer.h +++ b/src/cpp/model/TransactionTransfer.h @@ -12,15 +12,35 @@ #include "TransactionBase.h" #include "../proto/gradido/Transfer.pb.h" +#include "User.h" + class TransactionTransfer : public TransactionBase { public: TransactionTransfer(const std::string& memo, const model::messages::gradido::Transfer& protoTransfer); + ~TransactionTransfer(); int prepare(); + inline size_t getKontoTableSize() { lock(); size_t s = mKontoTable.size(); unlock(); return s; } + const std::string& getKontoNameCell(int index); + const std::string& getAmountCell(int index); + protected: + struct KontoTableEntry { + public: + KontoTableEntry(User* user, google::protobuf::int64 amount, bool negativeAmount = false); + KontoTableEntry(const std::string& pubkeyHex, google::protobuf::int64 amount, bool negativeAmount = false); + // first name, last name and email or pubkey hex if no user in db found + std::string kontoNameCell; + std::string amountCell; + + protected: + void composeAmountCellString(google::protobuf::int64 amount, bool negativeAmount); + }; + const model::messages::gradido::Transfer& mProtoTransfer; + std::vector mKontoTable; }; #endif //GRADIDO_LOGIN_SERVER_MODEL_TRANSACTION_TRANSFER_INCLUDE \ No newline at end of file diff --git a/src/cpp/model/User.cpp b/src/cpp/model/User.cpp index 5c5b0aef4..dc6a7c4de 100644 --- a/src/cpp/model/User.cpp +++ b/src/cpp/model/User.cpp @@ -174,14 +174,15 @@ int UserWriteCryptoKeyHashIntoDB::run() // ******************************************************************************* // new user User::User(const char* email, const char* first_name, const char* last_name) - : mState(USER_EMPTY), mDBId(0), mEmail(email), mFirstName(first_name), mLastName(last_name), mPasswordHashed(0), mPrivateKey(nullptr), mEmailChecked(false), mLanguage(LANG_DE), mCryptoKey(nullptr), - mReferenceCount(1) + : mState(USER_EMPTY), mDBId(0), mEmail(email), mFirstName(first_name), mLastName(last_name), mPasswordHashed(0), mPrivateKey(nullptr), mEmailChecked(false), + mLanguage(LANG_DE), mGradidoCurrentBalance(0), mCryptoKey(nullptr), mReferenceCount(1) { memset(mPublicKey, 0, crypto_sign_PUBLICKEYBYTES); } // load from db User::User(const char* email) - : mState(USER_EMPTY), mDBId(0), mEmail(email), mPasswordHashed(0), mPrivateKey(nullptr), mEmailChecked(false), mLanguage(LANG_DE), mCryptoKey(nullptr), mReferenceCount(1) + : mState(USER_EMPTY), mDBId(0), mEmail(email), mPasswordHashed(0), mPrivateKey(nullptr), mEmailChecked(false), + mLanguage(LANG_DE), mGradidoCurrentBalance(0), mCryptoKey(nullptr), mReferenceCount(1) { //crypto_shorthash(mPasswordHashed, (const unsigned char*)password, strlen(password), *ServerConfig::g_ServerCryptoKey); //memset(mPasswordHashed, 0, crypto_shorthash_BYTES); @@ -241,7 +242,8 @@ User::User(const char* email) } User::User(int user_id) -: mState(USER_EMPTY), mDBId(user_id), mPasswordHashed(0), mPrivateKey(nullptr), mEmailChecked(false), mLanguage(LANG_DE), mCryptoKey(nullptr), mReferenceCount(1) + : mState(USER_EMPTY), mDBId(user_id), mPasswordHashed(0), mPrivateKey(nullptr), mEmailChecked(false), + mLanguage(LANG_DE), mGradidoCurrentBalance(0), mCryptoKey(nullptr), mReferenceCount(1) { auto cm = ConnectionManager::getInstance(); auto session = cm->getConnection(CONNECTION_MYSQL_LOGIN_SERVER); @@ -299,7 +301,8 @@ User::User(int user_id) } User::User(const unsigned char* pubkey_array) - : mState(USER_EMPTY), mDBId(0), mPasswordHashed(0), mPrivateKey(nullptr), mEmailChecked(false), mLanguage(LANG_DE), mCryptoKey(nullptr), mReferenceCount(1) + : mState(USER_EMPTY), mDBId(0), mPasswordHashed(0), mPrivateKey(nullptr), mEmailChecked(false), + mLanguage(LANG_DE), mGradidoCurrentBalance(0), mCryptoKey(nullptr), mReferenceCount(1) { //crypto_shorthash(mPasswordHashed, (const unsigned char*)password, strlen(password), *ServerConfig::g_ServerCryptoKey); //memset(mPasswordHashed, 0, crypto_shorthash_BYTES); @@ -524,6 +527,13 @@ bool User::validatePwd(const std::string& pwd, ErrorList* validationErrorsToPrin throw Poco::Exception("crypto_shorthash_BYTES != sizeof(User::passwordHashed)"); } User::passwordHashed pwdHashed; + if (!ServerConfig::g_ServerCryptoKey) { + if (validationErrorsToPrint) { + validationErrorsToPrint->addError(new Error("User::validatePwd", "server crypto key not set")); + } + mm->releaseMemory(cmpCryptoKey); + return false; + } crypto_shorthash((unsigned char*)&pwdHashed, *cmpCryptoKey, crypto_box_SEEDBYTES, *ServerConfig::g_ServerCryptoKey); lock(); if (pwdHashed == mPasswordHashed) { @@ -676,7 +686,7 @@ MemoryBin* User::createCryptoKey(const std::string& password) void User::fakeCreateCryptoKey() { - Poco::Thread::sleep(820); + Poco::Thread::sleep(ServerConfig::g_FakeLoginSleepTime); } bool User::generateKeys(bool savePrivkey, const std::string& passphrase, Session* session) diff --git a/src/cpp/model/User.h b/src/cpp/model/User.h index 99c6a1249..3da92f5a0 100644 --- a/src/cpp/model/User.h +++ b/src/cpp/model/User.h @@ -82,6 +82,7 @@ public: inline const char* getFirstName() const { return mFirstName.data(); } inline const char* getLastName() const { return mLastName.data(); } inline int getDBId() const { return mDBId; } + inline int getBalance() { lock(); int balance = mGradidoCurrentBalance; unlock(); return balance; } inline std::string getPublicKeyHex() { lock(); std::string pubkeyHex = mPublicHex; unlock(); return pubkeyHex; } inline const unsigned char* getPublicKey() { return mPublicKey; } inline Languages getLanguage() { lock(); Languages lang = mLanguage; unlock(); return lang; } @@ -92,6 +93,7 @@ public: UserStates getUserState(); void setLanguage(Languages lang) { lock(); mLanguage = lang; unlock(); } + inline void setBalance(int balance) { lock(); mGradidoCurrentBalance = balance; unlock(); } void setEmailChecked(); bool isEmptyPassword(); bool setNewPassword(const std::string& newPassword); @@ -150,6 +152,9 @@ private: Languages mLanguage; // ************************ DB FIELDS END ****************************** + + int mGradidoCurrentBalance; + // crypto key as obfus array // only in memory, if user has typed in password MemoryBin* mCryptoKey; diff --git a/src/cpsp/checkTransaction.cpsp b/src/cpsp/checkTransaction.cpsp index e1b8b37f8..cefea3a34 100644 --- a/src/cpsp/checkTransaction.cpsp +++ b/src/cpsp/checkTransaction.cpsp @@ -17,8 +17,10 @@ enum PageState { %> <%% - const char* pageName = "Überprüfe Transaktion"; + const char* pageName = gettext("Überprüfe Transaktion"); auto accountUser = mSession->getUser(); + auto userBalance = accountUser->getBalance(); + std::string memo = ""; bool hasErrors = false; bool enableLogout = true; @@ -31,7 +33,7 @@ enum PageState { if(!accountUser->hasCryptoKey()) { auto pwd = form.get("sign-password", ""); if(!mSession->isPwdValid(pwd)) { - addError(new Error("Passwort", "Das Passwort stimmt nicht. Bitte verwende dein Passwort von der Registrierung")); + addError(new Error(gettext("Passwort"), gettext("Das Passwort stimmt nicht. Bitte verwende dein Passwort von der Registrierung"))); hasErrors = true; } } @@ -62,60 +64,115 @@ enum PageState { -%><%@ include file="header.cpsp" %><%@ include file="navi.cpsp" %> -
-

Eine Transaktion prüfen

- <%= getErrorsHtml() %> +%><%@ include file="header_navi.cpsp" %> +
+ <% if(sumTransactions > 0 && sumTransactions - notReadyTransactions != 1) { %> <% if(notReadyTransactions > 0) { %> -
<%= sumTransactions - notReadyTransactions %> von <%= sumTransactions %> Transaktionen sind bereit zum prüfen
+ <%= sumTransactions - notReadyTransactions %> <%= gettext("von") %> <%= sumTransactions %> <%= gettext("Transaktionen sind bereit zum bestätigen") %> <% } else { %> -
<%= sumTransactions %> Transaktionen warten darauf überprüft zu werden.
+ <%= sumTransactions %> <%= gettext("Transaktionen warten darauf bestätigt zu werden.") %> <% } %> <% } %> <% if(state == PAGE_NO_TRANSACTIONS) { %> -
<% if(sumTransactions == 0) { %> -
Es gibt zurzeit keine Transaktionen zum überprüfen
+ <%= gettext("Es gibt zurzeit keine Transaktionen zum bestätigen") %> <% } else { %> -
Transaktion(en) werden noch vorbereitet, bitte lade die Seite in wenigen Augenblicken erneut.
+ <%= gettext("Transaktion(en) werden noch vorbereitet, bitte lade die Seite in wenigen Augenblicken erneut.") %> <% } %> -
- - <% } else if(state == PAGE_TRANSACTION_CREATION) { - auto creationTransaction = processingTransaction->getCreationTransaction(); - auto transactionUser = creationTransaction->getUser(); - - %> -
-

Schöpfungstransaktion

- Memo: -

<%= creationTransaction->getMemo() %>

- Empfänger: - <% if(transactionUser) { %> -

<%= transactionUser->getFirstName() %> <%= transactionUser->getLastName() %>

-

<%= transactionUser->getEmail() %>

- <% } else { %> -

<%= creationTransaction->getPublicHex() %>

- <% } %> - Summe: - <%= creationTransaction->getAmountString() %> Gradido -
- Unterschreiben mit aktuellem Account?
-

<%= accountUser->getFirstName() %> <%= accountUser->getLastName() %>

-

<%= accountUser->getEmail() %>

- <% // TODO: additional password check %> - <% if(!accountUser->hasCryptoKey()) {%> -

Ich brauche nochmal dein Passwort

-

- - -

- <% } %> - - -
-
- <% } %> + <% } %> +
-<%@ include file="footer.cpsp" %> \ No newline at end of file +<% if(state != PAGE_NO_TRANSACTIONS) { %> +
+
+

<%= gettext("Transaktion Unterzeichnen") %>

+
+
+
+
+ <% if(state == PAGE_TRANSACTION_TRANSFER) { + auto transferTransaction = processingTransaction->getTransferTransaction(); + memo = transferTransaction->getMemo(); + %> +

<%= gettext("Überweisung") %>

+
+ + + + + + <% for(int i = 0; i < transferTransaction->getKontoTableSize(); i++) { %> + + <%= transferTransaction->getKontoNameCell(i) %> + <%= transferTransaction->getAmountCell(i) %> + + <% } %> + +
<%= gettext("Konto") %><%= gettext("Gradido") %>
+
+ + <% } else if(state == PAGE_TRANSACTION_CREATION) { + auto creationTransaction = processingTransaction->getCreationTransaction(); + auto transactionUser = creationTransaction->getUser(); + memo = creationTransaction->getMemo(); + %> +

<%= gettext("Schöpfung") %>

+
+ + + + + + + <% if(transactionUser) { %> + + <% } else { %> + + <% } %> + + + +
<%= gettext("Konto") %><%= gettext("Gradido") %>
<%= transactionUser->getFirstName() %> <%= transactionUser->getLastName() %> <<%= transactionUser->getEmail() %>>0x<%= creationTransaction->getPublicHex() %><%= creationTransaction->getAmountString() %> GDD
+
+ <% } %> +
+ + + +
<%= gettext("Aktives Konto") %>
<%= accountUser->getFirstName() %> <%= accountUser->getLastName() %> <<%= accountUser->getEmail() %>>
+
+
+ + + + +
<%= gettext("Verwendungszweck") %>
<%= memo %>
+
+
+
+
+
+
+ <% if(!accountUser->hasCryptoKey()) {%> +
+ + "> +
+ <% } %> + + +
+
+
+
+
+
+
+<% } %><%@ include file="footer_ripple.cpsp" %> \ No newline at end of file diff --git a/src/cpsp/footer_ripple.cpsp b/src/cpsp/footer_ripple.cpsp new file mode 100644 index 000000000..8b8dadf0a --- /dev/null +++ b/src/cpsp/footer_ripple.cpsp @@ -0,0 +1,41 @@ +
+ + + + + + + + +
+ <%= mTimeProfiler.string() %> +
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/cpsp/header.cpsp b/src/cpsp/header.cpsp index b7fb3b47a..6cc6709da 100644 --- a/src/cpsp/header.cpsp +++ b/src/cpsp/header.cpsp @@ -9,10 +9,10 @@ Gradido Login Server: <%= pageName %> - +

Login Server in Entwicklung

-

Alpha 0.8.1

+

Alpha <%= ServerConfig::g_versionString %>

+ +
+
+
+ +
+
\ No newline at end of file diff --git a/src/cpsp/header_old.cpsp b/src/cpsp/header_old.cpsp index 2d4599515..480d535b0 100644 --- a/src/cpsp/header_old.cpsp +++ b/src/cpsp/header_old.cpsp @@ -50,7 +50,7 @@ label:not(.grd_radio_label) {

Login Server in Entwicklung

-

Alpha 0.8.1

+

Alpha <%= ServerConfig::g_versionString %>