#include "AdminTopicPage.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\\adminTopic.cpsp" #include "../controller/HederaAccount.h" #include "../controller/HederaTopic.h" #include "../controller/Group.h" #include "../SingletonManager/SessionManager.h" #include "../ServerConfig.h" #include "../lib/DataTypeConverter.h" #include "../lib/Profiler.h" #include "../lib/Success.h" #include "Poco/Timespan.h" #include "Poco/URI.h" #line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp" #include "../ServerConfig.h" AdminTopicPage::AdminTopicPage(Session* arg): SessionHTTPRequestHandler(arg) { } void AdminTopicPage::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 21 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp" const char* pageName = "Topic"; auto user = mSession->getNewUser(); auto sm = SessionManager::getInstance(); Profiler hedera_time; std::string name = ""; std::string topic_id_string = ""; int auto_renew_account = 0; int auto_renew_period = 7890000; // 3 Monate int group_id = 0; Poco::URI uri(request.getURI()); auto uri_query = uri.getQueryParameters(); std::string action = ""; Poco::AutoPtr query_hedera_topic; // parsing get query params if(uri_query.size() >= 2) { if(uri_query[0].first == "action") { action = uri_query[0].second; } if(uri_query[1].first == "topic_id") { std::string topic_id_from_query; int topic_id = 0; topic_id_from_query = uri_query[1].second; if(DataTypeConverter::strToInt(topic_id_from_query, topic_id) != DataTypeConverter::NUMBER_PARSE_OKAY) { addError(new Error("Int Convert Error", "Error converting topic_id_from_query to int")); } else { auto hedera_topic = controller::HederaTopic::load(topic_id); if(hedera_topic.isNull()) { addError(new Error("Action", "hedera topic not found")); } else { query_hedera_topic = hedera_topic; } } } } // actions if(!query_hedera_topic.isNull()) { if(action == "getTopicInfos") { hedera_time.reset(); if(query_hedera_topic->updateWithGetTopicInfos(user)) { addNotification(new ParamSuccess("Hedera", "hedera get topic infos success in ", hedera_time.string())); } else { addError(new ParamError("Hedera", "hedera get topic infos failed in ", hedera_time.string())); } getErrors(query_hedera_topic); } } else if(!form.empty()) { name = form.get("topic-name", ""); topic_id_string = form.get("topic-id", ""); auto auto_renew_account_string = form.get("topic-auto-renew-account", "0"); auto auto_renew_period_string = form.get("topic-auto-renew-period", "7890000"); auto group_id_string = form.get("topic-group", "-1"); Poco::AutoPtr topic_id; if(topic_id_string != "" && sm->isValid(topic_id_string, VALIDATE_HEDERA_ID)) { topic_id = controller::HederaId::create(topic_id_string); if(topic_id.isNull()) { addError(new Error("Hedera Id", "cannot parse hedera id")); } } else { if(name != "" && !sm->isValid(name, VALIDATE_NAME)) { addError(new Error("Topic", "Name not valid, at least 3 Character")); } if(!sm->isValid(auto_renew_account_string, VALIDATE_ONLY_INTEGER)) { addError(new Error("Topic", "auto renew account id not an integer")); } else { if(DataTypeConverter::strToInt(auto_renew_account_string, auto_renew_account) != DataTypeConverter::NUMBER_PARSE_OKAY) { addError(new Error("Int convert error", "Error converting auto renew account id to int")); } } if(!sm->isValid(auto_renew_period_string, VALIDATE_ONLY_INTEGER)) { addError(new Error("Topic", "auto renew period not an integer")); } else { if(DataTypeConverter::strToInt(auto_renew_period_string, auto_renew_period) != DataTypeConverter::NUMBER_PARSE_OKAY) { addError(new Error("Int convert error", "Error converting auto renew period to int")); } } } if(!sm->isValid(group_id_string, VALIDATE_ONLY_INTEGER)) { addError(new Error("Topic", "group_id not an integer")); } else { if(DataTypeConverter::strToInt(group_id_string, group_id) != DataTypeConverter::NUMBER_PARSE_OKAY) { addError(new Error("Int convert error", "Error converting group_id to int")); } } //const std::string& name, int autoRenewAccountId, int autoRenewPeriod, int groupId // add or create topic? // add topic if(!topic_id.isNull()) { if(topic_id->getModel()->insertIntoDB(true)) { auto hedera_topic = controller::HederaTopic::loadFromHedera(topic_id, group_id, user); if(!hedera_topic.isNull()) { hedera_topic->getModel()->insertIntoDB(false); } else { addError(new Error("Hedera Topic", "error load topic from hedera")); } } else { addError(new Error("Hedera Id", "Error saving hedera id")); } // create topic } else { auto hedera_topic = controller::HederaTopic::create(name, auto_renew_account, auto_renew_period, group_id); if(!hedera_topic->getModel()->insertIntoDB(true)) { addError(new Error("Topic", "error saving into db")); } else { auto payer = controller::HederaAccount::load(auto_renew_account); if(payer.isNull()) { addError(new Error("Payer", "payer account not found")); } else { auto hedera_task = hedera_topic->createTopic(payer, user); if(hedera_task.isNull()) { addError(new Error("Create Topic", "Failed")); getErrors(hedera_topic); } } } } } auto hedera_accounts = controller::HederaAccount::load("user_id", user->getModel()->getID()); //std::vector> hedera_accounts; auto groups = controller::Group::listAll(); std::map group_indices; int count = 0; for(auto it = groups.begin(); it != groups.end(); it++) { group_indices.insert(std::pair((*it)->getModel()->getID(), count)); count++; } auto hedera_topics = controller::HederaTopic::listAll(); //std::vector> hedera_topics; #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
\n"; responseStream << "\t\t\t
\n"; responseStream << "\t\t\t\t
    \n"; responseStream << "\t\t\t\t\t"; #line 22 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp" if(!user.isNull()) { responseStream << "\n"; responseStream << "\t\t\t\t\t\t
  • getGroupBaseUrl() ); responseStream << "/\">Startseite
  • \n"; responseStream << "\t\t\t\t\t"; #line 24 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp" } responseStream << "\n"; responseStream << "\t\t\t\t\t
  • Gruppen
  • \n"; responseStream << "\t\t\t\t\t
  • Node Server
  • \n"; responseStream << "\t\t\t\t\t
  • Hedera Accounts
  • \n"; responseStream << "\t\t\t\t\t
  • Hedera Topics
  • \n"; responseStream << "\t\t\t\t
