mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
query for consensus get topic info, currently a invalid account id error is happen
This commit is contained in:
parent
a41ea1a6ae
commit
e8612bbb49
@ -12,8 +12,13 @@
|
||||
#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"
|
||||
@ -33,11 +38,12 @@ void AdminTopicPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
if (_compressResponse) response.set("Content-Encoding", "gzip");
|
||||
|
||||
Poco::Net::HTMLForm form(request, request.stream());
|
||||
#line 16 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#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 = "";
|
||||
int auto_renew_account = 0;
|
||||
@ -45,8 +51,48 @@ void AdminTopicPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
|
||||
int group_id = 0;
|
||||
|
||||
Poco::URI uri(request.getURI());
|
||||
auto uri_query = uri.getQueryParameters();
|
||||
std::string action = "";
|
||||
Poco::AutoPtr<controller::HederaTopic> query_hedera_topic;
|
||||
|
||||
if(!form.empty()) {
|
||||
// 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", "");
|
||||
auto auto_renew_account_string = form.get("topic-auto-renew-account", "0");
|
||||
auto auto_renew_period_string = form.get("topic-auto-renew-period", "604800");
|
||||
@ -162,7 +208,7 @@ void AdminTopicPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "\t}\n";
|
||||
responseStream << "\t\n";
|
||||
responseStream << "</style>\n";
|
||||
#line 87 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 133 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "<div class=\"content-container info-container\">\n";
|
||||
@ -187,7 +233,7 @@ void AdminTopicPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c5\">Aktionen</div>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 109 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 155 "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());
|
||||
@ -202,47 +248,47 @@ void AdminTopicPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<div class=\"row\">\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c2\">";
|
||||
#line 122 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 168 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( (*it)->getTopicHederaId()->getModel()->toString() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c3\">";
|
||||
#line 123 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 169 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( hedera_topic_model->getName() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c3\">";
|
||||
#line 124 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 170 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( model::table::HederaAccount::hederaNetworkTypeToString(renew_account_model->getNetworkType()) );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c4\">";
|
||||
#line 125 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 171 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( renew_account_model->getBalanceString() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c4\">";
|
||||
#line 126 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 172 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( hedera_topic_model->getAutoRenewPeriodString() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c3\">";
|
||||
#line 127 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 173 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( hedera_topic_model->getGroupId() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c3 ";
|
||||
#line 128 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 174 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( timeout_color );
|
||||
responseStream << "\">";
|
||||
#line 128 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 174 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( hedera_topic_model->getCurrentTimeoutString() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c2\">";
|
||||
#line 129 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 175 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( hedera_topic_model->getSequenceNumber() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c3\">";
|
||||
#line 130 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 176 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( hedera_topic_model->getUpdatedString() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c5\">\n";
|
||||
responseStream << "\t\t\t\t\t\t<button class=\"form-button\" title=\"Query on Hedera, cost some fees\" onclick=\"window.location.href='";
|
||||
#line 132 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 178 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( updateUrl );
|
||||
responseStream << "'\" >\n";
|
||||
responseStream << "\t\t\t\t\t\t\tget topic infos\n";
|
||||
@ -250,7 +296,7 @@ void AdminTopicPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "\t\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 137 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 183 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
@ -259,72 +305,72 @@ void AdminTopicPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "\t<div class=\"center-form-form\">\n";
|
||||
responseStream << "\t\t<form method=\"POST\" action=\"";
|
||||
#line 144 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 190 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
responseStream << "/topic\">\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"topic-name\">Name</label>\n";
|
||||
responseStream << "\t\t\t<input type=\"text\" class=\"form-control\" id=\"topic-name\" name=\"topic-name\" value=\"";
|
||||
#line 146 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 192 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( name );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"topic-auto-renew-account\">Auto Renew Hedera Account</label>\n";
|
||||
responseStream << "\t\t\t<select name=\"topic-auto-renew-account\" id=\"topic-auto-renew-account\">\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 149 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 195 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
for(auto it = hedera_accounts.begin(); it != hedera_accounts.end(); it++) {
|
||||
auto model = (*it)->getModel();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<option title=\"";
|
||||
#line 152 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 198 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( model->toString() );
|
||||
responseStream << "\" value=\"";
|
||||
#line 152 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 198 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( model->getID() );
|
||||
responseStream << "\" ";
|
||||
#line 152 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 198 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
if(auto_renew_account == model->getID()) { responseStream << "selected=\"selected\"";
|
||||
#line 152 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 198 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
} responseStream << ">";
|
||||
#line 152 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 198 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( (*it)->toShortSelectOptionName() );
|
||||
responseStream << "</option>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 153 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 199 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t</select>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"topic-auto-renew-period\">Auto Renew Period in seconds</label>\n";
|
||||
responseStream << "\t\t\t<div><input class=\"form-control input-40\" id=\"topic-auto-renew-period\" value=\"";
|
||||
#line 156 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 202 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( auto_renew_period );
|
||||
responseStream << "\" type=\"number\" name=\"topic-auto-renew-period\"/><span style=\"margin-left:8px\" id=\"readable-auto-renew-period\"></span><div>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"topic-group\">Group</label>\n";
|
||||
responseStream << "\t\t\t<select class=\"form-control\" name=\"topic-group\" id=\"topic-group\">\t\t\t\n";
|
||||
responseStream << "\t\t\t\t<option value=\"-1\">Keine Gruppe</option>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 160 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 206 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
for(auto it = groups.begin(); it != groups.end(); it++) {
|
||||
auto group_model = (*it)->getModel(); responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<option title=\"";
|
||||
#line 162 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 208 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( group_model->getDescription() );
|
||||
responseStream << "\" value=\"";
|
||||
#line 162 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 208 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( group_model->getID() );
|
||||
responseStream << "\" ";
|
||||
#line 162 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 208 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
if(group_id == group_model->getID()) { responseStream << "selected=\"selected\"";
|
||||
#line 162 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 208 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
} responseStream << ">";
|
||||
#line 162 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 208 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( group_model->getName() );
|
||||
responseStream << "</option>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 163 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 209 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t</select>\n";
|
||||
responseStream << "\t\t\t\n";
|
||||
responseStream << "\t\t\t<input class=\"center-form-submit form-button\" type=\"submit\" name=\"submit\" value=\"";
|
||||
#line 166 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 212 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( gettext("Add Topic") );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t\t</form>\n";
|
||||
@ -355,7 +401,7 @@ void AdminTopicPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
// end include footer.cpsp
|
||||
responseStream << "\n";
|
||||
responseStream << "<script type=\"text/javascript\" src=\"";
|
||||
#line 171 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
#line 217 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "/js/time_calculations.js\"></script>\n";
|
||||
responseStream << "<script type=\"text/javascript\">\n";
|
||||
|
||||
@ -63,7 +63,15 @@ HederaRequestReturn HederaRequest::request(model::hedera::Query* query, model::h
|
||||
}
|
||||
if (status.ok())
|
||||
{
|
||||
return HEDERA_REQUEST_RETURN_OK;
|
||||
auto response_code = response->getResponseCode();
|
||||
if (response_code) {
|
||||
addError(new ParamError("Hedera Request", "precheck code: ", proto::ResponseCodeEnum_Name(response_code)));
|
||||
return HEDERA_REQUEST_PRECHECK_ERROR;
|
||||
}
|
||||
else {
|
||||
return HEDERA_REQUEST_RETURN_OK;
|
||||
}
|
||||
|
||||
}
|
||||
else if("" != queryName)
|
||||
{
|
||||
|
||||
@ -21,6 +21,7 @@ enum HederaRequestReturn
|
||||
{
|
||||
HEDERA_REQUEST_RETURN_OK,
|
||||
HEDERA_REQUEST_RETURN_PARSE_ERROR,
|
||||
HEDERA_REQUEST_PRECHECK_ERROR,
|
||||
HEDERA_REQUEST_RETURN_ERROR,
|
||||
HEDERA_REQUEST_UNKNOWN_TRANSACTION,
|
||||
HEDERA_REQUEST_UNKNOWN_QUERY,
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
#include "HederaTopic.h"
|
||||
//#include "../model/hedera/Transaction.h"
|
||||
#include "HederaRequest.h"
|
||||
#include "../lib/Success.h"
|
||||
|
||||
namespace controller {
|
||||
HederaTopic::HederaTopic(model::table::HederaTopic* dbModel)
|
||||
@ -37,6 +39,15 @@ namespace controller {
|
||||
return resultVector;
|
||||
}
|
||||
|
||||
Poco::AutoPtr<HederaTopic> HederaTopic::load(int id)
|
||||
{
|
||||
auto db = new model::table::HederaTopic;
|
||||
if (1 == db->loadFromDB("id", id)) {
|
||||
return new HederaTopic(db);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Poco::AutoPtr<HederaId> HederaTopic::getTopicHederaId()
|
||||
{
|
||||
if (mTopicHederaId.isNull()) {
|
||||
@ -57,4 +68,57 @@ namespace controller {
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool HederaTopic::updateWithGetTopicInfos(Poco::AutoPtr<User> user)
|
||||
{
|
||||
auto payer_account = getAutoRenewAccount();
|
||||
auto node_server = NodeServer::pick(payer_account->getModel()->getNetworkType(), getModel()->getGroupId());
|
||||
auto query = model::hedera::Query::getTopicInfo(getTopicHederaId(), payer_account->getHederaId(), node_server);
|
||||
query->setResponseType(proto::ANSWER_ONLY);
|
||||
model::hedera::Response response;
|
||||
HederaRequest request;
|
||||
query->sign(payer_account->getCryptoKey()->getKeyPair(user));
|
||||
if (HEDERA_REQUEST_RETURN_OK == request.request(query, &response)) {
|
||||
auto queryCost = response.getQueryCost();
|
||||
printf("query cost: %d\n", queryCost);
|
||||
|
||||
query->setTransactionFee(queryCost);
|
||||
query->setResponseType(proto::ANSWER_ONLY);
|
||||
query->sign(payer_account->getCryptoKey()->getKeyPair(user));
|
||||
|
||||
|
||||
if (HEDERA_REQUEST_RETURN_OK == request.request(query, &response)) {
|
||||
auto consensus_topic_info = response.getConsensusTopicInfo();
|
||||
addNotification(new ParamSuccess("consensus get topic info", "memo: ", consensus_topic_info->getMemo()));
|
||||
auto model = getModel();
|
||||
model->setAutoRenewPeriod(consensus_topic_info->getAutoRenewPeriod().seconds());
|
||||
model->setCurrentTimeout(consensus_topic_info->getExpirationTime());
|
||||
model->setSequeceNumber(consensus_topic_info->getSequenceNumber());
|
||||
std::string fieldNames[] = { "auto_renew_period", "current_timeout", "sequence_number" };
|
||||
if (model->updateIntoDB(
|
||||
fieldNames,
|
||||
model->getAutoRenewPeriod(),
|
||||
model->getCurrentTimeout(),
|
||||
model->getSequenceNumber()
|
||||
) != 1) {
|
||||
addError(new Error("DB", "error saving changes in DB"));
|
||||
getErrors(model);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
}
|
||||
else {
|
||||
addError(new Error("Hedera Query", "Error by query for consensus get topic info"));
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
addError(new Error("Hedera Query", "Error by getting costs for consensus get topic info"));
|
||||
}
|
||||
|
||||
getErrors(&request);
|
||||
return false;
|
||||
|
||||
}
|
||||
}
|
||||
@ -17,7 +17,7 @@
|
||||
|
||||
|
||||
namespace controller {
|
||||
class HederaTopic : public TableControllerBase
|
||||
class HederaTopic : public TableControllerBase, public NotificationList
|
||||
{
|
||||
public:
|
||||
|
||||
@ -25,13 +25,17 @@ namespace controller {
|
||||
|
||||
static Poco::AutoPtr<HederaTopic> create(const std::string& name, int autoRenewAccountId, int autoRenewPeriod, int groupId);
|
||||
static std::vector<Poco::AutoPtr<HederaTopic>> listAll();
|
||||
static Poco::AutoPtr<HederaTopic> load(int id);
|
||||
//! \brief hedera call to create a hedera topic
|
||||
Poco::UInt64 hederaCreateTopic();
|
||||
bool updateWithGetTopicInfos(Poco::AutoPtr<User> user);
|
||||
|
||||
inline bool deleteFromDB() { return mDBModel->deleteFromDB(); }
|
||||
Poco::AutoPtr<HederaId> getTopicHederaId();
|
||||
Poco::AutoPtr<HederaAccount> getAutoRenewAccount();
|
||||
|
||||
|
||||
|
||||
inline Poco::AutoPtr<model::table::HederaTopic> getModel() { return _getModel<model::table::HederaTopic>(); }
|
||||
|
||||
|
||||
|
||||
@ -73,6 +73,13 @@ namespace controller {
|
||||
ORDER BY RAND()
|
||||
LIMIT 1;
|
||||
*/
|
||||
NodeServerConnection NodeServer::pick(model::table::HederaNetworkType type, int group_id /*= 0*/)
|
||||
{
|
||||
model::table::NodeServerType node_server_type = model::table::NODE_SERVER_NONE;
|
||||
if (model::table::HEDERA_MAINNET) node_server_type = model::table::NODE_SERVER_HEDERA_MAINNET_NODE;
|
||||
else if (model::table::HEDERA_TESTNET) node_server_type = model::table::NODE_SERVER_HEDERA_TESTNET_NODE;
|
||||
return pick(node_server_type, group_id);
|
||||
}
|
||||
NodeServerConnection NodeServer::pick(model::table::NodeServerType type, int group_id/* = 0*/)
|
||||
{
|
||||
auto cm = ConnectionManager::getInstance();
|
||||
|
||||
@ -41,6 +41,7 @@ namespace controller {
|
||||
static std::vector<Poco::AutoPtr<NodeServer>> load(model::table::NodeServerType type, int group_id = 0);
|
||||
static std::vector<Poco::AutoPtr<NodeServer>> listAll();
|
||||
// pick server randomly
|
||||
static NodeServerConnection pick(model::table::HederaNetworkType type, int group_id = 0);
|
||||
static NodeServerConnection pick(model::table::NodeServerType type, int group_id = 0);
|
||||
inline bool deleteFromDB() { return mDBModel->deleteFromDB(); }
|
||||
|
||||
|
||||
@ -1,15 +0,0 @@
|
||||
#include "ConsensusGetTopicInfoResponse.h"
|
||||
|
||||
namespace model {
|
||||
namespace hedera {
|
||||
ConsensusGetTopicInfoResponse::ConsensusGetTopicInfoResponse()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
ConsensusGetTopicInfoResponse::~ConsensusGetTopicInfoResponse()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,22 +0,0 @@
|
||||
#ifndef __GRADIDO_LOGIN_SERVER_MODEL_HEDERA_CONSENSUS_GET_TOPIC_INFO_RESPONSE_H
|
||||
#define __GRADIDO_LOGIN_SERVER_MODEL_HEDERA_CONSENSUS_GET_TOPIC_INFO_RESPONSE_H
|
||||
|
||||
#include "../proto/hedera/ConsensusGetTopicInfo.pb.h"
|
||||
|
||||
namespace model
|
||||
{
|
||||
namespace hedera
|
||||
{
|
||||
class ConsensusGetTopicInfoResponse
|
||||
{
|
||||
public:
|
||||
ConsensusGetTopicInfoResponse();
|
||||
~ConsensusGetTopicInfoResponse();
|
||||
|
||||
protected:
|
||||
proto::ConsensusGetTopicInfoResponse mProto;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#endif //__GRADIDO_LOGIN_SERVER_MODEL_HEDERA_CONSENSUS_GET_TOPIC_INFO_RESPONSE_H
|
||||
26
src/cpp/model/hedera/ConsensusTopicInfo.cpp
Normal file
26
src/cpp/model/hedera/ConsensusTopicInfo.cpp
Normal file
@ -0,0 +1,26 @@
|
||||
#include "ConsensusTopicInfo.h"
|
||||
|
||||
namespace model {
|
||||
namespace hedera {
|
||||
ConsensusTopicInfo::ConsensusTopicInfo(const proto::ConsensusTopicInfo& consensusTopicInfo)
|
||||
: mProto(consensusTopicInfo)
|
||||
{
|
||||
int zahl = 1;
|
||||
}
|
||||
|
||||
ConsensusTopicInfo::~ConsensusTopicInfo()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
MemoryBin* ConsensusTopicInfo::getRunningHashCopy() const
|
||||
{
|
||||
auto mm = MemoryManager::getInstance();
|
||||
auto running_hash = mProto.runninghash();
|
||||
auto running_hash_bin = mm->getFreeMemory(running_hash.size());
|
||||
memcpy(*running_hash_bin, running_hash.data(), running_hash.size());
|
||||
return running_hash_bin;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
31
src/cpp/model/hedera/ConsensusTopicInfo.h
Normal file
31
src/cpp/model/hedera/ConsensusTopicInfo.h
Normal file
@ -0,0 +1,31 @@
|
||||
#ifndef __GRADIDO_LOGIN_SERVER_MODEL_HEDERA_CONSENSUS_GET_TOPIC_INFO_RESPONSE_H
|
||||
#define __GRADIDO_LOGIN_SERVER_MODEL_HEDERA_CONSENSUS_GET_TOPIC_INFO_RESPONSE_H
|
||||
|
||||
#include "../proto/hedera/ConsensusTopicInfo.pb.h"
|
||||
#include "../SingletonManager/MemoryManager.h"
|
||||
#include "../../lib/DataTypeConverter.h"
|
||||
#include "Poco/DateTime.h"
|
||||
|
||||
namespace model
|
||||
{
|
||||
namespace hedera
|
||||
{
|
||||
class ConsensusTopicInfo
|
||||
{
|
||||
public:
|
||||
ConsensusTopicInfo(const proto::ConsensusTopicInfo& consensusTopicInfo);
|
||||
~ConsensusTopicInfo();
|
||||
|
||||
inline std::string getMemo() const { return mProto.memo(); }
|
||||
MemoryBin* getRunningHashCopy() const;
|
||||
Poco::UInt64 getSequenceNumber() const { return mProto.sequencenumber(); }
|
||||
inline Poco::DateTime getExpirationTime() const { return DataTypeConverter::convertFromProtoTimestamp(mProto.expirationtime());}
|
||||
inline Poco::Timespan getAutoRenewPeriod() const { return DataTypeConverter::convertFromProtoDuration(mProto.autorenewperiod()); }
|
||||
|
||||
protected:
|
||||
proto::ConsensusTopicInfo mProto;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#endif //__GRADIDO_LOGIN_SERVER_MODEL_HEDERA_CONSENSUS_GET_TOPIC_INFO_RESPONSE_H
|
||||
@ -27,6 +27,8 @@ namespace model {
|
||||
|
||||
assert(!accountId.isNull() && accountId->getModel());
|
||||
|
||||
printf("[Query::getBalance] account id: %s\n", accountId->getModel()->toString().data());
|
||||
|
||||
auto query = new Query;
|
||||
auto get_account_balance = query->mQueryProto.mutable_cryptogetaccountbalance();
|
||||
accountId->copyToProtoAccountId(get_account_balance->mutable_accountid());
|
||||
@ -53,6 +55,9 @@ namespace model {
|
||||
assert(!topicId.isNull() && topicId->getModel());
|
||||
assert(!payerAccountId.isNull() && payerAccountId->getModel());
|
||||
|
||||
printf("[Query::getBalance] topic id: %s\n", topicId->getModel()->toString().data());
|
||||
printf("[Query::getBalance] payer account id: %s\n", payerAccountId->getModel()->toString().data());
|
||||
|
||||
auto query = new Query;
|
||||
auto get_topic_info = query->mQueryProto.mutable_consensusgettopicinfo();
|
||||
topicId->copyToProtoTopicId(get_topic_info->mutable_topicid());
|
||||
@ -64,7 +69,7 @@ namespace model {
|
||||
CryptoTransferTransaction crypto_transaction;
|
||||
// 0.002809 Hashbars
|
||||
// fee from https://www.hedera.com/fees
|
||||
crypto_transaction.addSender(payerAccountId, -2809);
|
||||
crypto_transaction.addSender(payerAccountId, 2809);
|
||||
crypto_transaction.addReceiver(connection.hederaId, 2809);
|
||||
query->mTransactionBody->setCryptoTransfer(crypto_transaction);
|
||||
|
||||
|
||||
@ -20,6 +20,14 @@ namespace model {
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::unique_ptr<ConsensusTopicInfo> Response::getConsensusTopicInfo()
|
||||
{
|
||||
if (mResponseProto.has_consensusgettopicinfo()) {
|
||||
return std::make_unique<ConsensusTopicInfo>(mResponseProto.consensusgettopicinfo().topicinfo());
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Poco::UInt64 Response::getQueryCost()
|
||||
{
|
||||
proto::ResponseHeader* response_header = nullptr;
|
||||
@ -41,6 +49,10 @@ namespace model {
|
||||
auto balance_response = mResponseProto.cryptogetaccountbalance();
|
||||
return balance_response.header().nodetransactionprecheckcode();
|
||||
}
|
||||
else if (mResponseProto.has_consensusgettopicinfo()) {
|
||||
auto response = mResponseProto.consensusgettopicinfo();
|
||||
return response.header().nodetransactionprecheckcode();
|
||||
}
|
||||
return proto::NOT_SUPPORTED;
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
*/
|
||||
|
||||
#include "../../proto/hedera/Response.pb.h"
|
||||
#include "ConsensusGetTopicInfoResponse.h"
|
||||
#include "ConsensusTopicInfo.h"
|
||||
#include "Poco/Types.h"
|
||||
|
||||
namespace model {
|
||||
@ -24,9 +24,10 @@ namespace model {
|
||||
|
||||
inline proto::Response* getResponsePtr() { return &mResponseProto; }
|
||||
Poco::UInt64 getAccountBalance();
|
||||
std::unique_ptr<ConsensusTopicInfo> getConsensusTopicInfo();
|
||||
Poco::UInt64 getQueryCost();
|
||||
proto::ResponseCodeEnum getResponseCode();
|
||||
|
||||
|
||||
|
||||
inline bool isCryptoGetAccountBalanceResponse() { return mResponseProto.has_cryptogetaccountbalance(); }
|
||||
inline bool isConsensusGetTopicInfoResponse() { return mResponseProto.has_consensusgettopicinfo(); }
|
||||
|
||||
@ -36,6 +36,7 @@ namespace model {
|
||||
inline void setTopicHederaID(Poco::UInt32 topidHederaId) { mTopicHederaId = topidHederaId;}
|
||||
inline void setSequeceNumber(Poco::UInt64 sequenceNumber) { mSequenceNumber = sequenceNumber; }
|
||||
inline void setCurrentTimeout(Poco::DateTime currentTimeOut) { mCurrentTimeout = currentTimeOut; }
|
||||
inline void setAutoRenewPeriod(Poco::UInt32 autoRenewPeriod) { mAutoRenewPeriod = autoRenewPeriod; }
|
||||
|
||||
protected:
|
||||
Poco::Data::Statement _loadFromDB(Poco::Data::Session session, const std::string& fieldName);
|
||||
|
||||
@ -36,6 +36,10 @@ namespace model {
|
||||
|
||||
template<class T>
|
||||
size_t updateIntoDB(const std::string& fieldName, const T& fieldValue );
|
||||
template<class T1, class T2>
|
||||
size_t updateIntoDB(std::string fieldNames[2], const T1& fieldValue1, const T2& fieldValue2);
|
||||
template<class T1, class T2, class T3>
|
||||
size_t updateIntoDB(std::string fieldNames[3], const T1& fieldValue1, const T2& fieldValue2, const T3& fieldValue3);
|
||||
template<class T>
|
||||
size_t loadFromDB(const std::string& fieldName, const T& fieldValue);
|
||||
template<class T>
|
||||
@ -274,6 +278,82 @@ namespace model {
|
||||
return resultCount;
|
||||
|
||||
}
|
||||
template<class T1, class T2>
|
||||
size_t ModelBase::updateIntoDB(std::string fieldNames[2], const T1& fieldValue1, const T2& fieldValue2)
|
||||
{
|
||||
auto cm = ConnectionManager::getInstance();
|
||||
Poco::ScopedLock<Poco::Mutex> _lock(mWorkMutex);
|
||||
auto session = cm->getConnection(CONNECTION_MYSQL_LOGIN_SERVER);
|
||||
Poco::Data::Statement update(session);
|
||||
|
||||
if (mID == 0) {
|
||||
addError(new Error("ModelBase::updateIntoDB", "id is zero"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
update << "UPDATE " << getTableName();
|
||||
for (int i = 0; i < 2; i++) {
|
||||
update << "SET " << fieldNames[i] << " = ? ";
|
||||
}
|
||||
update << "WHERE id = ?"
|
||||
, Poco::Data::Keywords::bind(fieldValue1), Poco::Data::Keywords::bind(fieldValue2)
|
||||
, Poco::Data::Keywords::bind(mID);
|
||||
|
||||
|
||||
size_t resultCount = 0;
|
||||
try {
|
||||
resultCount = update.execute();
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
lock();
|
||||
addError(new ParamError(getTableName(), "mysql error by update 2", ex.displayText()));
|
||||
for (int i = 0; i < 2; i++) {
|
||||
addError(new ParamError(getTableName(), "field name for update: ", fieldNames[i]));
|
||||
}
|
||||
|
||||
unlock();
|
||||
}
|
||||
return resultCount;
|
||||
}
|
||||
template<class T1, class T2, class T3>
|
||||
size_t ModelBase::updateIntoDB(std::string fieldNames[3], const T1& fieldValue1, const T2& fieldValue2, const T3& fieldValue3)
|
||||
{
|
||||
auto cm = ConnectionManager::getInstance();
|
||||
Poco::ScopedLock<Poco::Mutex> _lock(mWorkMutex);
|
||||
auto session = cm->getConnection(CONNECTION_MYSQL_LOGIN_SERVER);
|
||||
Poco::Data::Statement update(session);
|
||||
|
||||
if (mID == 0) {
|
||||
addError(new Error("ModelBase::updateIntoDB", "id is zero"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
update << "UPDATE " << getTableName();
|
||||
for (int i = 0; i < 3; i++) {
|
||||
update << "SET " << fieldNames[i] << " = ? ";
|
||||
}
|
||||
update << "WHERE id = ?"
|
||||
, Poco::Data::Keywords::bind(fieldValue1), Poco::Data::Keywords::bind(fieldValue2), Poco::Data::Keywords::bind(fieldValue3)
|
||||
, Poco::Data::Keywords::bind(mID);
|
||||
|
||||
|
||||
size_t resultCount = 0;
|
||||
try {
|
||||
resultCount = update.execute();
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
lock();
|
||||
addError(new ParamError(getTableName(), "mysql error by update 3", ex.displayText()));
|
||||
for (int i = 0; i < 3; i++) {
|
||||
addError(new ParamError(getTableName(), "field name for update: ", fieldNames[i]));
|
||||
}
|
||||
|
||||
unlock();
|
||||
}
|
||||
return resultCount;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ******************** Generic Tasks ************************************
|
||||
|
||||
|
||||
@ -10,13 +10,19 @@
|
||||
#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"
|
||||
%>
|
||||
<%%
|
||||
const char* pageName = "Topic";
|
||||
auto user = mSession->getNewUser();
|
||||
auto sm = SessionManager::getInstance();
|
||||
Profiler hedera_time;
|
||||
|
||||
std::string name = "";
|
||||
int auto_renew_account = 0;
|
||||
@ -24,8 +30,48 @@
|
||||
|
||||
int group_id = 0;
|
||||
|
||||
Poco::URI uri(request.getURI());
|
||||
auto uri_query = uri.getQueryParameters();
|
||||
std::string action = "";
|
||||
Poco::AutoPtr<controller::HederaTopic> query_hedera_topic;
|
||||
|
||||
if(!form.empty()) {
|
||||
// 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", "");
|
||||
auto auto_renew_account_string = form.get("topic-auto-renew-account", "0");
|
||||
auto auto_renew_period_string = form.get("topic-auto-renew-period", "604800");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user