update proto files matching with pauls proto version, update code which use them

This commit is contained in:
Dario 2020-09-21 18:54:11 +02:00 committed by Ulf Gebhardt
parent 3df0d461b1
commit 662aed72b9
No known key found for this signature in database
GPG Key ID: 81308EFE29ABFEBD
9 changed files with 365 additions and 341 deletions

View File

@ -5,14 +5,14 @@
#include "Poco/DeflatingStream.h" #include "Poco/DeflatingStream.h"
#line 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 7 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
#include "sodium.h" #include "sodium.h"
#include "../proto/gradido/TransactionBody.pb.h" #include "../proto/gradido/TransactionBody.pb.h"
#include "../controller/User.h" #include "../controller/User.h"
#include "../model/TransactionBase.h" #include "../model/TransactionBase.h"
#include "../model/TransactionCreation.h" #include "../model/TransactionCreation.h"
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp" #line 1 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\header_old.cpsp"
#include "../ServerConfig.h" #include "../ServerConfig.h"
@ -31,10 +31,10 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
if (_compressResponse) response.set("Content-Encoding", "gzip"); if (_compressResponse) response.set("Content-Encoding", "gzip");
Poco::Net::HTMLForm form(request, request.stream()); Poco::Net::HTMLForm form(request, request.stream());
#line 14 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 14 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
const char* pageName = "Decode Transaction"; const char* pageName = "Decode Transaction";
model::messages::gradido::TransactionBody transactionBody; proto::gradido::TransactionBody transactionBody;
bool decoded = false; bool decoded = false;
bool adminUser = false; bool adminUser = false;
if(mSession && mSession->getNewUser()) { if(mSession && mSession->getNewUser()) {
@ -99,12 +99,12 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
responseStream << "<meta charset=\"UTF-8\">\n"; responseStream << "<meta charset=\"UTF-8\">\n";
responseStream << "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n"; responseStream << "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n";
responseStream << "<title>Gradido Login Server: "; responseStream << "<title>Gradido Login Server: ";
#line 9 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp" #line 9 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\header_old.cpsp"
responseStream << ( pageName ); responseStream << ( pageName );
responseStream << "</title>\n"; responseStream << "</title>\n";
responseStream << "<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"css/styles.min.css\">-->\n"; responseStream << "<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"css/styles.min.css\">-->\n";
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\""; responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
#line 11 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp" #line 11 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\header_old.cpsp"
responseStream << ( ServerConfig::g_php_serverPath ); responseStream << ( ServerConfig::g_php_serverPath );
responseStream << "/css/styles.css\">\n"; responseStream << "/css/styles.css\">\n";
responseStream << "<style type=\"text/css\" >\n"; responseStream << "<style type=\"text/css\" >\n";
@ -149,7 +149,7 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
responseStream << "<div class=\"versionstring dev-info\">\n"; responseStream << "<div class=\"versionstring dev-info\">\n";
responseStream << "\t<p class=\"grd_small\">Login Server in Entwicklung</p>\n"; responseStream << "\t<p class=\"grd_small\">Login Server in Entwicklung</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha "; responseStream << "\t<p class=\"grd_small\">Alpha ";
#line 53 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp" #line 53 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\header_old.cpsp"
responseStream << ( ServerConfig::g_versionString ); responseStream << ( ServerConfig::g_versionString );
responseStream << "</p>\n"; responseStream << "</p>\n";
responseStream << "</div>\n"; responseStream << "</div>\n";
@ -158,84 +158,79 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
responseStream << "<div class=\"grd_container\">\n"; responseStream << "<div class=\"grd_container\">\n";
responseStream << "\t<h1>Transaktion dekodieren</h1>\n"; responseStream << "\t<h1>Transaktion dekodieren</h1>\n";
responseStream << "\t"; responseStream << "\t";
#line 72 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 72 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( getErrorsHtml() ); responseStream << ( getErrorsHtml() );
responseStream << "\n"; responseStream << "\n";
responseStream << "\t<form method=\"POST\">\n"; responseStream << "\t<form method=\"POST\">\n";
responseStream << "\t\t<fieldset class=\"grd_container_small\">\n"; responseStream << "\t\t<fieldset class=\"grd_container_small\">\n";
responseStream << "\t\t\t<legend>Transaktion dekodieren</legend>\n"; responseStream << "\t\t\t<legend>Transaktion dekodieren</legend>\n";
responseStream << "\t\t\t<textarea style=\"width:100%;height:100px\" name=\"transaction\">"; responseStream << "\t\t\t<textarea style=\"width:100%;height:100px\" name=\"transaction\">";
#line 76 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 76 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( !form.empty() ? form.get("transaction", "") : "" ); responseStream << ( !form.empty() ? form.get("transaction", "") : "" );
responseStream << "</textarea>\n"; responseStream << "</textarea>\n";
responseStream << "\t\t</fieldset>\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\t<input class=\"grd-form-bn grd-form-bn-succeed\" type=\"submit\" name=\"submit\" value=\"Dekodieren\">\n";
responseStream << "\t</form>\n"; responseStream << "\t</form>\n";
responseStream << "\t"; responseStream << "\t";
#line 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 80 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
if(decoded) { responseStream << "\n"; if(decoded) { responseStream << "\n";
responseStream << "\t\t<p><b>Verwendungszweck:</b></p>\n"; responseStream << "\t\t<p><b>Verwendungszweck:</b></p>\n";
responseStream << "\t\t<p>"; responseStream << "\t\t<p>";
#line 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 82 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( transactionBody.memo() ); responseStream << ( transactionBody.memo() );
responseStream << "</p>\n"; responseStream << "</p>\n";
responseStream << "\t\t"; responseStream << "\t\t";
#line 83 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 83 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
if(transactionBody.has_transfer()) { if(transactionBody.has_transfer()) {
auto transfer = transactionBody.transfer(); auto transfer = transactionBody.transfer();
char hex[65]; memset(hex, 0, 65);
responseStream << "\n"; responseStream << "\n";
responseStream << "\t\t<h3>Transfer</h3>\n"; responseStream << "\t\t\t";
responseStream << "\t\t<b>Sender</b>\n"; #line 87 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << "\t\t"; if(transfer.has_local()) {
#line 88 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" auto local_transfer = transfer.local();
for(int i = 0; i < transfer.senderamounts_size(); i++) { auto sender_pubkey = local_transfer.sender().pubkey();
auto sender = transfer.senderamounts(i); auto receiver_pubkey = local_transfer.receiver();
char hex[65]; memset(hex, 0, 65); sodium_bin2hex(hex, 65, (const unsigned char*)sender_pubkey.data(), sender_pubkey.size());
sodium_bin2hex(hex, 65, (const unsigned char*)sender.ed25519_sender_pubkey().data(), sender.ed25519_sender_pubkey().size());
responseStream << "\n"; responseStream << "\n";
responseStream << "\t\t\t<p>pubkey: "; responseStream << "\t\t\t\t<h3>Local Transfer</h3>\n";
#line 93 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" responseStream << "\t\t\t\t<b>From: </b>";
#line 94 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( hex ); responseStream << ( hex );
responseStream << "</p>\n"; responseStream << "\n";
responseStream << "\t\t\t<p>amount: "; responseStream << "\t\t\t\t";
#line 94 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 95 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( TransactionBase::amountToString(sender.amount()) ); sodium_bin2hex(hex, 65, (const unsigned char*)receiver_pubkey.data(), receiver_pubkey.size()); responseStream << "\n";
responseStream << " GDD</p>\n"; responseStream << "\t\t\t\t<b>To: </b>";
responseStream << "\t\t"; #line 96 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
#line 95 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
} responseStream << "\n";
responseStream << "\t\t<b>Receiver</b>\n";
responseStream << "\t\t";
#line 97 "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 102 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( hex ); responseStream << ( hex );
responseStream << "</p>\n"; responseStream << "\n";
responseStream << "\t\t\t<p>amount: "; responseStream << "\t\t\t\t<b>Amount: </b>";
#line 103 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 97 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( TransactionBase::amountToString(receiver.amount()) ); responseStream << ( TransactionBase::amountToString(local_transfer.sender().amount()) );
responseStream << " GDD</p>\n"; responseStream << "\n";
responseStream << "\t\t"; responseStream << "\t\t\t";
#line 104 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 98 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
} else { responseStream << "\n";
responseStream << "\t\t\t\t<h3>- Not implemented yet (Group Transfer) -</h3>\n";
responseStream << "\t\t\t";
#line 100 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
} responseStream << "\n"; } responseStream << "\n";
responseStream << "\t\t"; responseStream << "\t\t";
#line 105 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 102 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
} else if(transactionBody.has_creation()) { } else if(transactionBody.has_creation()) {
auto creation = transactionBody.creation(); auto creation = transactionBody.creation();
TransactionCreation creationObject("", creation); TransactionCreation creationObject("", creation);
auto receiver = creation.receiveramount(); auto receiver = creation.receiveramount();
char hex[65]; memset(hex, 0, 65); char hex[65]; memset(hex, 0, 65);
sodium_bin2hex(hex, 65, (const unsigned char*)receiver.ed25519_receiver_pubkey().data(), receiver.ed25519_receiver_pubkey().size()); sodium_bin2hex(hex, 65, (const unsigned char*)receiver.pubkey().data(), receiver.pubkey().size());
Poco::AutoPtr<controller::User> user = nullptr; Poco::AutoPtr<controller::User> user = nullptr;
if(adminUser) { if(adminUser) {
user = controller::User::create(); user = controller::User::create();
if(!user->load((const unsigned char*)receiver.ed25519_receiver_pubkey().data())) { if(!user->load((const unsigned char*)receiver.pubkey().data())) {
user.assign(nullptr); user.assign(nullptr);
} }
} }
@ -243,36 +238,36 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
responseStream << "\n"; responseStream << "\n";
responseStream << "\t\t<h3>Creation</h3>\n"; responseStream << "\t\t<h3>Creation</h3>\n";
responseStream << "\t\t"; responseStream << "\t\t";
#line 122 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 121 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
if(!adminUser || user.isNull() || !user->getModel()) { responseStream << "\n"; if(!adminUser || user.isNull() || !user->getModel()) { responseStream << "\n";
responseStream << "\t\t<p>pubkey: "; responseStream << "\t\t<p>pubkey: ";
#line 123 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 122 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( hex ); responseStream << ( hex );
responseStream << "</p>\n"; responseStream << "</p>\n";
responseStream << "\t\t"; responseStream << "\t\t";
#line 124 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 123 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
} else { responseStream << "\n"; } else { responseStream << "\n";
responseStream << "\t\t<p>user: </p>\n"; responseStream << "\t\t<p>user: </p>\n";
responseStream << "\t\t<p>"; responseStream << "\t\t<p>";
#line 126 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 125 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( user->getModel()->toHTMLString() ); responseStream << ( user->getModel()->toHTMLString() );
responseStream << "</p>\n"; responseStream << "</p>\n";
responseStream << "\t\t"; responseStream << "\t\t";
#line 127 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 126 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
} responseStream << "\n"; } responseStream << "\n";
responseStream << "\t\t<p>amount: "; responseStream << "\t\t<p>amount: ";
#line 128 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 127 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( TransactionBase::amountToString(receiver.amount()) ); responseStream << ( TransactionBase::amountToString(receiver.amount()) );
responseStream << " GDD</p>\n"; responseStream << " GDD</p>\n";
responseStream << "\t\t<p>target date: "; responseStream << "\t\t<p>target date: ";
#line 129 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 128 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
responseStream << ( creationObject.getTargetDateString() ); responseStream << ( creationObject.getTargetDateString() );
responseStream << "</p>\n"; responseStream << "</p>\n";
responseStream << "\t\t"; responseStream << "\t\t";
#line 130 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 129 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
} responseStream << "\n"; } responseStream << "\n";
responseStream << "\t"; responseStream << "\t";
#line 131 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" #line 130 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\decodeTransaction.cpsp"
} responseStream << "\n"; } responseStream << "\n";
responseStream << "</div>\n"; responseStream << "</div>\n";
// begin include footer.cpsp // begin include footer.cpsp
@ -282,14 +277,14 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
responseStream << " </div>\n"; responseStream << " </div>\n";
responseStream << " <div class=\"bottomleft\">\n"; responseStream << " <div class=\"bottomleft\">\n";
responseStream << " "; responseStream << " ";
#line 6 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\footer.cpsp" #line 6 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\footer.cpsp"
responseStream << ( mTimeProfiler.string() ); responseStream << ( mTimeProfiler.string() );
responseStream << "\n"; responseStream << "\n";
responseStream << " </div>\n"; responseStream << " </div>\n";
responseStream << " <div class=\"bottomright\">\n"; responseStream << " <div class=\"bottomright\">\n";
responseStream << " <p>Login Server in Entwicklung</p>\n"; responseStream << " <p>Login Server in Entwicklung</p>\n";
responseStream << " <p>Alpha "; responseStream << " <p>Alpha ";
#line 10 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\footer.cpsp" #line 10 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\footer.cpsp"
responseStream << ( ServerConfig::g_versionString ); responseStream << ( ServerConfig::g_versionString );
responseStream << "</p>\n"; responseStream << "</p>\n";
responseStream << " </div>\n"; responseStream << " </div>\n";

