From ee250e8bcfa1bdb352aae81bc76bf059a0318b6c Mon Sep 17 00:00:00 2001 From: Dario Date: Mon, 27 Jan 2020 19:59:15 +0100 Subject: [PATCH] update decode transaction --- .../HTTPInterface/DecodeTransactionPage.cpp | 109 ++++++++++++------ src/cpp/HTTPInterface/DecodeTransactionPage.h | 6 +- .../PageRequestHandlerFactory.cpp | 14 +-- src/cpp/model/table/User.cpp | 25 ++++ src/cpp/model/table/User.h | 1 + src/cpsp/decodeTransaction.cpsp | 39 ++++++- 6 files changed, 146 insertions(+), 48 deletions(-) diff --git a/src/cpp/HTTPInterface/DecodeTransactionPage.cpp b/src/cpp/HTTPInterface/DecodeTransactionPage.cpp index 73cdebee6..fdfbe4f2e 100644 --- a/src/cpp/HTTPInterface/DecodeTransactionPage.cpp +++ b/src/cpp/HTTPInterface/DecodeTransactionPage.cpp @@ -5,15 +5,23 @@ #include "Poco/DeflatingStream.h" -#line 6 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" +#line 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #include "sodium.h" #include "../proto/gradido/TransactionBody.pb.h" +#include "../controller/User.h" +#include "../model/TransactionBase.h" #line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp" #include "../ServerConfig.h" +DecodeTransactionPage::DecodeTransactionPage(Session* arg): + SessionHTTPRequestHandler(arg) +{ +} + + void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response) { response.setChunkedTransferEncoding(true); @@ -22,11 +30,19 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request, if (_compressResponse) response.set("Content-Encoding", "gzip"); Poco::Net::HTMLForm form(request, request.stream()); -#line 10 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" +#line 13 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" const char* pageName = "Decode Transaction"; model::messages::gradido::TransactionBody transactionBody; bool decoded = false; + bool adminUser = false; + if(mSession && mSession->getNewUser()) { + auto user = mSession->getNewUser(); + auto model = user->getModel(); + if(model && model->getRole() == model::table::ROLE_ADMIN) { + adminUser = true; + } + } if(!form.empty()) { auto base64 = form.get("transaction", ""); if(base64 != "") { @@ -123,96 +139,121 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request, responseStream << ( ServerConfig::g_versionString ); responseStream << "

\n"; responseStream << "\n"; - responseStream << ""; // end include header_old.cpsp responseStream << "\n"; responseStream << "
\n"; responseStream << "\t

Transaktion dekodieren

\n"; responseStream << "\t"; -#line 47 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" +#line 58 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" responseStream << ( getErrorsHtml() ); responseStream << "\n"; responseStream << "\t
\n"; responseStream << "\t\t
\n"; responseStream << "\t\t\tTransaktion dekodieren\n"; responseStream << "\t\t\t\n"; responseStream << "\t\t
\n"; responseStream << "\t\t\n"; responseStream << "\t
\n"; responseStream << "\t"; -#line 55 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" +#line 66 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" if(decoded) { responseStream << "\n"; responseStream << "\t\t

Verwendungszweck:

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

"; -#line 57 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" +#line 68 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" responseStream << ( transactionBody.memo() ); responseStream << "

\n"; responseStream << "\t\t"; -#line 58 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" +#line 69 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" if(transactionBody.has_transfer()) { auto transfer = transactionBody.transfer(); responseStream << "\n"; responseStream << "\t\t

Transfer

\n"; responseStream << "\t\tSender\n"; responseStream << "\t\t"; -#line 63 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" +#line 74 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" for(int i = 0; i < transfer.senderamounts_size(); i++) { auto sender = transfer.senderamounts(i); char hex[65]; memset(hex, 0, 65); sodium_bin2hex(hex, 65, (const unsigned char*)sender.ed25519_sender_pubkey().data(), sender.ed25519_sender_pubkey().size()); responseStream << "\n"; responseStream << "\t\t\t

pubkey: "; -#line 68 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" +#line 79 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" responseStream << ( hex ); responseStream << "

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

amount: "; -#line 69 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" - responseStream << ( sender.amount() ); - responseStream << "

\n"; +#line 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" + responseStream << ( TransactionBase::amountToString(sender.amount()) ); + responseStream << " GDD

