diff --git a/src/cpp/HTTPInterface/DecodeTransactionPage.cpp b/src/cpp/HTTPInterface/DecodeTransactionPage.cpp new file mode 100644 index 000000000..73cdebee6 --- /dev/null +++ b/src/cpp/HTTPInterface/DecodeTransactionPage.cpp @@ -0,0 +1,229 @@ +#include "DecodeTransactionPage.h" +#include "Poco/Net/HTTPServerRequest.h" +#include "Poco/Net/HTTPServerResponse.h" +#include "Poco/Net/HTMLForm.h" +#include "Poco/DeflatingStream.h" + + +#line 6 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" + +#include "sodium.h" +#include "../proto/gradido/TransactionBody.pb.h" +#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp" + +#include "../ServerConfig.h" + + +void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response) +{ + response.setChunkedTransferEncoding(true); + response.setContentType("text/html"); + bool _compressResponse(request.hasToken("Accept-Encoding", "gzip")); + 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" + + const char* pageName = "Decode Transaction"; + model::messages::gradido::TransactionBody transactionBody; + bool decoded = false; + 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")); + } else { + std::string binString((char*)binBuffer, resultingBinSize); + free(binBuffer); + + if (!transactionBody.ParseFromString(binString)) { + addError(new Error("ProcessingTransaction", "error creating Transaction from binary Message")); + } else { + decoded = true; + } + } + } + } + /* + char *sodium_bin2hex(char * const hex, const size_t hex_maxlen, + const unsigned char * const bin, const size_t bin_len); + */ + std::ostream& _responseStream = response.send(); + Poco::DeflatingOutputStream _gzipStream(_responseStream, Poco::DeflatingStreamBuf::STREAM_GZIP, 1); + std::ostream& responseStream = _compressResponse ? _gzipStream : _responseStream; + responseStream << "\n"; + // begin include header_old.cpsp + responseStream << "\n"; + responseStream << "\n"; + responseStream << "\n"; + responseStream << "
\n"; + responseStream << "\n"; + responseStream << "\n"; + responseStream << "Login Server in Entwicklung
\n"; + responseStream << "\tAlpha "; +#line 53 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp" + responseStream << ( ServerConfig::g_versionString ); + responseStream << "
\n"; + responseStream << "Verwendungszweck:
\n"; + responseStream << "\t\t"; +#line 57 "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" + if(transactionBody.has_transfer()) { + auto transfer = transactionBody.transfer(); + responseStream << "\n"; + responseStream << "\t\tpubkey: "; +#line 68 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" + responseStream << ( hex ); + responseStream << "
\n"; + responseStream << "\t\t\tamount: "; +#line 69 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" + responseStream << ( sender.amount() ); + responseStream << "
\n"; + responseStream << "\t\t"; +#line 70 "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" + 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\tpubkey: "; +#line 77 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" + responseStream << ( hex ); + responseStream << "
\n"; + responseStream << "\t\t\tamount: "; +#line 78 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp" + responseStream << ( receiver.amount() ); + responseStream << "
\n"; + responseStream << "\t\t"; +#line 79 "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"; + responseStream << "\t\t