View File

@ -1,72 +1,73 @@
#include "TransactionCreation.h" #include "TransactionCreation.h"
#include "Poco/DateTimeFormatter.h" #include "Poco/DateTimeFormatter.h"
#include <sodium.h> #include <sodium.h>
TransactionCreation::TransactionCreation(const std::string& memo, const model::messages::gradido::TransactionCreation& protoCreation) //TransactionCreation::TransactionCreation(const std::string& memo, const model::messages::gradido::TransactionCreation& protoCreation)
: TransactionBase(memo), mProtoCreation(protoCreation), mReceiverUser(nullptr) TransactionCreation::TransactionCreation(const std::string& memo, const proto::gradido::GradidoCreation& protoCreation)
{ : TransactionBase(memo), mProtoCreation(protoCreation), mReceiverUser(nullptr)
memset(mReceiverPublicHex, 0, 65); {
} memset(mReceiverPublicHex, 0, 65);
}
TransactionCreation::~TransactionCreation()
{ TransactionCreation::~TransactionCreation()
if (mReceiverUser) { {
delete mReceiverUser; if (mReceiverUser) {
mReceiverUser = nullptr; delete mReceiverUser;
} mReceiverUser = nullptr;
} }
}
int TransactionCreation::prepare()
{ int TransactionCreation::prepare()
const static char functionName[] = { "TransactionCreation::prepare" }; {
if (!mProtoCreation.has_receiveramount()) { const static char functionName[] = { "TransactionCreation::prepare" };
addError(new Error(functionName, "hasn't receiver amount")); if (!mProtoCreation.has_receiveramount()) {
return -1; addError(new Error(functionName, "hasn't receiver amount"));
} return -1;
auto receiverAmount = mProtoCreation.receiveramount(); }
auto receiverAmount = mProtoCreation.receiveramount();
if (receiverAmount.amount() <= 0) {
addError(new Error(functionName, "amount must be > 0")); if (receiverAmount.amount() <= 0) {
return -4; addError(new Error(functionName, "amount must be > 0"));
} return -4;
if (receiverAmount.amount() > 10000000) { }
addError(new Error(functionName, "amount must be <= 1000 GDD")); if (receiverAmount.amount() > 10000000) {
return -5; addError(new Error(functionName, "amount must be <= 1000 GDD"));
} return -5;
}
auto receiverPublic = receiverAmount.ed25519_receiver_pubkey();
if (receiverPublic.size() != 32) { auto receiverPublic = receiverAmount.ed25519_receiver_pubkey();
addError(new Error(functionName, "receiver public invalid (size not 32)")); if (receiverPublic.size() != 32) {
return -2; addError(new Error(functionName, "receiver public invalid (size not 32)"));
} return -2;
mReceiverUser = new User((const unsigned char*)receiverPublic.data()); }
getErrors(mReceiverUser); mReceiverUser = new User((const unsigned char*)receiverPublic.data());
if (mReceiverUser->getUserState() == USER_EMPTY) { getErrors(mReceiverUser);
sodium_bin2hex(mReceiverPublicHex, 65, (const unsigned char*)receiverPublic.data(), receiverPublic.size()); if (mReceiverUser->getUserState() == USER_EMPTY) {
delete mReceiverUser; sodium_bin2hex(mReceiverPublicHex, 65, (const unsigned char*)receiverPublic.data(), receiverPublic.size());
mReceiverUser = nullptr; delete mReceiverUser;
} mReceiverUser = nullptr;
else { }
memcpy(mReceiverPublicHex, mReceiverUser->getPublicKeyHex().data(), 64); else {
// uncomment because not correctly working memcpy(mReceiverPublicHex, mReceiverUser->getPublicKeyHex().data(), 64);
/*if (!mReceiverUser->validateIdentHash(mProtoCreation.ident_hash())) { // uncomment because not correctly working
addError(new Error(functionName, "ident hash isn't the same")); /*if (!mReceiverUser->validateIdentHash(mProtoCreation.ident_hash())) {
addError(new ParamError(functionName, "hash calculated from email: ", mReceiverUser->getEmail())); addError(new Error(functionName, "ident hash isn't the same"));
addError(new ParamError(functionName, "hash: ", std::to_string(mProtoCreation.ident_hash()))); addError(new ParamError(functionName, "hash calculated from email: ", mReceiverUser->getEmail()));
return -3; addError(new ParamError(functionName, "hash: ", std::to_string(mProtoCreation.ident_hash())));
}*/ return -3;
} }*/
// }
//
return 0;
} return 0;
}
std::string TransactionCreation::getTargetDateString()
{ std::string TransactionCreation::getTargetDateString()
// proto format is seconds, poco timestamp format is microseconds {
Poco::Timestamp pocoStamp(mProtoCreation.target_date().seconds() * 1000*1000); // proto format is seconds, poco timestamp format is microseconds
//Poco::DateTime(pocoStamp); Poco::Timestamp pocoStamp(mProtoCreation.target_date().seconds() * 1000*1000);
return Poco::DateTimeFormatter::format(pocoStamp, "%d. %b %y"); //Poco::DateTime(pocoStamp);
} return Poco::DateTimeFormatter::format(pocoStamp, "%d. %b %y");
}