\n"; responseStream << "\t\t"; -#line 70 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" +#line 81 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" } responseStream << "\n"; responseStream << "\t\tReceiver\n"; responseStream << "\t\t"; -#line 72 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" +#line 83 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" for(int i = 0; i < transfer.receiveramounts_size(); i++) { auto receiver = transfer.receiveramounts(i); char hex[65]; memset(hex, 0, 65); sodium_bin2hex(hex, 65, (const unsigned char*)receiver.ed25519_receiver_pubkey().data(), receiver.ed25519_receiver_pubkey().size()); responseStream << "\n"; responseStream << "\t\t\t

pubkey: "; -#line 77 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" +#line 88 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" responseStream << ( hex ); responseStream << "

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

amount: "; -#line 78 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" - responseStream << ( receiver.amount() ); - responseStream << "

\n"; +#line 89 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" + responseStream << ( TransactionBase::amountToString(receiver.amount()) ); + responseStream << " GDD

\n"; responseStream << "\t\t"; -#line 79 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" +#line 90 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" } responseStream << "\n"; responseStream << "\t\t"; -#line 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" - } else if(transactionBody.has_creation()) { responseStream << "\n"; +#line 91 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" + } else if(transactionBody.has_creation()) { + auto creation = transactionBody.creation(); + auto receiver = creation.receiveramount(); + char hex[65]; memset(hex, 0, 65); + sodium_bin2hex(hex, 65, (const unsigned char*)receiver.ed25519_receiver_pubkey().data(), receiver.ed25519_receiver_pubkey().size()); + + Poco::AutoPtr user = nullptr; + if(adminUser) { + user = controller::User::create(); + if(!user->load((const unsigned char*)receiver.ed25519_receiver_pubkey().data())) { + user.assign(nullptr); + } + } + //pubkey + responseStream << "\n"; responseStream << "\t\t

Creation

\n"; responseStream << "\t\t"; -#line 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" +#line 107 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" + if(!adminUser || user.isNull() || !user->getModel()) { responseStream << "\n"; + responseStream << "\t\t

pubkey: "; +#line 108 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" + responseStream << ( hex ); + responseStream << "

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

user:

\n"; + responseStream << "\t\t

"; +#line 111 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" + responseStream << ( user->getModel()->toHTMLString() ); + responseStream << "

\n"; + responseStream << "\t\t"; +#line 112 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" + } responseStream << "\n"; + responseStream << "\t\t

amount: "; +#line 113 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" + responseStream << ( TransactionBase::amountToString(receiver.amount()) ); + responseStream << " GDD

