update decode transaction

This commit is contained in:
Dario 2020-01-27 19:59:15 +01:00
parent 68552262aa
commit ee250e8bcf
6 changed files with 146 additions and 48 deletions

View File

@ -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 << "</p>\n";
responseStream << "</div>\n";
responseStream << "<!--<nav class=\"grd-left-bar expanded\" data-topbar role=\"navigation\">\n";
responseStream << "\t<div class=\"grd-left-bar-section\">\n";
responseStream << "\t\t<ul class=\"grd-no-style\">\n";
responseStream << "\t\t <li><a href=\"";
#line 58 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
responseStream << ( ServerConfig::g_php_serverPath );
responseStream << "\" class=\"grd-nav-bn\">Startseite</a>\n";
responseStream << "\t\t <li><a href=\"./account/logout\" class=\"grd-nav-bn\">Logout</a></li>\n";
responseStream << "\t\t</ul>\n";
responseStream << "\t</div>\n";
responseStream << "</nav>-->";
// end include header_old.cpsp
responseStream << "\n";
responseStream << "<div class=\"grd_container\">\n";
responseStream << "\t<h1>Transaktion dekodieren</h1>\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<form method=\"POST\">\n";
responseStream << "\t\t<fieldset class=\"grd_container_small\">\n";
responseStream << "\t\t\t<legend>Transaktion dekodieren</legend>\n";
responseStream << "\t\t\t<textarea style=\"width:100%;height:100px\" name=\"transaction\">";
#line 51 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
#line 62 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( !form.empty() ? form.get("transaction", "") : "" );
responseStream << "</textarea>\n";
responseStream << "\t\t</fieldset>\n";
responseStream << "\t\t<input class=\"grd-form-bn grd-form-bn-succeed\" type=\"submit\" name=\"submit\" value=\"Dekodieren\">\n";
responseStream << "\t</form>\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<p><b>Verwendungszweck:</b></p>\n";
responseStream << "\t\t<p>";
#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 << "</p>\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<h3>Transfer</h3>\n";
responseStream << "\t\t<b>Sender</b>\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<p>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 << "</p>\n";
responseStream << "\t\t\t<p>amount: ";
#line 69 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( sender.amount() );
responseStream << "</p>\n";
#line 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( TransactionBase::amountToString(sender.amount()) );
responseStream << " GDD</p>\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\t<b>Receiver</b>\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<p>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 << "</p>\n";
responseStream << "\t\t\t<p>amount: ";
#line 78 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( receiver.amount() );
responseStream << "</p>\n";
#line 89 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( TransactionBase::amountToString(receiver.amount()) );
responseStream << " GDD</p>\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<controller::User> 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<h3>Creation</h3>\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<p>pubkey: ";
#line 108 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( hex );
responseStream << "</p>\n";
responseStream << "\t\t";
#line 109 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
} else { responseStream << "\n";
responseStream << "\t\t<p>user: </p>\n";
responseStream << "\t\t<p>";
#line 111 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( user->getModel()->toHTMLString() );
responseStream << "</p>\n";
responseStream << "\t\t";
#line 112 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
} responseStream << "\n";
responseStream << "\t\t<p>amount: ";
#line 113 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( TransactionBase::amountToString(receiver.amount()) );
responseStream << " GDD</p>\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 << "</div>\n";
// begin include footer.cpsp

View File

@ -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);
};

View File

@ -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);

View File

@ -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 << "<b>" << mFirstName << " " << mLastName << " <" << mEmail << "></b>" << "<br>";
ss << "public key: " << (char*)*pubkeyHex << "<br>";
ss << "created: " << Poco::DateTimeFormatter::format(mCreated, "%f.%m.%Y %H:%M:%S") << "<br>";
ss << "email checked: " << mEmailChecked << "<br>";
ss << "language key: " << mLanguageKey << "<br>";
ss << "role: " << UserRoles::typeToString(getRole()) << "<br>";
mm->releaseMemory(pubkeyHex);
return ss.str();
}
Poco::JSON::Object User::getJson()
{

View File

@ -40,6 +40,7 @@ namespace model {
// generic db operations
const char* getTableName() const { return "users"; }
std::string toString();
std::string toHTMLString();
// default getter unlocked

View File

@ -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());
%>
<p>pubkey: <%= hex %></p>
<p>amount: <%= sender.amount() %></p>
<p>amount: <%= TransactionBase::amountToString(sender.amount()) %> GDD</p>
<% } %>
<b>Receiver</b>
<% 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());
%>
<p>pubkey: <%= hex %></p>
<p>amount: <%= receiver.amount() %></p>
<p>amount: <%= TransactionBase::amountToString(receiver.amount()) %> GDD</p>
<% } %>
<% } 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<controller::User> user = nullptr;
if(adminUser) {
user = controller::User::create();
if(!user->load((const unsigned char*)receiver.ed25519_receiver_pubkey().data())) {
user.assign(nullptr);
}
}
//pubkey
%>
<h3>Creation</h3>
<p>pubkey: <%= creation.
<% if(!adminUser || user.isNull() || !user->getModel()) { %>
<p>pubkey: <%= hex %></p>
<% } else { %>
<p>user: </p>
<p><%= user->getModel()->toHTMLString() %></p>
<% } %>
<p>amount: <%= TransactionBase::amountToString(receiver.amount()) %> GDD</p>
<% } %>
<% } %>
</div>