View File

@ -12,26 +12,26 @@
#pragma warning(disable:4800) #pragma warning(disable:4800)
#include "TransactionBase.h" #include "TransactionBase.h"
#include "../proto/gradido/TransactionCreation.pb.h" #include "../proto/gradido/GradidoCreation.pb.h"
#include "User.h" #include "User.h"
class TransactionCreation : public TransactionBase class TransactionCreation : public TransactionBase
{ {
public: public:
TransactionCreation(const std::string& memo, const model::messages::gradido::TransactionCreation& protoCreation); TransactionCreation(const std::string& memo, const proto::gradido::GradidoCreation& protoCreation);
~TransactionCreation(); ~TransactionCreation();
int prepare(); int prepare();
inline User* getUser() { return mReceiverUser; } inline User* getUser() { return mReceiverUser; }
inline google::protobuf::int64 getAmount() { return mProtoCreation.receiveramount().amount(); } inline google::protobuf::int64 getAmount() { return mProtoCreation.receiver().amount(); }
inline char* getPublicHex() { return mReceiverPublicHex; } inline char* getPublicHex() { return mReceiverPublicHex; }
inline std::string getAmountString() { return amountToString(getAmount()); } inline std::string getAmountString() { return amountToString(getAmount()); }
std::string getTargetDateString(); std::string getTargetDateString();
protected: protected:
const model::messages::gradido::TransactionCreation& mProtoCreation; const proto::gradido::GradidoCreation& mProtoCreation;
char mReceiverPublicHex[65]; char mReceiverPublicHex[65];
User* mReceiverUser; User* mReceiverUser;
}; };

