<%@ page class="DecodeTransactionPage" %> <%@ page form="true" %> <%@ page compressed="true" %> <%@ 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 != "") { unsigned char* binBuffer = (unsigned char*)malloc(base64.size()); size_t resultingBinSize = 0; size_t base64_size = base64.size(); if (sodium_base642bin( binBuffer, base64_size, base64.data(), base64_size, nullptr, &resultingBinSize, nullptr, sodium_base64_VARIANT_ORIGINAL)) { free(binBuffer); addError(new Error("ProcessingTransaction", "error decoding base64"), false); } else { std::string binString((char*)binBuffer, resultingBinSize); free(binBuffer); if (!transactionBody.ParseFromString(binString)) { addError(new Error("ProcessingTransaction", "error creating Transaction from binary Message"), false); } else { decoded = true; } } } } /* char *sodium_bin2hex(char * const hex, const size_t hex_maxlen, const unsigned char * const bin, const size_t bin_len); */ %><%@ include file="header_old.cpsp" %>

Transaktion dekodieren

<%= getErrorsHtml() %>
Transaktion dekodieren
<% if(decoded) { %>

Verwendungszweck:

<%= transactionBody.memo() %>

<% if(transactionBody.has_transfer()) { auto transfer = transactionBody.transfer(); %>

Transfer

Sender <% 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()); %>

pubkey: <%= hex %>

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

<% } %> Receiver <% 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()); %>

pubkey: <%= hex %>

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

<% if(!adminUser || user.isNull() || !user->getModel()) { %>

pubkey: <%= hex %>

<% } else { %>

user:

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

<% } %>

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

<% } %> <% } %>
<%@ include file="footer.cpsp" %>