From fc11929fc1be96018f50d38fa18ed71a4c874b2d Mon Sep 17 00:00:00 2001 From: Dario Date: Fri, 28 Aug 2020 12:37:13 +0200 Subject: [PATCH] Add hedera account page files and classes needed for this --- .../HTTPInterface/AdminHederaAccountPage.cpp | 125 ++++++++++++++++++ .../HTTPInterface/AdminHederaAccountPage.h | 20 +++ .../PageRequestHandlerFactory.cpp | 12 ++ src/cpp/controller/HederaAccount.cpp | 69 ++++++++++ src/cpp/controller/HederaAccount.h | 33 +++++ src/cpp/model/table/CryptoKey.h | 4 +- src/cpp/model/table/HederaAccount.cpp | 14 ++ src/cpp/model/table/HederaAccount.h | 4 +- src/cpsp/adminTopic.cpsp | 23 ++++ src/cpsp/header_large.cpsp | 19 +++ 10 files changed, 320 insertions(+), 3 deletions(-) create mode 100644 src/cpp/HTTPInterface/AdminHederaAccountPage.cpp create mode 100644 src/cpp/HTTPInterface/AdminHederaAccountPage.h create mode 100644 src/cpp/controller/HederaAccount.cpp create mode 100644 src/cpp/controller/HederaAccount.h create mode 100644 src/cpsp/adminTopic.cpsp create mode 100644 src/cpsp/header_large.cpsp diff --git a/src/cpp/HTTPInterface/AdminHederaAccountPage.cpp b/src/cpp/HTTPInterface/AdminHederaAccountPage.cpp new file mode 100644 index 000000000..0500a8996 --- /dev/null +++ b/src/cpp/HTTPInterface/AdminHederaAccountPage.cpp @@ -0,0 +1,125 @@ +#include "AdminHederaAccountPage.h" +#include "Poco/Net/HTTPServerRequest.h" +#include "Poco/Net/HTTPServerResponse.h" +#include "Poco/Net/HTMLForm.h" +#include "Poco/DeflatingStream.h" + + +#line 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp" + + #include "../controller/HederaAccount.h" +#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp" + +#include "../ServerConfig.h" + + +AdminHederaAccountPage::AdminHederaAccountPage(Session* arg): + SessionHTTPRequestHandler(arg) +{ +} + + +void AdminHederaAccountPage::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\\adminHederaAccount.cpsp" + + const char* pageName = "Hedera Account"; + + // add + if(!form.empty()) { + + } + + + +#line 3 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp" + + bool withMaterialIcons = false; + 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_large.cpsp + responseStream << "\n"; + responseStream << "\n"; + responseStream << "\n"; + responseStream << "\n"; + responseStream << "\n"; + responseStream << "\n"; + responseStream << "Gradido Login Server: "; +#line 11 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp" + responseStream << ( pageName ); + responseStream << "\n"; + responseStream << "\n"; +#line 13 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp" + if(withMaterialIcons) { responseStream << "\n"; + responseStream << "\n"; +#line 15 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp" + } responseStream << "\n"; + responseStream << "\n"; + responseStream << "\n"; + responseStream << "
\n"; + responseStream << "\t\t
"; + // end include header_large.cpsp + responseStream << "\n"; +#line 21 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp" + responseStream << ( getErrorsHtml() ); + responseStream << "\n"; + responseStream << "
\n"; + responseStream << "\t
\n"; + responseStream << "\t

Einen neuen Account anlegen

\n"; + responseStream << "\t
\n"; + responseStream << "\t
\n"; + responseStream << "\t\t
\n"; + responseStream << "\t\t\t\n"; + responseStream << "\t\t\t\n"; + responseStream << "\t\t\t\n"; + responseStream << "\t\t\t\n"; + responseStream << "\t\t\t\n"; + responseStream << "\t\t\t\n"; + responseStream << "\t\t\t\n"; + responseStream << "\t\t\t\n"; + responseStream << "\t\t\t\n"; + responseStream << "\t
\n"; + responseStream << "
\n"; + // begin include footer.cpsp + responseStream << "
\n"; + responseStream << "

Copyright © Gradido 2020

\n"; + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << " "; +#line 6 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\footer.cpsp" + responseStream << ( mTimeProfiler.string() ); + responseStream << "\n"; + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << "

Login Server in Entwicklung

\n"; + responseStream << "

Alpha "; +#line 10 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\footer.cpsp" + responseStream << ( ServerConfig::g_versionString ); + responseStream << "