\n"; + responseStream << "\t\t"; +#line 114 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" } responseStream << "\n"; responseStream << "\t"; -#line 83 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" +#line 115 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" } responseStream << "\n"; responseStream << "
\n"; // begin include footer.cpsp diff --git a/src/cpp/HTTPInterface/DecodeTransactionPage.h b/src/cpp/HTTPInterface/DecodeTransactionPage.h index 35a737701..38eefb71a 100644 --- a/src/cpp/HTTPInterface/DecodeTransactionPage.h +++ b/src/cpp/HTTPInterface/DecodeTransactionPage.h @@ -5,12 +5,14 @@ #include "Poco/Net/HTTPRequestHandler.h" -#include "PageRequestMessagedHandler.h" +#include "SessionHTTPRequestHandler.h" -class DecodeTransactionPage: public PageRequestMessagedHandler +class DecodeTransactionPage: public SessionHTTPRequestHandler { public: + DecodeTransactionPage(Session*); + void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response); }; diff --git a/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp b/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp index 3261e5591..730ec79aa 100644 --- a/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp +++ b/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp @@ -67,13 +67,6 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c return pageRequestHandler; } - if (url_first_part == "/decode_transaction") { - mLogging.information(dateTimeString + " decode"); - auto pageRequestHandler = new DecodeTransactionPage; - pageRequestHandler->setProfiler(timeUsed); - return pageRequestHandler; - } - // check if user has valid session Poco::Net::NameValueCollection cookies; request.getCookies(cookies); @@ -115,6 +108,13 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c resetPassword->setProfiler(timeUsed); return resetPassword; } + + if (url_first_part == "/decode_transaction") { + mLogging.information(dateTimeString + " decode"); + auto pageRequestHandler = new DecodeTransactionPage(s); + pageRequestHandler->setProfiler(timeUsed); + return pageRequestHandler; + } if (s) { if (externReferer != "") { s->setLastReferer(externReferer); diff --git a/src/cpp/model/table/User.cpp b/src/cpp/model/table/User.cpp index c572ea790..8645499f6 100644 --- a/src/cpp/model/table/User.cpp +++ b/src/cpp/model/table/User.cpp @@ -192,6 +192,31 @@ namespace model { return ss.str(); } + std::string User::toHTMLString() + { + auto mm = MemoryManager::getInstance(); + auto pubkeyHex = mm->getFreeMemory(65); + + memset(*pubkeyHex, 0, 65); + + std::stringstream ss; + + if (!mPublicKey.isNull()) { + sodium_bin2hex(*pubkeyHex, 65, mPublicKey.value().content().data(), mPublicKey.value().content().size()); + } + + ss << "" << mFirstName << " " << mLastName << " <" << mEmail << ">" << "
"; + ss << "public key: " << (char*)*pubkeyHex << "
"; + ss << "created: " << Poco::DateTimeFormatter::format(mCreated, "%f.%m.%Y %H:%M:%S") << "
"; + ss << "email checked: " << mEmailChecked << "
"; + ss << "language key: " << mLanguageKey << "
"; + ss << "role: " << UserRoles::typeToString(getRole()) << "
"; + + mm->releaseMemory(pubkeyHex); + + return ss.str(); + } + Poco::JSON::Object User::getJson() { diff --git a/src/cpp/model/table/User.h b/src/cpp/model/table/User.h index f5d927de0..6fec71a4a 100644 --- a/src/cpp/model/table/User.h +++ b/src/cpp/model/table/User.h @@ -40,6 +40,7 @@ namespace model { // generic db operations const char* getTableName() const { return "users"; } std::string toString(); + std::string toHTMLString(); // default getter unlocked diff --git a/src/cpsp/decodeTransaction.cpsp b/src/cpsp/decodeTransaction.cpsp index 6c6d101d1..002a10442 100644 --- a/src/cpsp/decodeTransaction.cpsp +++ b/src/cpsp/decodeTransaction.cpsp @@ -1,16 +1,27 @@ <%@ page class="DecodeTransactionPage" %> <%@ page form="true" %> <%@ page compressed="true" %> -<%@ page baseClass="PageRequestMessagedHandler" %> -<%@ header include="PageRequestMessagedHandler.h" %> +<%@ page baseClass="SessionHTTPRequestHandler" %> +<%@ page ctorArg="Session*" %> +<%@ header include="SessionHTTPRequestHandler.h" %> <%! #include "sodium.h" #include "../proto/gradido/TransactionBody.pb.h" +#include "../controller/User.h" +#include "../model/TransactionBase.h" %> <%% const char* pageName = "Decode Transaction"; model::messages::gradido::TransactionBody transactionBody; bool decoded = false; + bool adminUser = false; + if(mSession && mSession->getNewUser()) { + auto user = mSession->getNewUser(); + auto model = user->getModel(); + if(model && model->getRole() == model::table::ROLE_ADMIN) { + adminUser = true; + } + } if(!form.empty()) { auto base64 = form.get("transaction", ""); if(base64 != "") { @@ -66,7 +77,7 @@ sodium_bin2hex(hex, 65, (const unsigned char*)sender.ed25519_sender_pubkey().data(), sender.ed25519_sender_pubkey().size()); %>

pubkey: <%= hex %>

-

amount: <%= sender.amount() %>

+

amount: <%= TransactionBase::amountToString(sender.amount()) %> GDD

<% } %> Receiver <% for(int i = 0; i < transfer.receiveramounts_size(); i++) { @@ -75,13 +86,31 @@ sodium_bin2hex(hex, 65, (const unsigned char*)receiver.ed25519_receiver_pubkey().data(), receiver.ed25519_receiver_pubkey().size()); %>

pubkey: <%= hex %>

-

amount: <%= receiver.amount() %>

+

amount: <%= TransactionBase::amountToString(receiver.amount()) %> GDD

<% } %> <% } else if(transactionBody.has_creation()) { auto creation = transactionBody.creation(); + auto receiver = creation.receiveramount(); + char hex[65]; memset(hex, 0, 65); + sodium_bin2hex(hex, 65, (const unsigned char*)receiver.ed25519_receiver_pubkey().data(), receiver.ed25519_receiver_pubkey().size()); + + Poco::AutoPtr user = nullptr; + if(adminUser) { + user = controller::User::create(); + if(!user->load((const unsigned char*)receiver.ed25519_receiver_pubkey().data())) { + user.assign(nullptr); + } + } + //pubkey %>

Creation

-

pubkey: <%= creation. + <% if(!adminUser || user.isNull() || !user->getModel()) { %> +

pubkey: <%= hex %>

+ <% } else { %> +

user:

+

<%= user->getModel()->toHTMLString() %>

+ <% } %> +

amount: <%= TransactionBase::amountToString(receiver.amount()) %> GDD

<% } %> <% } %>