View File

@ -1,172 +1,203 @@
#include "TransactionTransfer.h" #include "TransactionTransfer.h"
const std::string TransactionTransfer::mInvalidIndexMessage("invalid index"); const std::string TransactionTransfer::mInvalidIndexMessage("invalid index");
TransactionTransfer::KontoTableEntry::KontoTableEntry(model::table::User* user, google::protobuf::int64 amount, bool negativeAmount/* = false*/) TransactionTransfer::KontoTableEntry::KontoTableEntry(model::table::User* user, google::protobuf::int64 amount, bool negativeAmount/* = false*/)
{ {
//<span class="content-cell">Normaler&nbsp;User&nbsp;&lt;info@software-labor.de&gt;</span> //<span class="content-cell">Normaler&nbsp;User&nbsp;&lt;info@software-labor.de&gt;</span>
if (!user) return; if (!user) return;
composeAmountCellString(amount, negativeAmount); composeAmountCellString(amount, negativeAmount);
/*kontoNameCell = "<td>"; /*kontoNameCell = "<td>";
kontoNameCell += user->getFirstName(); kontoNameCell += user->getFirstName();
kontoNameCell += "&nbsp;"; kontoNameCell += "&nbsp;";
kontoNameCell += user->getLastName(); kontoNameCell += user->getLastName();
kontoNameCell += "&nbsp;&lt;"; kontoNameCell += "&nbsp;&lt;";
kontoNameCell += user->getEmail(); kontoNameCell += user->getEmail();
kontoNameCell += "&gt;</td>";*/ kontoNameCell += "&gt;</td>";*/
kontoNameCell = "<span class=\"content-cell\">"; kontoNameCell = "<span class=\"content-cell\">";
kontoNameCell += user->getNameWithEmailHtml(); kontoNameCell += user->getNameWithEmailHtml();
kontoNameCell += "</span>"; kontoNameCell += "</span>";
} }
TransactionTransfer::KontoTableEntry::KontoTableEntry(const std::string& pubkeyHex, google::protobuf::int64 amount, bool negativeAmount/* = false*/) TransactionTransfer::KontoTableEntry::KontoTableEntry(const std::string& pubkeyHex, google::protobuf::int64 amount, bool negativeAmount/* = false*/)
{ {
composeAmountCellString(amount, negativeAmount); composeAmountCellString(amount, negativeAmount);
//kontoNameCell = "<td class=\"small\">0x" + pubkeyHex + "</td>"; //kontoNameCell = "<td class=\"small\">0x" + pubkeyHex + "</td>";
kontoNameCell = "<span class = \"content-cell\">" + pubkeyHex + "</span>"; kontoNameCell = "<span class = \"content-cell\">" + pubkeyHex + "</span>";
} }
void TransactionTransfer::KontoTableEntry::composeAmountCellString(google::protobuf::int64 amount, bool negativeAmount) void TransactionTransfer::KontoTableEntry::composeAmountCellString(google::protobuf::int64 amount, bool negativeAmount)
{ {
//<span class="content-cell alert-color">-10 GDD</span> //<span class="content-cell alert-color">-10 GDD</span>
//<span class="content-cell success-color">10 GDD</span> //<span class="content-cell success-color">10 GDD</span>
amountCell = "<span class=\"content-cell "; amountCell = "<span class=\"content-cell ";
if (negativeAmount) { if (negativeAmount) {
amountCell += "alert-color\">-"; amountCell += "alert-color\">-";
} }
else { else {
amountCell += "success-color\">"; amountCell += "success-color\">";
} }
amountCell += amountToString(amount); amountCell += amountToString(amount);
//amountCell += " GDD</td>"; //amountCell += " GDD</td>";
amountCell += " GDD</span>"; amountCell += " GDD</span>";
} }
// ******************************************************************************************************************************** // ********************************************************************************************************************************
TransactionTransfer::TransactionTransfer(const std::string& memo, const model::messages::gradido::Transfer& protoTransfer) //TransactionTransfer::TransactionTransfer(const std::string& memo, const model::messages::gradido::Transfer& protoTransfer)
: TransactionBase(memo), mProtoTransfer(protoTransfer) TransactionTransfer::TransactionTransfer(const std::string& memo, const proto::gradido::GradidoTransfer& protoTransfer)
{ : TransactionBase(memo), mProtoTransfer(protoTransfer)
{
}
}
TransactionTransfer::~TransactionTransfer()
{ TransactionTransfer::~TransactionTransfer()
mKontoTable.clear(); {
} mKontoTable.clear();
}
int TransactionTransfer::prepare()
{ int TransactionTransfer::prepare()
lock(); {
const static char functionName[] = { "TransactionTransfer::prepare" }; lock();
if (mProtoTransfer.senderamounts_size() == 0) { const static char functionName[] = { "TransactionTransfer::prepare" };
addError(new Error(functionName, "hasn't sender amount(s)")); if (mProtoTransfer.senderamounts_size() == 0) {
unlock(); addError(new Error(functionName, "hasn't sender amount(s)"));
return -1; unlock();
} return -1;
if (mProtoTransfer.receiveramounts_size() == 0) { }
addError(new Error(functionName, "hasn't receiver amount(s)")); if (mProtoTransfer.receiveramounts_size() == 0) {
unlock(); addError(new Error(functionName, "hasn't receiver amount(s)"));
return -2; unlock();
} return -2;
mKontoTable.reserve(mProtoTransfer.senderamounts_size() + mProtoTransfer.receiveramounts_size()); }
mKontoTable.reserve(mProtoTransfer.senderamounts_size() + mProtoTransfer.receiveramounts_size());
//auto receiverAmount = mProtoTransfer.receiveramount();
//auto senderAmount //auto receiverAmount = mProtoTransfer.receiveramount();
int senderSum = 0; //auto senderAmount
int receiverSum = 0; int senderSum = 0;
int receiverSum = 0;
char pubkeyHexTemp[65];
char pubkeyHexTemp[65];
for (int i = 0; i < mProtoTransfer.senderamounts_size(); i++) {
auto senderAmount = mProtoTransfer.senderamounts(i); /*
auto pubkey = senderAmount.ed25519_sender_pubkey(); if (mProtoTransfer.has_local())
senderSum += senderAmount.amount(); {
if (pubkey.size() != 32) { auto local_transfer = mProtoTransfer.local();
addError(new ParamError(functionName, "invalid public key for sender ", i)); auto sender = local_transfer.sender();
unlock(); auto sender_pubkey = sender.pubkey();
return -3; auto receiver_pubkey = local_transfer.receiver();
} auto amount = sender.amount();
//User user((const unsigned char*)pubkey.data()); auto sender_user = controller::User::create();
auto user = controller::User::create(); auto receiver_user = controller::User::create();
if (!user->load((const unsigned char*)pubkey.data())) {
sodium_bin2hex(pubkeyHexTemp, 65, (const unsigned char*)pubkey.data(), pubkey.size()); if (!sender_user->load((const unsigned char*)sender_pubkey.data())) {
mKontoTable.push_back(KontoTableEntry(pubkeyHexTemp, senderAmount.amount(), true)); sodium_bin2hex(pubkeyHexTemp, 65, (const unsigned char*)sender_pubkey.data(), sender_pubkey.size());
} mKontoTable.push_back(KontoTableEntry(pubkeyHexTemp, -amount, true));
else { }
mKontoTable.push_back(KontoTableEntry(user->getModel(), senderAmount.amount(), true)); else {
} mKontoTable.push_back(KontoTableEntry(sender_user->getModel(), -amount, true));
} }
for (int i = 0; i < mProtoTransfer.receiveramounts_size(); i++) {
auto receiverAmount = mProtoTransfer.receiveramounts(i); if (!receiver_user->load((const unsigned char*)receiver_pubkey.data())) {
auto pubkey = receiverAmount.ed25519_receiver_pubkey(); sodium_bin2hex(pubkeyHexTemp, 65, (const unsigned char*)receiver_pubkey.data(), receiver_pubkey.size());
receiverSum += receiverAmount.amount(); mKontoTable.push_back(KontoTableEntry(pubkeyHexTemp, amount, true));
if (receiverAmount.ed25519_receiver_pubkey().size() != 32) { }
addError(new ParamError(functionName, "invalid public key for receiver ", i)); else {
unlock(); mKontoTable.push_back(KontoTableEntry(sender_user->getModel(), amount, true));
return -4; }
} }
auto user = controller::User::create(); */
if (!user->load((const unsigned char*)pubkey.data())) { for (int i = 0; i < mProtoTransfer.senderamounts_size(); i++) {
sodium_bin2hex(pubkeyHexTemp, 65, (const unsigned char*)pubkey.data(), pubkey.size()); auto senderAmount = mProtoTransfer.senderamounts(i);
mKontoTable.push_back(KontoTableEntry(pubkeyHexTemp, receiverAmount.amount(), false)); auto pubkey = senderAmount.ed25519_sender_pubkey();
} senderSum += senderAmount.amount();
else { if (pubkey.size() != 32) {
mKontoTable.push_back(KontoTableEntry(user->getModel(), receiverAmount.amount(), false)); addError(new ParamError(functionName, "invalid public key for sender ", i));
} unlock();
} return -3;
if (senderSum != receiverSum) { }
addError(new Error(functionName, "sender amounts sum != receiver amounts sum")); //User user((const unsigned char*)pubkey.data());
unlock(); auto user = controller::User::create();
return -5; if (!user->load((const unsigned char*)pubkey.data())) {
} sodium_bin2hex(pubkeyHexTemp, 65, (const unsigned char*)pubkey.data(), pubkey.size());
if (senderSum < 0) { mKontoTable.push_back(KontoTableEntry(pubkeyHexTemp, senderAmount.amount(), true));
addError(new Error(functionName, "negative amount not supported")); }
unlock(); else {
return -6; mKontoTable.push_back(KontoTableEntry(user->getModel(), senderAmount.amount(), true));
} }
}
/* for (int i = 0; i < mProtoTransfer.receiveramounts_size(); i++) {
mReceiverUser = new User(receiverPublic.data()); auto receiverAmount = mProtoTransfer.receiveramounts(i);
getErrors(mReceiverUser); auto pubkey = receiverAmount.ed25519_receiver_pubkey();
if (mReceiverUser->getUserState() == USER_EMPTY) { receiverSum += receiverAmount.amount();
sodium_bin2hex(mReceiverPublicHex, 65, (const unsigned char*)receiverPublic.data(), receiverPublic.size()); if (receiverAmount.ed25519_receiver_pubkey().size() != 32) {
delete mReceiverUser; addError(new ParamError(functionName, "invalid public key for receiver ", i));
mReceiverUser = nullptr; unlock();
} return -4;
else { }
memcpy(mReceiverPublicHex, mReceiverUser->getPublicKeyHex().data(), 64); auto user = controller::User::create();
} if (!user->load((const unsigned char*)pubkey.data())) {
//*/ sodium_bin2hex(pubkeyHexTemp, 65, (const unsigned char*)pubkey.data(), pubkey.size());
mKontoTable.push_back(KontoTableEntry(pubkeyHexTemp, receiverAmount.amount(), false));
unlock(); }
return 0; else {
} mKontoTable.push_back(KontoTableEntry(user->getModel(), receiverAmount.amount(), false));
}
const std::string& TransactionTransfer::getKontoNameCell(int index) }
{ if (senderSum != receiverSum) {
addError(new Error(functionName, "sender amounts sum != receiver amounts sum"));
lock(); unlock();
if (index >= mKontoTable.size()) { return -5;
unlock(); }
return mInvalidIndexMessage; if (senderSum < 0) {
} addError(new Error(functionName, "negative amount not supported"));
unlock(); unlock();
return -6;
return mKontoTable[index].kontoNameCell; }
}
const std::string& TransactionTransfer::getAmountCell(int index) /*
{ mReceiverUser = new User(receiverPublic.data());
lock(); getErrors(mReceiverUser);
if (index >= mKontoTable.size()) { if (mReceiverUser->getUserState() == USER_EMPTY) {
unlock(); sodium_bin2hex(mReceiverPublicHex, 65, (const unsigned char*)receiverPublic.data(), receiverPublic.size());
return mInvalidIndexMessage; delete mReceiverUser;
} mReceiverUser = nullptr;
unlock(); }
else {
return mKontoTable[index].amountCell; memcpy(mReceiverPublicHex, mReceiverUser->getPublicKeyHex().data(), 64);
} }
//*/
unlock();
return 0;
}
const std::string& TransactionTransfer::getKontoNameCell(int index)
{
lock();
if (index >= mKontoTable.size()) {
unlock();
return mInvalidIndexMessage;
}
unlock();
return mKontoTable[index].kontoNameCell;
}
const std::string& TransactionTransfer::getAmountCell(int index)
{
lock();
if (index >= mKontoTable.size()) {
unlock();
return mInvalidIndexMessage;
}
unlock();
return mKontoTable[index].amountCell;
}
>>>>>>> 1e4ae4a (update proto files matching with pauls proto version, update code which use them)