\n"; + responseStream << "
\n"; + responseStream << "
\n"; + responseStream << "\n"; + responseStream << "\n"; + responseStream << ""; + // end include footer.cpsp + responseStream << "\n"; + if (_compressResponse) _gzipStream.close(); +} diff --git a/src/cpp/HTTPInterface/AdminHederaAccountPage.h b/src/cpp/HTTPInterface/AdminHederaAccountPage.h new file mode 100644 index 000000000..b35f6ffb3 --- /dev/null +++ b/src/cpp/HTTPInterface/AdminHederaAccountPage.h @@ -0,0 +1,20 @@ +#ifndef AdminHederaAccountPage_INCLUDED +#define AdminHederaAccountPage_INCLUDED + + +#include "Poco/Net/HTTPRequestHandler.h" + + +#include "SessionHTTPRequestHandler.h" + + +class AdminHederaAccountPage: public SessionHTTPRequestHandler +{ +public: + AdminHederaAccountPage(Session*); + + void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response); +}; + + +#endif // AdminHederaAccountPage_INCLUDED diff --git a/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp b/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp index 50dc610af..11cdb7d78 100644 --- a/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp +++ b/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp @@ -28,6 +28,8 @@ #include "AdminUserPasswordReset.h" #include "RegisterDirectPage.h" #include "AdminGroupsPage.h" +#include "AdminTopicPage.h" +#include "AdminHederaAccountPage.h" #include "DecodeTransactionPage.h" #include "RepairDefectPassphrase.h" @@ -212,6 +214,16 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c pageRequestHandler->setProfiler(timeUsed); return pageRequestHandler; } + if (url_first_part == "/topic") { + auto pageRequestHandler = new AdminTopicPage(s); + pageRequestHandler->setProfiler(timeUsed); + return pageRequestHandler; + } + if (url_first_part == "/hedera_account") { + auto pageRequestHandler = new AdminHederaAccountPage(s); + pageRequestHandler->setProfiler(timeUsed); + return pageRequestHandler; + } } if(url_first_part == "/logout") { diff --git a/src/cpp/controller/HederaAccount.cpp b/src/cpp/controller/HederaAccount.cpp new file mode 100644 index 000000000..9a858bd7c --- /dev/null +++ b/src/cpp/controller/HederaAccount.cpp @@ -0,0 +1,69 @@ + +#include "HederaAccount.h" + +namespace controller { + + HederaAccount::HederaAccount(model::table::HederaAccount* dbModel) + { + mDBModel = dbModel; + } + + HederaAccount::~HederaAccount() + { + + } + + Poco::AutoPtr HederaAccount::create(int user_id, int account_hedera_id, int account_key_id, Poco::UInt64 balance/* = 0*/) + { + auto db = new model::table::HederaAccount(user_id, account_hedera_id, account_key_id, balance); + auto group = new HederaAccount(db); + return Poco::AutoPtr(group); + } + + std::vector> HederaAccount::load(const std::string& alias) + { + auto db = new model::table::HederaAccount(); + auto group_list = db->loadFromDB("alias", alias, 0); + + std::vector> resultVector; + resultVector.reserve(group_list.size()); + for (auto it = group_list.begin(); it != group_list.end(); it++) { + resultVector.push_back(new HederaAccount(new model::table::HederaAccount(*it))); + } + return resultVector; + } + + std::vector> HederaAccount::listAll() + { + auto db = new model::table::HederaAccount(); + std::vector group_list; + // throw an unresolved external symbol error + //group_list = db->loadAllFromDB(); + + // work around for not working call to loadAllFromDB + auto cm = ConnectionManager::getInstance(); + Poco::Data::Statement select(cm->getConnection(CONNECTION_MYSQL_LOGIN_SERVER)); + + select << "SELECT id, alias, name, url, description FROM " << db->getTableName() + , Poco::Data::Keywords::into(group_list); + + size_t resultCount = 0; + try { + resultCount = select.execute(); + } + catch (Poco::Exception& ex) { + printf("[Group::listAll] poco exception: %s\n", ex.displayText().data()); + } + // work around end + std::vector> resultVector; + + resultVector.reserve(group_list.size()); + for (auto it = group_list.begin(); it != group_list.end(); it++) { + Poco::AutoPtr group_ptr(new HederaAccount(new model::table::HederaAccount(*it))); + resultVector.push_back(group_ptr); + } + return resultVector; + } + +} + diff --git a/src/cpp/controller/HederaAccount.h b/src/cpp/controller/HederaAccount.h new file mode 100644 index 000000000..9efd89c12 --- /dev/null +++ b/src/cpp/controller/HederaAccount.h @@ -0,0 +1,33 @@ +#ifndef GRADIDO_LOGIN_SERVER_CONTROLLER_HEDERA_ACCOUNT_INCLUDE +#define GRADIDO_LOGIN_SERVER_CONTROLLER_HEDERA_ACCOUNT_INCLUDE + +#include "../model/table/HederaAccount.h" + +#include "Poco/SharedPtr.h" + +#include "TableControllerBase.h" + +namespace controller { + class HederaAccount : public TableControllerBase + { + public: + + ~HederaAccount(); + + static Poco::AutoPtr create(int user_id, int account_hedera_id, int account_key_id, Poco::UInt64 balance = 0); + + static std::vector> load(const std::string& alias); + static std::vector> listAll(); + + inline bool deleteFromDB() { return mDBModel->deleteFromDB(); } + + inline Poco::AutoPtr getModel() { return _getModel(); } + + + protected: + HederaAccount(model::table::HederaAccount* dbModel); + + }; +} + +#endif //GRADIDO_LOGIN_SERVER_CONTROLLER_HEDERA_ACCOUNT_INCLUDE \ No newline at end of file diff --git a/src/cpp/model/table/CryptoKey.h b/src/cpp/model/table/CryptoKey.h index 1a04dd387..f4fd8bebf 100644 --- a/src/cpp/model/table/CryptoKey.h +++ b/src/cpp/model/table/CryptoKey.h @@ -8,8 +8,8 @@ namespace model { namespace table { enum KeyType { - KEY_TYPE_SODIUM_ED25519, - KEY_TYPE_ED25519_REF10, + KEY_TYPE_SODIUM_ED25519 = 0, + KEY_TYPE_ED25519_REF10 = 1, KEY_TYPE_COUNT }; diff --git a/src/cpp/model/table/HederaAccount.cpp b/src/cpp/model/table/HederaAccount.cpp index 4018c653a..63c6068bc 100644 --- a/src/cpp/model/table/HederaAccount.cpp +++ b/src/cpp/model/table/HederaAccount.cpp @@ -6,6 +6,20 @@ namespace model { namespace table { HederaAccount::HederaAccount() + : mUserId(0), mAccountHederaId(0), mAccountKeyId(0), mBalance(0) + { + + } + + HederaAccount::HederaAccount(int user_id, int account_hedera_id, int account_key_id, Poco::UInt64 balance/* = 0*/) + : mUserId(user_id), mAccountHederaId(account_hedera_id), mAccountKeyId(account_key_id), mBalance(balance) + { + + } + + HederaAccount::HederaAccount(const HederaAccountTuple& tuple) + : ModelBase(tuple.get<0>()), + mUserId(tuple.get<1>()), mAccountHederaId(tuple.get<2>()), mAccountKeyId(tuple.get<3>()), mBalance(tuple.get<4>()), mUpdated(tuple.get<5>()) { } diff --git a/src/cpp/model/table/HederaAccount.h b/src/cpp/model/table/HederaAccount.h index c9c85b554..ca56dfd62 100644 --- a/src/cpp/model/table/HederaAccount.h +++ b/src/cpp/model/table/HederaAccount.h @@ -7,12 +7,14 @@ namespace model { namespace table { - typedef Poco::Tuple HederaAccountsTuple; + typedef Poco::Tuple HederaAccountTuple; class HederaAccount : public ModelBase { public: HederaAccount(); + HederaAccount(int user_id, int account_hedera_id, int account_key_id, Poco::UInt64 balance = 0); + HederaAccount(const HederaAccountTuple& tuple); ~HederaAccount(); // generic db operations diff --git a/src/cpsp/adminTopic.cpsp b/src/cpsp/adminTopic.cpsp new file mode 100644 index 000000000..3eac5a976 --- /dev/null +++ b/src/cpsp/adminTopic.cpsp @@ -0,0 +1,23 @@ +<%@ page class="AdminTopicPage" %> +<%@ page form="true" %> +<%@ page compressed="true" %> +<%@ page baseClass="SessionHTTPRequestHandler" %> +<%@ page ctorArg="Session*" %> +<%@ header include="SessionHTTPRequestHandler.h" %> +<%! + +%> +<%% + const char* pageName = "Topic"; + + + +%><%@ include file="header_large.cpsp" %> +<%= getErrorsHtml() %> +
+

Topic Admin Page

+
+
+ +
+<%@ include file="footer.cpsp" %> diff --git a/src/cpsp/header_large.cpsp b/src/cpsp/header_large.cpsp new file mode 100644 index 000000000..2aa8f5f4b --- /dev/null +++ b/src/cpsp/header_large.cpsp @@ -0,0 +1,19 @@ +<%! +#include "../ServerConfig.h" +%><%% + bool withMaterialIcons = false; +%> + + + + + +Gradido Login Server: <%= pageName %> + +<% if(withMaterialIcons) { %> + +<% } %> + + +
+
\ No newline at end of file