\n"; responseStream << "\t\t\t
\n"; responseStream << "\t\t
\n"; responseStream << "\t\t
"; // end include header_large.cpsp responseStream << "\n"; responseStream << "\n"; #line 180 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp" responseStream << ( getErrorsHtml() ); responseStream << "\n"; responseStream << "
\n"; responseStream << "\t

Topic Admin Page

\n"; responseStream << "
\n"; responseStream << "
\n"; responseStream << "\t
\n"; responseStream << "\t\t
\n"; responseStream << "\t\t\t

Hedera Topics

\n"; responseStream << "\t\t
\t\n"; responseStream << "\t\t
\n"; responseStream << "\t\t\t
\n"; responseStream << "\t\t\t\t
Topic ID
\t\t\t\n"; responseStream << "\t\t\t\t
Name
\n"; responseStream << "\t\t\t\t
Network Type
\n"; responseStream << "\t\t\t\t
Auto Renew Account Balance
\n"; responseStream << "\t\t\t\t
Auto Renew Period
\n"; responseStream << "\t\t\t\t
Group ID
\n"; responseStream << "\t\t\t\t
Current Timeout
\n"; responseStream << "\t\t\t\t
Sequence Number
\n"; responseStream << "\t\t\t\t
Last Updated
\n"; responseStream << "\t\t\t\t
Aktionen
\n"; responseStream << "\t\t\t
\n"; responseStream << "\t\t\t"; #line 202 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp" for(auto it = hedera_topics.begin(); it != hedera_topics.end(); it++) { auto hedera_topic_model = (*it)->getModel(); auto updateUrl = ServerConfig::g_serverPath + "/topic?action=getTopicInfos&topic_id=" + std::to_string(hedera_topic_model->getID()); std::string kabuto_url = "https://explorer.kabuto.sh/";//testnet/id/0.0.132132; auto auto_renew_account = (*it)->getAutoRenewAccount(); auto renew_account_model = auto_renew_account->getModel(); if(renew_account_model->getNetworkType() == ServerConfig::HEDERA_TESTNET) { kabuto_url += "testnet/"; } else if(renew_account_model->getNetworkType() == ServerConfig::HEDERA_MAINNET) { kabuto_url += "mainnet/"; } kabuto_url += "id/"; std::string timeout_color = "success-color"; if(hedera_topic_model->getCurrentTimeout() < Poco::DateTime()) { timeout_color = "alert-color"; } else if((hedera_topic_model->getCurrentTimeout() - Poco::DateTime()) < Poco::Timespan(2,0,0,0,0)) { timeout_color = "orange-color"; } std::string topic_hedera_id_string = ""; auto topic_hedera_id = (*it)->getTopicHederaId(); if(!topic_hedera_id.isNull()) { topic_hedera_id_string = topic_hedera_id->getModel()->toString(); kabuto_url += topic_hedera_id_string; } responseStream << "\n"; responseStream << "\t\t\t\t
\n"; responseStream << "\t\t\t\t\t\n"; responseStream << "\t\t\t\t\t
"; #line 235 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp" responseStream << ( hedera_topic_model->getName() ); responseStream << "
\n"; responseStream << "\t\t\t\t\t
"; #line 236 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp" responseStream << ( model::table::HederaAccount::hederaNetworkTypeToString(renew_account_model->getNetworkType()) ); responseStream << "
\n"; responseStream << "\t\t\t\t\t
"; #line 237 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp" responseStream << ( renew_account_model->getBalanceString() ); responseStream << "
\n"; responseStream << "\t\t\t\t\t
"; #line 238 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp" responseStream << ( hedera_topic_model->getAutoRenewPeriodString() ); responseStream << "
\n"; responseStream << "\t\t\t\t\t
"; #line 239 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp" responseStream << ( hedera_topic_model->getGroupId() ); responseStream << "
\n"; responseStream << "\t\t\t\t\t
"; #line 240 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp" responseStream << ( hedera_topic_model->getCurrentTimeoutString() ); responseStream << "
\n"; responseStream << "\t\t\t\t\t
"; #line 241 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp" responseStream << ( hedera_topic_model->getSequenceNumber() ); responseStream << "
\n"; responseStream << "\t\t\t\t\t
"; #line 242 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp" responseStream << ( hedera_topic_model->getUpdatedString() ); responseStream << "
\n"; responseStream << "\t\t\t\t\t
"; #line 243 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp" if(!topic_hedera_id.isNull()) { responseStream << "\n"; responseStream << "\t\t\t\t\t\t\n"; responseStream << "\t\t\t\t\t\t"; #line 247 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp" } responseStream << "\n"; responseStream << "\t\t\t\t\t
\n"; responseStream << "\t\t\t\t
\n"; responseStream << "\t\t\t"; #line 250 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp" } responseStream << "\n"; responseStream << "\t\t
\n"; responseStream << "\t
\n"; responseStream << "\t\n"; responseStream << "\t
\n"; responseStream << "\t \n"; responseStream << "\t \n"; responseStream << "\t
\n"; responseStream << "\t
\n"; responseStream << "\t\t
\n"; responseStream << "\t\t\t

Ein neues Topic anlegen

\n"; responseStream << "\t\t
\n"; responseStream << "\t\t
\n"; responseStream << "\t\t\t
\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t
\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t
\n"; responseStream << "\t\t
\n"; responseStream << "\t
\n"; responseStream << "\t
\n"; responseStream << "\t\t
\n"; responseStream << "\t\t\t

Ein bestehendes Topic eintragen

\n"; responseStream << "\t\t
\n"; responseStream << "\t\t
\n"; responseStream << "\t\t\t
\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t
\n"; responseStream << "\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"; responseStream << "\n"; responseStream << "\n"; responseStream << ""; if (_compressResponse) _gzipStream.close(); }