View File

@ -12,14 +12,14 @@
#pragma warning(disable:4800) #pragma warning(disable:4800)
#include "TransactionBase.h" #include "TransactionBase.h"
#include "../proto/gradido/Transfer.pb.h" #include "../proto/gradido/GradidoTransfer.pb.h"
#include "../controller/User.h" #include "../controller/User.h"
class TransactionTransfer : public TransactionBase class TransactionTransfer : public TransactionBase
{ {
public: public:
TransactionTransfer(const std::string& memo, const model::messages::gradido::Transfer& protoTransfer); TransactionTransfer(const std::string& memo, const proto::gradido::GradidoTransfer& protoTransfer);
~TransactionTransfer(); ~TransactionTransfer();
int prepare(); int prepare();
@ -44,7 +44,7 @@ protected:
void composeAmountCellString(google::protobuf::int64 amount, bool negativeAmount); void composeAmountCellString(google::protobuf::int64 amount, bool negativeAmount);
}; };
const model::messages::gradido::Transfer& mProtoTransfer; const proto::gradido::GradidoTransfer& mProtoTransfer;
std::vector<KontoTableEntry> mKontoTable; std::vector<KontoTableEntry> mKontoTable;
}; };

View File

@ -63,7 +63,7 @@ protected:
TransactionType mType; TransactionType mType;
std::string mProtoMessageBase64; std::string mProtoMessageBase64;
model::messages::gradido::TransactionBody mTransactionBody; proto::gradido::TransactionBody mTransactionBody;
TransactionBase* mTransactionSpecific; TransactionBase* mTransactionSpecific;
HASH mHash; HASH mHash;

View File

@ -11,8 +11,6 @@
#include "../lib/Profiler.h" #include "../lib/Profiler.h"
#include "../proto/gradido/Transaction.pb.h"
#include "sodium.h" #include "sodium.h"
#include "../ServerConfig.h" #include "../ServerConfig.h"
@ -99,8 +97,8 @@ int SigningTransaction::run() {
} }
} }
// get body bytes // get body bytes
model::messages::gradido::Transaction transaction; proto::gradido::GradidoTransaction transaction;
auto bodyBytes = transaction.mutable_bodybytes(); auto bodyBytes = transaction.mutable_body_bytes();
*bodyBytes = mProcessingeTransaction->getBodyBytes(); *bodyBytes = mProcessingeTransaction->getBodyBytes();
if (*bodyBytes == "") { if (*bodyBytes == "") {
getErrors(mProcessingeTransaction); getErrors(mProcessingeTransaction);
@ -135,7 +133,7 @@ int SigningTransaction::run() {
} }
*/ */
// add to message // add to message
auto sigMap = transaction.mutable_sigmap(); auto sigMap = transaction.mutable_sig_map();
auto sigPair = sigMap->add_sigpair(); auto sigPair = sigMap->add_sigpair();
auto pubkeyBytes = sigPair->mutable_pubkey(); auto pubkeyBytes = sigPair->mutable_pubkey();
@ -150,7 +148,7 @@ int SigningTransaction::run() {
/*std::string protoPrettyPrint; /*std::string protoPrettyPrint;
google::protobuf::TextFormat::PrintToString(transaction, &protoPrettyPrint); google::protobuf::TextFormat::PrintToString(transaction, &protoPrettyPrint);
printf("transaction pretty: %s\n", protoPrettyPrint.data()); printf("transaction pretty: %s\n", protoPrettyPrint.data());
model::messages::gradido::TransactionBody transactionBody; proto::gradido::TransactionBody transactionBody;
transactionBody.MergeFromString(transaction.bodybytes()); transactionBody.MergeFromString(transaction.bodybytes());
google::protobuf::TextFormat::PrintToString(transactionBody, &protoPrettyPrint); google::protobuf::TextFormat::PrintToString(transactionBody, &protoPrettyPrint);
printf("transaction body pretty: \n%s\n", protoPrettyPrint.data()); printf("transaction body pretty: \n%s\n", protoPrettyPrint.data());

View File

@ -8,7 +8,7 @@
#include "../model/User.h" #include "../model/User.h"
#include "../controller/User.h" #include "../controller/User.h"
#include "../proto/gradido/Transaction.pb.h" #include "../proto/gradido/GradidoTransaction.pb.h"
#include "ProcessingTransaction.h" #include "ProcessingTransaction.h"

View File

@ -13,7 +13,7 @@
%> %>
<%% <%%
const char* pageName = "Decode Transaction"; const char* pageName = "Decode Transaction";
model::messages::gradido::TransactionBody transactionBody; proto::gradido::TransactionBody transactionBody;
bool decoded = false; bool decoded = false;
bool adminUser = false; bool adminUser = false;
if(mSession && mSession->getNewUser()) { if(mSession && mSession->getNewUser()) {
@ -82,37 +82,36 @@
<p><%= transactionBody.memo() %></p> <p><%= transactionBody.memo() %></p>
<% if(transactionBody.has_transfer()) { <% if(transactionBody.has_transfer()) {
auto transfer = transactionBody.transfer(); auto transfer = transactionBody.transfer();
char hex[65]; memset(hex, 0, 65);
%> %>
<h3>Transfer</h3> <% if(transfer.has_local()) {
<b>Sender</b> auto local_transfer = transfer.local();
<% for(int i = 0; i < transfer.senderamounts_size(); i++) { auto sender_pubkey = local_transfer.sender().pubkey();
auto sender = transfer.senderamounts(i); auto receiver_pubkey = local_transfer.receiver();
char hex[65]; memset(hex, 0, 65); sodium_bin2hex(hex, 65, (const unsigned char*)sender_pubkey.data(), sender_pubkey.size());
sodium_bin2hex(hex, 65, (const unsigned char*)sender.ed25519_sender_pubkey().data(), sender.ed25519_sender_pubkey().size());
%> %>
<p>pubkey: <%= hex %></p> <h3>Local Transfer</h3>
<p>amount: <%= TransactionBase::amountToString(sender.amount()) %> GDD</p> <b>From: </b><%= hex %>
<% } %> <% sodium_bin2hex(hex, 65, (const unsigned char*)receiver_pubkey.data(), receiver_pubkey.size()); %>
<b>Receiver</b> <b>To: </b><%= hex %>
<% for(int i = 0; i < transfer.receiveramounts_size(); i++) { <b>Amount: </b><%= TransactionBase::amountToString(local_transfer.sender().amount()) %>
auto receiver = transfer.receiveramounts(i); <% } else { %>
char hex[65]; memset(hex, 0, 65); <h3>- Not implemented yet (Group Transfer) -</h3>
sodium_bin2hex(hex, 65, (const unsigned char*)receiver.ed25519_receiver_pubkey().data(), receiver.ed25519_receiver_pubkey().size()); <% } %>
%>
<p>pubkey: <%= hex %></p>
<p>amount: <%= TransactionBase::amountToString(receiver.amount()) %> GDD</p>
<% } %>
<% } else if(transactionBody.has_creation()) { <% } else if(transactionBody.has_creation()) {
auto creation = transactionBody.creation(); auto creation = transactionBody.creation();
TransactionCreation creationObject("", creation); TransactionCreation creationObject("", creation);
auto receiver = creation.receiveramount(); auto receiver = creation.receiveramount();
char hex[65]; memset(hex, 0, 65); char hex[65]; memset(hex, 0, 65);
sodium_bin2hex(hex, 65, (const unsigned char*)receiver.ed25519_receiver_pubkey().data(), receiver.ed25519_receiver_pubkey().size()); sodium_bin2hex(hex, 65, (const unsigned char*)receiver.pubkey().data(), receiver.pubkey().size());
Poco::AutoPtr<controller::User> user = nullptr; Poco::AutoPtr<controller::User> user = nullptr;
if(adminUser) { if(adminUser) {
user = controller::User::create(); user = controller::User::create();
if(!user->load((const unsigned char*)receiver.ed25519_receiver_pubkey().data())) { if(!user->load((const unsigned char*)receiver.pubkey().data())) {
user.assign(nullptr); user.assign(nullptr);
} }
} }