mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
get pending task, add to group, create and transfer transaction together with community server working
This commit is contained in:
parent
31add877cf
commit
c4b591d0d8
@ -53,6 +53,8 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
std::string memo = "";
|
||||
bool hasErrors = false;
|
||||
bool enableLogout = true;
|
||||
int skip_count = 0;
|
||||
int pending_task_id = 0;
|
||||
|
||||
PageState state = PAGE_NO_TRANSACTIONS;
|
||||
|
||||
@ -64,10 +66,12 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
bool transaction_finalize_run = false;
|
||||
bool transaction_finalize_result = false;
|
||||
auto transactions_to_sign = pt->getTransactionsUserMustSign(account_user);
|
||||
|
||||
//Poco::AutoPtr<controller::PendingTask> pending_task;
|
||||
model::gradido::Transaction* transaction = nullptr;
|
||||
Poco::AutoPtr<model::gradido::TransactionBody> transaction_body;
|
||||
|
||||
if(transactions_to_sign.size() > 0)
|
||||
if(!form.empty())
|
||||
{
|
||||
transaction = dynamic_cast<model::gradido::Transaction*>(transactions_to_sign[0].get());
|
||||
transaction_body = transaction->getTransactionBody();
|
||||
@ -147,18 +151,28 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
}
|
||||
}
|
||||
if(abort != "")
|
||||
/*
|
||||
auto ok = form.get("ok", "");
|
||||
auto abort = form.get("abort", "");
|
||||
auto skip = form.get("skip", "");
|
||||
auto skip_count_str = form.get("skip-count", "0");
|
||||
auto pending_task_id_string = form.get("pending-task-id", "");
|
||||
DataTypeConverter::strToInt(skip_count_str, skip_count);
|
||||
|
||||
if(DataTypeConverter::NUMBER_PARSE_OKAY == DataTypeConverter::strToInt(pending_task_id_string, pending_task_id))
|
||||
{
|
||||
// load transaction from pending task manager
|
||||
pending_task = pt->getPendingTask(pending_task_id);
|
||||
if(!pending_task.isNull() && pending_task->getModel()->isGradidoTransaction())
|
||||
*/
|
||||
{
|
||||
// make sure we have the correct transaction
|
||||
transaction = nullptr;
|
||||
transaction_body.assign(nullptr);
|
||||
for(auto it = transactions_to_sign.begin(); it != transactions_to_sign.end(); it++)
|
||||
{
|
||||
if((*it)->getModel()->getID() == pending_task_id) {
|
||||
transaction = dynamic_cast<model::gradido::Transaction*>(it->get());
|
||||
transaction_body = transaction->getTransactionBody();
|
||||
break;
|
||||
}
|
||||
transaction = dynamic_cast<model::gradido::Transaction*>(pending_task.get());
|
||||
if(transaction->hasSigned(account_user)) {
|
||||
transaction = nullptr;
|
||||
} else {
|
||||
transaction_body = transaction->getTransactionBody();
|
||||
}
|
||||
|
||||
if(abort != "")
|
||||
{
|
||||
//mSession->finalizeTransaction(false, true);
|
||||
@ -166,8 +180,6 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
if(transaction && transaction->getModel()->getUserId() == user_model->getID())
|
||||
{
|
||||
transaction->deleteFromDB();
|
||||
transaction_body.assign(nullptr);
|
||||
transactions_to_sign.clear();
|
||||
transaction = nullptr;
|
||||
}
|
||||
}
|
||||
@ -195,29 +207,55 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
}
|
||||
if(!hasErrors) {
|
||||
//mSession->finalizeTransaction(true, false);
|
||||
if(transaction->sign(account_user)) {
|
||||
transaction_body.assign(nullptr);
|
||||
transactions_to_sign.clear();
|
||||
if(transaction && transaction->sign(account_user)) {
|
||||
transaction = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(skip != "")
|
||||
{
|
||||
skip_count++;
|
||||
transaction = nullptr;
|
||||
}
|
||||
} else {
|
||||
addError(new Error(gettext("Form Error"), gettext("error with field")));
|
||||
addError(new Error(gettext("Input Error"), gettext("Task no found")));
|
||||
}
|
||||
} else {
|
||||
addError(new Error(gettext("Form Error"), gettext("error with field")));
|
||||
}
|
||||
}
|
||||
|
||||
auto transactions_user_must_sign = pt->getTransactionsUserMustSign(account_user);
|
||||
std::vector<Poco::AutoPtr<controller::PendingTask>> transactions_someone_must_sign;
|
||||
// TODO: work with community server roles
|
||||
if(user_model->getRole() == model::table::ROLE_ADMIN) {
|
||||
transactions_someone_must_sign = pt->getTransactionSomeoneMustSign(account_user);
|
||||
}
|
||||
std::vector<Poco::AutoPtr<controller::PendingTask>> transactions_to_sign;
|
||||
bool transaction_removeable = false;
|
||||
int transaction_to_sign_index = 0;
|
||||
if(!transaction)
|
||||
{
|
||||
transactions_to_sign = pt->getTransactionsUserMustSign(account_user);
|
||||
if(transactions_to_sign.size() > 0)
|
||||
if(transactions_user_must_sign.size() > skip_count) {
|
||||
transactions_to_sign = transactions_user_must_sign;
|
||||
transaction_to_sign_index = skip_count;
|
||||
} else if(transactions_someone_must_sign.size() > (skip_count - transactions_user_must_sign.size())) {
|
||||
transactions_to_sign = transactions_someone_must_sign;
|
||||
transaction_to_sign_index = skip_count - transactions_user_must_sign.size();
|
||||
}
|
||||
|
||||
if(transactions_to_sign.size() > transaction_to_sign_index)
|
||||
{
|
||||
transaction = dynamic_cast<model::gradido::Transaction*>(transactions_to_sign[0].get());
|
||||
transaction = dynamic_cast<model::gradido::Transaction*>(transactions_to_sign[transaction_to_sign_index].get());
|
||||
transaction_body = transaction->getTransactionBody();
|
||||
// user can only delete there own transactions
|
||||
// TODO: Auto timeout for community transactions
|
||||
if(transaction->getModel()->getUserId() == user_model->getID()) {
|
||||
transaction_removeable = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
size_t sumTransactions = transactions_to_sign.size();
|
||||
size_t sumTransactions = transactions_user_must_sign.size() + transactions_someone_must_sign.size();
|
||||
if(sumTransactions == 0)
|
||||
{
|
||||
auto lastExternReferer = mSession->getLastReferer();
|
||||
@ -234,14 +272,14 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
return;
|
||||
}
|
||||
|
||||
if(sumTransactions > 0)
|
||||
if(transactions_user_must_sign.size() > 0)
|
||||
{
|
||||
enableLogout = false;
|
||||
}
|
||||
if(PAGE_NO_TRANSACTIONS == state && sumTransactions > 0)
|
||||
if(PAGE_NO_TRANSACTIONS == state && transaction && !transaction_body.isNull())
|
||||
{
|
||||
auto transactionType = transaction_body->getType();
|
||||
auto memo = transaction_body->getMemo();
|
||||
memo = transaction_body->getMemo();
|
||||
switch(transactionType) {
|
||||
case model::gradido::TRANSACTION_CREATION: state = PAGE_TRANSACTION_CREATION; break;
|
||||
case model::gradido::TRANSACTION_TRANSFER: state = PAGE_TRANSACTION_TRANSFER; break;
|
||||
@ -456,120 +494,120 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << "<div class=\"content-container main-container\">\n";
|
||||
responseStream << "\t<div class=\"action-form\">\n";
|
||||
responseStream << "\t\t<p class=\"form-header\">";
|
||||
#line 178 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 205 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Transaktion Unterzeichnen") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t<div class=\"form-content\">\n";
|
||||
responseStream << "\t\t";
|
||||
#line 180 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 207 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(state == PAGE_TRANSACTION_TRANSFER) {
|
||||
auto transferTransaction = transaction_body->getTransferTransaction();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>";
|
||||
#line 183 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 210 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Überweisung") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t<div class=\"content-table\">\n";
|
||||
responseStream << "\t\t\t <div class=\"content-row content-row-header\">\n";
|
||||
responseStream << "\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 186 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 213 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Konto") );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 187 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 214 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Gradido") );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t ";
|
||||
#line 189 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 216 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
for(int i = 0; i < transferTransaction->getKontoTableSize(); i++) { responseStream << "\t\t\t\t\t\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 190 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 217 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if((i+1) % 2 == 0) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<div class=\"content-row content-row\">\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 192 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 219 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<div class=\"content-row content-row-bg\">\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 194 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 221 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 195 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 222 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( transferTransaction->getKontoNameCell(i) );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 196 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 223 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( transferTransaction->getAmountCell(i) );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t ";
|
||||
#line 198 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 225 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t ";
|
||||
#line 200 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 227 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else if(PAGE_TRANSACTION_CREATION == state) {
|
||||
auto creationTransaction = transaction_body->getCreationTransaction();
|
||||
auto transactionUser = creationTransaction->getUser();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<p>";
|
||||
#line 204 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 231 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Schöpfung") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"content-table\">\n";
|
||||
responseStream << "\t\t\t\t <div class=\"content-row content-row-header\">\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 207 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 234 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Konto") );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 208 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 235 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Zieldatum") );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 209 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 236 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Gradido") );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t <div class=\"content-row content-row-bg\">\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 212 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 239 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(!transactionUser.isNull()) {
|
||||
auto user_model = transactionUser->getModel();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 215 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 242 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( user_model->getFirstName() );
|
||||
responseStream << " ";
|
||||
#line 215 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 242 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( user_model->getLastName() );
|
||||
responseStream << " <";
|
||||
#line 215 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 242 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( user_model->getEmail() );
|
||||
responseStream << "></span>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 216 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 243 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<span class=\"content-cell\">0x";
|
||||
#line 217 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 244 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( creationTransaction->getPublicHex() );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 218 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 245 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 219 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 246 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( creationTransaction->getTargetDateString() );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell success-color\">";
|
||||
#line 220 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 247 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( creationTransaction->getAmountString() );
|
||||
responseStream << " GDD</span>\n";
|
||||
responseStream << "\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t ";
|
||||
#line 223 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 250 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else if(PAGE_TRANSACTION_GROUP_ADD_MEMBER == state) {
|
||||
auto groupMemberUpdateTransaction = transaction_body->getGroupMemberUpdate();
|
||||
auto groups = controller::Group::load(groupMemberUpdateTransaction->getTargetGroupAlias());
|
||||
@ -584,160 +622,186 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
}
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t <p>";
|
||||
#line 236 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 263 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Benutzer zu einer Gruppe hinzufügen") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t <div class=\"content-table\">\n";
|
||||
responseStream << "\t\t\t\t<p>";
|
||||
#line 238 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 265 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(!user.isNull()) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<b>Benutzer:</b> ";
|
||||
#line 239 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 266 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( user->getEmailWithNames() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 240 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 267 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<b>Account public key:</b> ";
|
||||
#line 241 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 268 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( groupMemberUpdateTransaction->getPublicKeyHex() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 242 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 269 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 243 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 270 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(!group_model.isNull()) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<p><b>";
|
||||
#line 244 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 271 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Gruppe") );
|
||||
responseStream << ":</b></p>\n";
|
||||
responseStream << "\t\t\t\t\t<ul>\n";
|
||||
responseStream << "\t\t\t\t\t\t<li>";
|
||||
#line 246 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 273 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Name") );
|
||||
responseStream << ": ";
|
||||
#line 246 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 273 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( group_model->getName() );
|
||||
responseStream << "</li>\n";
|
||||
responseStream << "\t\t\t\t\t\t<li>";
|
||||
#line 247 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 274 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Alias") );
|
||||
responseStream << ": ";
|
||||
#line 247 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 274 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( group_model->getAlias() );
|
||||
responseStream << "</li>\n";
|
||||
responseStream << "\t\t\t\t\t\t<li>";
|
||||
#line 248 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 275 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Url") );
|
||||
responseStream << ": <a href=\"";
|
||||
#line 248 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 275 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( group_model->getUrl() );
|
||||
responseStream << "/pages/visitor\" target=\"_blank\">";
|
||||
#line 248 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 275 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( group_model->getUrl() );
|
||||
responseStream << "</a></li>\n";
|
||||
responseStream << "\t\t\t\t\t\t<li>";
|
||||
#line 249 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 276 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( group_model->getDescription() );
|
||||
responseStream << "</li>\n";
|
||||
responseStream << "\t\t\t\t\t</ul>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 251 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 278 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 252 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 279 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Unbekannte Gruppe") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 253 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 280 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 254 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 281 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Es haben bereits ") );
|
||||
#line 254 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 281 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( std::to_string(transaction->getSignCount()) );
|
||||
#line 254 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 281 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext(" unterzeichnet") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t \n";
|
||||
responseStream << "\t\t\t ";
|
||||
#line 257 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 284 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else if(PAGE_USER_DATA_CORRUPTED == state) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<p class=\"alert-color\">";
|
||||
#line 258 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 285 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Es gibt ein Problem mit deinen gespeicherten Daten, bitte wende dich an den"));
|
||||
responseStream << "<a href=\"mailto:";
|
||||
#line 258 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 285 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( em->getAdminReceiver());
|
||||
responseStream << "?subject=Corrupt User Data&body=Hallo Dario,%0D%0A%0D%0Ameine Benutzer Daten sind korrupt.%0D%0Akannst du das prüfen?%0D%0A%0D%0AMit freundlichen Grüßen%0D%0A\">";
|
||||
#line 258 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 285 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << (gettext("Support") );
|
||||
responseStream << "</a></p>\n";
|
||||
responseStream << "\t\t\t ";
|
||||
#line 259 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 286 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t<div class=\"content-table\">\n";
|
||||
responseStream << "\t\t\t <div class=\"content-row content-row-header\">\n";
|
||||
responseStream << "\t\t\t\t<span class=\"content-cell\">Aktives Konto</span>\n";
|
||||
responseStream << "\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t <div class=\"content-row\">\n";
|
||||
responseStream << "\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 265 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << "\t\t\t ";
|
||||
#line 287 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(PAGE_NO_TRANSACTIONS == state) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<a href=\"";
|
||||
#line 288 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "\">";
|
||||
#line 288 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Zurück") );
|
||||
responseStream << "</a>\n";
|
||||
responseStream << "\t\t\t ";
|
||||
#line 289 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<div class=\"content-table\">\n";
|
||||
responseStream << "\t\t\t\t <div class=\"content-row content-row-header\">\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">Aktives Konto</span>\n";
|
||||
responseStream << "\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t <div class=\"content-row\">\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 295 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( user_model->getNameWithEmailHtml() );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t<div class=\"content-table\">\n";
|
||||
responseStream << "\t\t\t <div class=\"content-row content-row-header\">\n";
|
||||
responseStream << "\t\t\t\t<span class=\"content-cell\">Verwendungszweck</span>\n";
|
||||
responseStream << "\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t <div class=\"content-row content-row-bg\">\n";
|
||||
responseStream << "\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 273 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << "\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"content-table\">\n";
|
||||
responseStream << "\t\t\t\t <div class=\"content-row content-row-header\">\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">Verwendungszweck</span>\n";
|
||||
responseStream << "\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t <div class=\"content-row content-row-bg\">\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 303 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( memo );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t<form>\n";
|
||||
responseStream << "\t\t\t\t<input type=\"hidden\" name=\"pending-task-id\" value=\"";
|
||||
#line 277 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << "\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t<form>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 307 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(transaction) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<input type=\"hidden\" name=\"pending-task-id\" value=\"";
|
||||
#line 308 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( transaction->getModel()->getID() );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 278 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 309 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<input type=\"hidden\" name=\"skip-count\" value=\"";
|
||||
#line 310 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( skip_count );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 311 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(!account_user->hasPassword()) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t <div class=\"form-group\">\n";
|
||||
responseStream << "\t\t\t\t\t <label for=\"sign-password\">";
|
||||
#line 280 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << "\t\t\t\t\t <div class=\"form-group\">\n";
|
||||
responseStream << "\t\t\t\t\t\t <label for=\"sign-password\">";
|
||||
#line 313 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Ich brauche nochmal dein Passwort") );
|
||||
responseStream << "</label>\n";
|
||||
responseStream << "\t\t\t\t\t <input type=\"password\" class=\"form-control\" id=\"sign-password\" name=\"sign-password\" placeholder=\"";
|
||||
#line 281 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << "\t\t\t\t\t\t <input type=\"password\" class=\"form-control\" id=\"sign-password\" name=\"sign-password\" placeholder=\"";
|
||||
#line 314 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Passwort") );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 283 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << "\t\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 316 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 284 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 317 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(PAGE_USER_DATA_CORRUPTED != state && user_model->isEmailChecked()) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<button type=\"submit\" class=\"form-button\" name=\"ok\" value=\"ok\">\n";
|
||||
responseStream << "\t\t\t\t\t\t<i class=\"material-icons-outlined\">verified_user</i>\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 287 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << "\t\t\t\t\t\t<button type=\"submit\" class=\"form-button\" name=\"ok\" value=\"ok\">\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<i class=\"material-icons-outlined\">verified_user</i>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t";
|
||||
#line 320 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Transaktion unterzeichnen") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t</button>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 289 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<button type=\"submit\" class=\"form-button button-cancel\" name=\"abort\" value=\"abort\">\n";
|
||||
responseStream << "\t\t\t\t\t<i class=\"material-icons-outlined\">delete</i>\n";
|
||||
responseStream << "\t\t\t\t\t\t</button>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 292 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 322 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 323 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(transaction_removeable) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<button type=\"submit\" class=\"form-button button-cancel\" name=\"abort\" value=\"abort\">\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<i class=\"material-icons-outlined\">delete</i>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t";
|
||||
#line 326 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Transaktion verwerfen") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t</button>\n";
|
||||
@ -750,8 +814,26 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << "\t\t\t\t\t</button>\t\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 245 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t</form>\n";
|
||||
responseStream << "\t\t\t\t\t\t</button>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 328 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<button type=\"submit\" class=\"form-button button-cancel\" name=\"skip\" value=\"skip\">\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<i class=\"material-icons-outlined\">debug-step-over</i>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t";
|
||||
#line 331 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Transaktion überspringen") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t</button>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 333 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t</form>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 335 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "</div>\n";
|
||||
|
||||
@ -6,6 +6,8 @@
|
||||
|
||||
#include "../model/gradido/Transaction.h"
|
||||
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
|
||||
Poco::JSON::Object* JsonCreateTransaction::handle(Poco::Dynamic::Var params)
|
||||
{
|
||||
auto sm = SessionManager::getInstance();
|
||||
@ -40,12 +42,16 @@ Poco::JSON::Object* JsonCreateTransaction::handle(Poco::Dynamic::Var params)
|
||||
|
||||
mSession = sm->getSession(session_id);
|
||||
if (!mSession) {
|
||||
return customStateError("not found", "session not found");
|
||||
return stateError("session not found");
|
||||
}
|
||||
auto user = mSession->getNewUser();
|
||||
if (user.isNull()) {
|
||||
auto em = ErrorManager::getInstance();
|
||||
em->addError(new Error(__FUNCDNAME__, "session hasn't a user, check code"));
|
||||
em->sendErrorsAsEmail();
|
||||
return customStateError("code error", "user is zero");
|
||||
}
|
||||
|
||||
getTargetGroup(params);
|
||||
if (transaction_type == "transfer") {
|
||||
return transfer(params);
|
||||
@ -64,43 +70,114 @@ Poco::JSON::Object* JsonCreateTransaction::handle(Poco::Dynamic::Var params)
|
||||
Poco::JSON::Object* JsonCreateTransaction::transfer(Poco::Dynamic::Var params)
|
||||
{
|
||||
auto target_pubkey = getTargetPubkey(params);
|
||||
if (!target_pubkey) {
|
||||
return customStateError("not found", "receiver not found");
|
||||
}
|
||||
|
||||
auto user = mSession->getNewUser();
|
||||
Poco::UInt32 amount = 0;
|
||||
auto mm = MemoryManager::getInstance();
|
||||
Poco::JSON::Object* result = nullptr;
|
||||
|
||||
if (params.type() == typeid(Poco::JSON::Object::Ptr)) {
|
||||
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
|
||||
try {
|
||||
paramJsonObject->get("amount").convert(amount);
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
return stateError("json exception", ex.displayText());
|
||||
result = stateError("json exception", ex.displayText());
|
||||
}
|
||||
}
|
||||
else {
|
||||
return stateError("parameter format unknown");
|
||||
result = stateError("parameter format unknown");
|
||||
}
|
||||
|
||||
model::gradido::Transaction::createTransfer(mSession->getNewUser(), target_pubkey, mTargetGroup, amount, mMemo);
|
||||
return stateSuccess();
|
||||
if (result) {
|
||||
mm->releaseMemory(target_pubkey);
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!mReceiverUser.isNull() && mReceiverUser->getModel()) {
|
||||
auto receiver_user_model = mReceiverUser->getModel();
|
||||
if (receiver_user_model->isDisabled()) {
|
||||
result = customStateError("disabled", "receiver is disabled");
|
||||
}
|
||||
if (!mTargetGroup.isNull() && receiver_user_model->getGroupId() != mTargetGroup->getModel()->getID()) {
|
||||
result = stateError("user not in group", "receiver user isn't in target group");
|
||||
}
|
||||
}
|
||||
if (!result) {
|
||||
model::gradido::Transaction::createTransfer(mSession->getNewUser(), target_pubkey, mTargetGroup, amount, mMemo);
|
||||
result = stateSuccess();
|
||||
}
|
||||
mm->releaseMemory(target_pubkey);
|
||||
return result;
|
||||
}
|
||||
Poco::JSON::Object* JsonCreateTransaction::creation(Poco::Dynamic::Var params)
|
||||
{
|
||||
auto target_pubkey = getTargetPubkey(params);
|
||||
if (!target_pubkey) {
|
||||
return customStateError("not found", "receiver not found");
|
||||
}
|
||||
|
||||
Poco::UInt32 amount = 0;
|
||||
Poco::DateTime target_date;
|
||||
if (params.type() == typeid(Poco::JSON::Object::Ptr)) {
|
||||
auto mm = MemoryManager::getInstance();
|
||||
Poco::JSON::Object* result = nullptr;
|
||||
|
||||
if (params.type() == typeid(Poco::JSON::Object::Ptr))
|
||||
{
|
||||
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
|
||||
try {
|
||||
paramJsonObject->get("amount").convert(amount);
|
||||
paramJsonObject->get("target_date").convert(target_date);
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
return stateError("json exception", ex.displayText());
|
||||
result = stateError("json exception", ex.displayText());
|
||||
}
|
||||
}
|
||||
else {
|
||||
return stateError("parameter format unknown");
|
||||
else
|
||||
{
|
||||
result = stateError("parameter format unknown");
|
||||
}
|
||||
model::gradido::Transaction::createCreation(mSession->getNewUser(), amount, target_date, mMemo);
|
||||
return stateSuccess();
|
||||
|
||||
if (amount <= 0 || amount > 10000000) {
|
||||
result = customStateError("invalid parameter", "invalid amount", "GDD amount in GDD cent ]0,10000000]");
|
||||
}
|
||||
|
||||
if (mReceiverUser.isNull()) {
|
||||
mReceiverUser = controller::User::create();
|
||||
if (1 != mReceiverUser->load(*target_pubkey)) {
|
||||
mReceiverUser.assign(nullptr);
|
||||
result = customStateError("not found", "receiver not found");
|
||||
}
|
||||
}
|
||||
|
||||
if (result) {
|
||||
mm->releaseMemory(target_pubkey);
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!mReceiverUser.isNull() && mReceiverUser->getModel()) {
|
||||
auto receiver_user_model = mReceiverUser->getModel();
|
||||
|
||||
if (receiver_user_model->isDisabled()) {
|
||||
result = customStateError("disabled", "receiver is disabled");
|
||||
}
|
||||
if (!receiver_user_model->getGroupId()) {
|
||||
result = stateError("receiver user hasn't group");
|
||||
}
|
||||
if (receiver_user_model->getGroupId() != mSession->getNewUser()->getModel()->getGroupId()) {
|
||||
result = stateError("user not in group", "target user is in another group");
|
||||
}
|
||||
}
|
||||
|
||||
if(!result) {
|
||||
model::gradido::Transaction::createCreation(mReceiverUser, amount, target_date, mMemo);
|
||||
result = stateSuccess();
|
||||
}
|
||||
mm->releaseMemory(target_pubkey);
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
Poco::JSON::Object* JsonCreateTransaction::groupMemberUpdate(Poco::Dynamic::Var params)
|
||||
@ -139,12 +216,12 @@ MemoryBin* JsonCreateTransaction::getTargetPubkey(Poco::Dynamic::Var params)
|
||||
catch (Poco::Exception& ex) {
|
||||
return nullptr;
|
||||
}
|
||||
auto user = controller::User::create();
|
||||
mReceiverUser = controller::User::create();
|
||||
int result_count = 0;
|
||||
|
||||
MemoryBin* result = nullptr;
|
||||
if (email != "") {
|
||||
result_count = user->load(email);
|
||||
result_count = mReceiverUser->load(email);
|
||||
}
|
||||
else if (target_username != "") {
|
||||
int group_id = 0;
|
||||
@ -153,13 +230,16 @@ MemoryBin* JsonCreateTransaction::getTargetPubkey(Poco::Dynamic::Var params)
|
||||
} else {
|
||||
mSession->getNewUser()->getModel()->getGroupId();
|
||||
}
|
||||
result_count = user->getModel()->loadFromDB({ "username", "group_id" }, target_username, group_id, model::table::MYSQL_CONDITION_AND);
|
||||
result_count = mReceiverUser->getModel()->loadFromDB({ "username", "group_id" }, target_username, group_id, model::table::MYSQL_CONDITION_AND);
|
||||
}
|
||||
else if (target_pubkey_hex != "") {
|
||||
result = DataTypeConverter::hexToBin(target_pubkey_hex);
|
||||
}
|
||||
if (1 == result_count) {
|
||||
result = user->getModel()->getPublicKeyCopy();
|
||||
result = mReceiverUser->getModel()->getPublicKeyCopy();
|
||||
}
|
||||
else {
|
||||
mReceiverUser.assign(nullptr);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -21,6 +21,7 @@ protected:
|
||||
Session* mSession;
|
||||
std::string mMemo;
|
||||
Poco::AutoPtr<controller::Group> mTargetGroup;
|
||||
Poco::AutoPtr<controller::User> mReceiverUser;
|
||||
};
|
||||
|
||||
#endif // __JSON_INTERFACE_JSON_CREATE_TRANSACTION_
|
||||
@ -4,6 +4,7 @@
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../SingletonManager/SingletonTaskObserver.h"
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
#include "../SingletonManager/PendingTasksManager.h"
|
||||
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
|
||||
@ -12,6 +13,7 @@ Poco::JSON::Object* JsonGetLogin::handle(Poco::Dynamic::Var params)
|
||||
|
||||
int session_id = 0;
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto pt = PendingTasksManager::getInstance();
|
||||
auto observer = SingletonTaskObserver::getInstance();
|
||||
|
||||
if (params.isStruct()) {
|
||||
@ -71,7 +73,15 @@ Poco::JSON::Object* JsonGetLogin::handle(Poco::Dynamic::Var params)
|
||||
em->addError(new Error("JsonGetLogin::handle", "generic exception calling userModel->getJson: "));
|
||||
em->sendErrorsAsEmail();
|
||||
}
|
||||
result->set("Transaction.pending", session->getProcessingTransactionCount());
|
||||
int pending = 0;
|
||||
auto user_must_sign = pt->getTransactionsUserMustSign(userNew);
|
||||
pending = user_must_sign.size();
|
||||
result->set("Transaction.pending", pending);
|
||||
|
||||
auto some_must_sign = pt->getTransactionSomeoneMustSign(userNew);
|
||||
//pending = some_must_sign.size();
|
||||
result->set("Transaction.can_signed", some_must_sign.size());
|
||||
|
||||
auto executing = observer->getTaskCount(userModel->getEmail(), TASK_OBSERVER_SIGN_TRANSACTION);
|
||||
if (executing < 0) {
|
||||
executing = 0;
|
||||
|
||||
@ -0,0 +1,68 @@
|
||||
#include "JsonNetworkInfos.h"
|
||||
|
||||
#include "../controller/Group.h"
|
||||
|
||||
Poco::JSON::Object* JsonNetworkInfos::handle(Poco::Dynamic::Var params)
|
||||
{
|
||||
/*
|
||||
'ask' => ['groups']
|
||||
*/
|
||||
// incoming
|
||||
|
||||
Poco::JSON::Array::Ptr askArray;
|
||||
|
||||
// if is json object
|
||||
if (params.type() == typeid(Poco::JSON::Object::Ptr)) {
|
||||
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
|
||||
/// Throws a RangeException if the value does not fit
|
||||
/// into the result variable.
|
||||
/// Throws a NotImplementedException if conversion is
|
||||
/// not available for the given type.
|
||||
/// Throws InvalidAccessException if Var is empty.
|
||||
try {
|
||||
askArray = paramJsonObject->getArray("ask");
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
return stateError("json exception", ex.displayText());
|
||||
}
|
||||
}
|
||||
else {
|
||||
return stateError("parameter format unknown");
|
||||
}
|
||||
|
||||
|
||||
if (askArray.isNull()) {
|
||||
return stateError("ask is zero or not an array");
|
||||
}
|
||||
|
||||
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
result->set("state", "success");
|
||||
Poco::JSON::Array jsonErrorsArray;
|
||||
Poco::JSON::Object json_network_infos;
|
||||
|
||||
for (auto it = askArray->begin(); it != askArray->end(); it++) {
|
||||
auto parameter = *it;
|
||||
std::string parameterString;
|
||||
try {
|
||||
parameter.convert(parameterString);
|
||||
if (parameterString == "groups") {
|
||||
auto groups = controller::Group::listAll();
|
||||
Poco::JSON::Array json_groups;
|
||||
for (auto it = groups.begin(); it != groups.end(); it++) {
|
||||
auto group_model = (*it)->getModel();
|
||||
json_groups.add(group_model->getAlias());
|
||||
}
|
||||
json_network_infos.set("groups", json_groups);
|
||||
}
|
||||
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
jsonErrorsArray.add("ask parameter invalid");
|
||||
}
|
||||
}
|
||||
result->set("errors", jsonErrorsArray);
|
||||
result->set("data", json_network_infos);
|
||||
return result;
|
||||
|
||||
}
|
||||
16
src/cpp/JSONInterface/JsonNetworkInfos.h
Normal file
16
src/cpp/JSONInterface/JsonNetworkInfos.h
Normal file
@ -0,0 +1,16 @@
|
||||
#ifndef __JSON_INTERFACE_JSON_NETWORK_INFOS_
|
||||
#define __JSON_INTERFACE_JSON_NETWORK_INFOS_
|
||||
|
||||
#include "JsonRequestHandler.h"
|
||||
|
||||
class JsonNetworkInfos : public JsonRequestHandler
|
||||
{
|
||||
public:
|
||||
Poco::JSON::Object* handle(Poco::Dynamic::Var params);
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif // __JSON_INTERFACE_JSON_GET_USERS_
|
||||
@ -12,6 +12,7 @@
|
||||
#include "JsonTransaction.h"
|
||||
#include "JsonGetRunningUserTasks.h"
|
||||
#include "JsonGetUsers.h"
|
||||
#include "JsonNetworkInfos.h"
|
||||
#include "JsonGetUserInfos.h"
|
||||
#include "JsonUpdateUserInfos.h"
|
||||
#include "JsonUnsecureLogin.h"
|
||||
@ -57,6 +58,9 @@ Poco::Net::HTTPRequestHandler* JsonRequestHandlerFactory::createRequestHandler(c
|
||||
else if (url_first_part == "/getUsers") {
|
||||
return new JsonGetUsers;
|
||||
}
|
||||
else if (url_first_part == "/networkInfos") {
|
||||
return new JsonNetworkInfos;
|
||||
}
|
||||
else if (url_first_part == "/createUser") {
|
||||
return new JsonCreateUser(client_host);
|
||||
}
|
||||
|
||||
@ -147,6 +147,42 @@ std::vector<Poco::AutoPtr<controller::PendingTask>> PendingTasksManager::getTra
|
||||
return transactions_to_sign;
|
||||
}
|
||||
|
||||
std::vector<Poco::AutoPtr<controller::PendingTask>> PendingTasksManager::getTransactionSomeoneMustSign(Poco::AutoPtr<controller::User> user)
|
||||
{
|
||||
// TODO: don't use cast here, because can lead to errors
|
||||
Poco::ScopedLock<Poco::Mutex> _lock(mWorkMutex);
|
||||
std::vector<Poco::AutoPtr<controller::PendingTask>> transactions_to_sign;
|
||||
|
||||
for (auto map_it = mPendingTasks.begin(); map_it != mPendingTasks.end(); map_it++)
|
||||
{
|
||||
auto list = map_it->second;
|
||||
for (auto list_it = list->begin(); list_it != list->end(); list_it++)
|
||||
{
|
||||
auto transaction = dynamic_cast<model::gradido::Transaction*>(list_it->get());
|
||||
if (transaction->needSomeoneToSign(user)) {
|
||||
transactions_to_sign.push_back(*list_it);
|
||||
}
|
||||
}
|
||||
}
|
||||
return transactions_to_sign;
|
||||
}
|
||||
|
||||
Poco::AutoPtr<controller::PendingTask> PendingTasksManager::getPendingTask(int pendingTaskId)
|
||||
{
|
||||
Poco::ScopedLock<Poco::Mutex> _lock(mWorkMutex);
|
||||
for (auto map_it = mPendingTasks.begin(); map_it != mPendingTasks.end(); map_it++)
|
||||
{
|
||||
auto list = map_it->second;
|
||||
for (auto list_it = list->begin(); list_it != list->end(); list_it++)
|
||||
{
|
||||
if ((*list_it)->getModel()->getID() == pendingTaskId) {
|
||||
return *list_it;
|
||||
}
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void PendingTasksManager::reportErrorToCommunityServer(Poco::AutoPtr<controller::PendingTask> task, std::string error, std::string errorDetails)
|
||||
{
|
||||
// TODO: choose user specific server
|
||||
@ -159,6 +195,7 @@ void PendingTasksManager::reportErrorToCommunityServer(Poco::AutoPtr<controller:
|
||||
|
||||
payload.set("created", task_model->getCreated());
|
||||
payload.set("id", task_model->getID());
|
||||
payload.set("type", task_model->getTaskTypeString());
|
||||
payload.set("public_key", user_model->getPublicKeyHex());
|
||||
payload.set("error", error);
|
||||
payload.set("errorMessage", errorDetails);
|
||||
|
||||
@ -40,7 +40,9 @@ public:
|
||||
const PendingTaskList* getTaskListForUser(int userId) const;
|
||||
bool hasPendingTask(Poco::AutoPtr<controller::User> user, model::table::TaskType type);
|
||||
std::vector<Poco::AutoPtr<controller::PendingTask>> getPendingTasks(Poco::AutoPtr<controller::User> user, model::table::TaskType type);
|
||||
Poco::AutoPtr<controller::PendingTask> getPendingTask(int pendingTaskId);
|
||||
std::vector<Poco::AutoPtr<controller::PendingTask>> getTransactionsUserMustSign(Poco::AutoPtr<controller::User> user);
|
||||
std::vector<Poco::AutoPtr<controller::PendingTask>> getTransactionSomeoneMustSign(Poco::AutoPtr<controller::User> user);
|
||||
|
||||
void reportErrorToCommunityServer(Poco::AutoPtr<controller::PendingTask> task, std::string error, std::string errorDetails);
|
||||
|
||||
|
||||
@ -363,7 +363,7 @@ Session* SessionManager::getSession(int handle)
|
||||
//mWorkingMutex.lock();
|
||||
auto it = mRequestSessionMap.find(handle);
|
||||
if (it != mRequestSessionMap.end()) {
|
||||
printf("[SessionManager::getSession] found existing session, try if active...\n");
|
||||
//printf("[SessionManager::getSession] found existing session, try if active...\n");
|
||||
result = it->second;
|
||||
int iResult = result->isActive();
|
||||
if (iResult == -1) {
|
||||
|
||||
@ -98,7 +98,7 @@ namespace model {
|
||||
return result;
|
||||
}
|
||||
|
||||
std::vector<Poco::AutoPtr<Transaction>> Transaction::createTransfer(Poco::AutoPtr<controller::User> sender, MemoryBin* receiverPubkey, Poco::AutoPtr<controller::Group> receiverGroup, Poco::UInt32 amount, const std::string& memo)
|
||||
std::vector<Poco::AutoPtr<Transaction>> Transaction::createTransfer(Poco::AutoPtr<controller::User> sender, const MemoryBin* receiverPubkey, Poco::AutoPtr<controller::Group> receiverGroup, Poco::UInt32 amount, const std::string& memo)
|
||||
{
|
||||
std::vector<Poco::AutoPtr<Transaction>> results;
|
||||
auto em = ErrorManager::getInstance();
|
||||
@ -385,6 +385,21 @@ namespace model {
|
||||
return !transaction_base->isPublicKeyForbidden(user->getModel()->getPublicKey());
|
||||
}
|
||||
|
||||
bool Transaction::needSomeoneToSign(Poco::AutoPtr<controller::User> user)
|
||||
{
|
||||
if (!canSign(user)) return false;
|
||||
Poco::ScopedLock<Poco::Mutex> _lock(mWorkMutex);
|
||||
auto transaction_base = mTransactionBody->getTransactionBase();
|
||||
if (transaction_base->isPublicKeyRequired(user->getModel()->getPublicKey())) {
|
||||
return false;
|
||||
}
|
||||
if (transaction_base->getMinSignatureCount() > getSignCount()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
int Transaction::runSendTransaction()
|
||||
{
|
||||
Poco::ScopedLock<Poco::Mutex> _lock(mWorkMutex);
|
||||
|
||||
@ -30,7 +30,7 @@ namespace model {
|
||||
static Poco::AutoPtr<Transaction> createGroupMemberUpdate(Poco::AutoPtr<controller::User> user, Poco::AutoPtr<controller::Group> group);
|
||||
//! \brief transfer
|
||||
//! \return for cross group transaction return two transactions
|
||||
static std::vector<Poco::AutoPtr<Transaction>> createTransfer(Poco::AutoPtr<controller::User> sender, MemoryBin* receiverPubkey, Poco::AutoPtr<controller::Group> receiverGroup, Poco::UInt32 amount, const std::string& memo);
|
||||
static std::vector<Poco::AutoPtr<Transaction>> createTransfer(Poco::AutoPtr<controller::User> sender, const MemoryBin* receiverPubkey, Poco::AutoPtr<controller::Group> receiverGroup, Poco::UInt32 amount, const std::string& memo);
|
||||
//! \brief creation transaction
|
||||
static Poco::AutoPtr<Transaction> createCreation(Poco::AutoPtr<controller::User> receiver, Poco::UInt32 amount, Poco::DateTime targetDate, const std::string& memo);
|
||||
static Poco::AutoPtr<Transaction> load(model::table::PendingTask* dbModel);
|
||||
@ -48,13 +48,15 @@ namespace model {
|
||||
bool updateRequestInDB();
|
||||
bool insertPendingTaskIntoDB(Poco::AutoPtr<controller::User> user, model::table::TaskType type);
|
||||
|
||||
//! return true if user must sign it and hasn't yet
|
||||
//! \return true if user must sign it and hasn't yet
|
||||
bool mustSign(Poco::AutoPtr<controller::User> user);
|
||||
//! return true if user can sign transaction and hasn't yet
|
||||
bool canSign(Poco::AutoPtr<controller::User> user);
|
||||
|
||||
//! return true if user has already signed transaction
|
||||
//! \return true if user has already signed transaction
|
||||
bool hasSigned(Poco::AutoPtr<controller::User> user);
|
||||
//! \return true if at least one sign is missing and user isn't forbidden and isn't required
|
||||
bool needSomeoneToSign(Poco::AutoPtr<controller::User> user);
|
||||
|
||||
protected:
|
||||
Poco::AutoPtr<TransactionBody> mTransactionBody;
|
||||
|
||||
@ -36,7 +36,7 @@ namespace model {
|
||||
return obj;
|
||||
}
|
||||
|
||||
Poco::AutoPtr<TransactionBody> TransactionBody::create(const std::string& memo, Poco::AutoPtr<controller::User> sender, MemoryBin* receiverPublicKey, Poco::UInt32 amount, Poco::Timestamp pairedTransactionId, Poco::AutoPtr<controller::Group> group/* = nullptr*/)
|
||||
Poco::AutoPtr<TransactionBody> TransactionBody::create(const std::string& memo, Poco::AutoPtr<controller::User> sender, const MemoryBin* receiverPublicKey, Poco::UInt32 amount, Poco::Timestamp pairedTransactionId, Poco::AutoPtr<controller::Group> group/* = nullptr*/)
|
||||
{
|
||||
if (sender.isNull() || !sender->getModel()) {
|
||||
return nullptr;
|
||||
@ -75,7 +75,7 @@ namespace model {
|
||||
}
|
||||
transfer_amount->set_amount(amount);
|
||||
transfer_amount->set_pubkey(sender_model->getPublicKey(), sender_model->getPublicKeySize());
|
||||
*receiver = std::string((const char*)*receiverPublicKey, receiverPublicKey->size());
|
||||
*receiver = std::string((const char*)receiverPublicKey->data(), receiverPublicKey->size());
|
||||
|
||||
obj->mType = TRANSACTION_TRANSFER;
|
||||
obj->mTransactionSpecific = new TransactionTransfer(memo, obj->mTransactionBody.transfer());
|
||||
|
||||
@ -33,7 +33,7 @@ namespace model {
|
||||
//! \brief GradidoTransfer Transaction
|
||||
//! \param group if group.isNull() it is a local transfer, else cross group transfer,
|
||||
//! \param group if group is same as sender group outbound, else inbound
|
||||
static Poco::AutoPtr<TransactionBody> create(const std::string& memo, Poco::AutoPtr<controller::User> sender, MemoryBin* receiverPublicKey, Poco::UInt32 amount, Poco::Timestamp pairedTransactionId = Poco::Timestamp(), Poco::AutoPtr<controller::Group> group = nullptr);
|
||||
static Poco::AutoPtr<TransactionBody> create(const std::string& memo, Poco::AutoPtr<controller::User> sender, const MemoryBin* receiverPublicKey, Poco::UInt32 amount, Poco::Timestamp pairedTransactionId = Poco::Timestamp(), Poco::AutoPtr<controller::Group> group = nullptr);
|
||||
//! \brief GradidoCreation Transaction
|
||||
static Poco::AutoPtr<TransactionBody> create(const std::string& memo, Poco::AutoPtr<controller::User> receiver, Poco::UInt32 amount, Poco::DateTime targetDate);
|
||||
|
||||
|
||||
@ -84,19 +84,19 @@ namespace model {
|
||||
|
||||
if (!sender_user->load((const unsigned char*)sender_pubkey.data())) {
|
||||
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(sender_user->getModel(), -amount, true));
|
||||
}
|
||||
|
||||
if (!receiver_user->load((const unsigned char*)receiver_pubkey.data())) {
|
||||
sodium_bin2hex(pubkeyHexTemp, 65, (const unsigned char*)receiver_pubkey.data(), receiver_pubkey.size());
|
||||
mKontoTable.push_back(KontoTableEntry(pubkeyHexTemp, amount, true));
|
||||
}
|
||||
else {
|
||||
mKontoTable.push_back(KontoTableEntry(sender_user->getModel(), amount, true));
|
||||
}
|
||||
|
||||
if (!receiver_user->load((const unsigned char*)receiver_pubkey.data())) {
|
||||
sodium_bin2hex(pubkeyHexTemp, 65, (const unsigned char*)receiver_pubkey.data(), receiver_pubkey.size());
|
||||
mKontoTable.push_back(KontoTableEntry(pubkeyHexTemp, amount, false));
|
||||
}
|
||||
else {
|
||||
mKontoTable.push_back(KontoTableEntry(receiver_user->getModel(), amount, false));
|
||||
}
|
||||
mMinSignatureCount = 1;
|
||||
auto mm = MemoryManager::getInstance();
|
||||
auto pubkey_copy = mm->getFreeMemory(KeyPairEd25519::getPublicKeySize());
|
||||
|
||||
@ -126,7 +126,8 @@ namespace model
|
||||
{
|
||||
Poco::Data::Statement select(session);
|
||||
|
||||
select << "SELECT id, user_id, hedera_id, request, created, finished, result_json, task_type_id, child_pending_task_id, parent_pending_task_id FROM " << getTableName();
|
||||
select << "SELECT id, user_id, hedera_id, request, created, finished, result_json, task_type_id, child_pending_task_id, parent_pending_task_id FROM "
|
||||
<< getTableName() << " order by id";
|
||||
|
||||
return select;
|
||||
}
|
||||
@ -150,7 +151,7 @@ namespace model
|
||||
Poco::Data::Statement insert(session);
|
||||
lock();
|
||||
insert << "INSERT INTO " << getTableName()
|
||||
<< " (user_id, hedera_id, request, created, task_type_id, child_pending_task_id, parent_pending_task_id) VALUES(?,?,?,?,?,?)"
|
||||
<< " (user_id, hedera_id, request, created, task_type_id, child_pending_task_id, parent_pending_task_id) VALUES(?,?,?,?,?,?,?)"
|
||||
, use(mUserId), use(mHederaId), use(mRequest), use(mCreated), use(mTaskTypeId), use(mChildPendingTaskId), use(mParentPendingTaskId);
|
||||
unlock();
|
||||
return insert;
|
||||
|
||||
@ -46,6 +46,7 @@ namespace model {
|
||||
inline std::string getRequestCopy() const { SHARED_LOCK; return std::string((const char*)mRequest.content().data(), mRequest.content().size()); }
|
||||
inline Poco::DateTime getCreated() const { SHARED_LOCK; return mCreated; }
|
||||
inline TaskType getTaskType() const { SHARED_LOCK; return (TaskType)mTaskTypeId; }
|
||||
inline const char* getTaskTypeString() const { SHARED_LOCK; return typeToString((TaskType)mTaskTypeId); }
|
||||
inline int getChildPendingTaskId() const { SHARED_LOCK; return mChildPendingTaskId; }
|
||||
inline int getParentPendingTaskId() const { SHARED_LOCK; return mParentPendingTaskId; }
|
||||
|
||||
|
||||
@ -7,6 +7,8 @@
|
||||
|
||||
#include "../../SingletonManager/MemoryManager.h"
|
||||
|
||||
#include "../../controller/Group.h"
|
||||
|
||||
using namespace Poco::Data::Keywords;
|
||||
|
||||
namespace model {
|
||||
@ -427,6 +429,10 @@ namespace model {
|
||||
addError(new ParamError("User::getJson", "exception by getting role", ex.displayText().data()));
|
||||
sendErrorsAsEmail();
|
||||
}
|
||||
auto group = controller::Group::load(mGroupId);
|
||||
if (!group.isNull()) {
|
||||
userObj.set("group_alias", group->getModel()->getAlias());
|
||||
}
|
||||
unlock();
|
||||
|
||||
return userObj;
|
||||
|
||||
@ -35,6 +35,8 @@ enum PageState {
|
||||
std::string memo = "";
|
||||
bool hasErrors = false;
|
||||
bool enableLogout = true;
|
||||
int skip_count = 0;
|
||||
int pending_task_id = 0;
|
||||
|
||||
PageState state = PAGE_NO_TRANSACTIONS;
|
||||
|
||||
@ -46,10 +48,12 @@ enum PageState {
|
||||
bool transaction_finalize_run = false;
|
||||
bool transaction_finalize_result = false;
|
||||
auto transactions_to_sign = pt->getTransactionsUserMustSign(account_user);
|
||||
|
||||
Poco::AutoPtr<controller::PendingTask> pending_task;
|
||||
model::gradido::Transaction* transaction = nullptr;
|
||||
Poco::AutoPtr<model::gradido::TransactionBody> transaction_body;
|
||||
|
||||
if(transactions_to_sign.size() > 0)
|
||||
if(!form.empty())
|
||||
{
|
||||
transaction = dynamic_cast<model::gradido::Transaction*>(transactions_to_sign[0].get());
|
||||
transaction_body = transaction->getTransactionBody();
|
||||
@ -129,18 +133,28 @@ enum PageState {
|
||||
}
|
||||
}
|
||||
if(abort != "")
|
||||
/*
|
||||
auto ok = form.get("ok", "");
|
||||
auto abort = form.get("abort", "");
|
||||
auto skip = form.get("skip", "");
|
||||
auto skip_count_str = form.get("skip-count", "0");
|
||||
auto pending_task_id_string = form.get("pending-task-id", "");
|
||||
DataTypeConverter::strToInt(skip_count_str, skip_count);
|
||||
|
||||
if(DataTypeConverter::NUMBER_PARSE_OKAY == DataTypeConverter::strToInt(pending_task_id_string, pending_task_id))
|
||||
{
|
||||
// load transaction from pending task manager
|
||||
pending_task = pt->getPendingTask(pending_task_id);
|
||||
if(!pending_task.isNull() && pending_task->getModel()->isGradidoTransaction())
|
||||
*/
|
||||
{
|
||||
// make sure we have the correct transaction
|
||||
transaction = nullptr;
|
||||
transaction_body.assign(nullptr);
|
||||
for(auto it = transactions_to_sign.begin(); it != transactions_to_sign.end(); it++)
|
||||
{
|
||||
if((*it)->getModel()->getID() == pending_task_id) {
|
||||
transaction = dynamic_cast<model::gradido::Transaction*>(it->get());
|
||||
transaction_body = transaction->getTransactionBody();
|
||||
break;
|
||||
}
|
||||
transaction = dynamic_cast<model::gradido::Transaction*>(pending_task.get());
|
||||
if(transaction->hasSigned(account_user)) {
|
||||
transaction = nullptr;
|
||||
} else {
|
||||
transaction_body = transaction->getTransactionBody();
|
||||
}
|
||||
|
||||
if(abort != "")
|
||||
{
|
||||
//mSession->finalizeTransaction(false, true);
|
||||
@ -148,8 +162,6 @@ enum PageState {
|
||||
if(transaction && transaction->getModel()->getUserId() == user_model->getID())
|
||||
{
|
||||
transaction->deleteFromDB();
|
||||
transaction_body.assign(nullptr);
|
||||
transactions_to_sign.clear();
|
||||
transaction = nullptr;
|
||||
}
|
||||
}
|
||||
@ -177,29 +189,55 @@ enum PageState {
|
||||
}
|
||||
if(!hasErrors) {
|
||||
//mSession->finalizeTransaction(true, false);
|
||||
if(transaction->sign(account_user)) {
|
||||
transaction_body.assign(nullptr);
|
||||
transactions_to_sign.clear();
|
||||
if(transaction && transaction->sign(account_user)) {
|
||||
transaction = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(skip != "")
|
||||
{
|
||||
skip_count++;
|
||||
transaction = nullptr;
|
||||
}
|
||||
} else {
|
||||
addError(new Error(gettext("Form Error"), gettext("error with field")));
|
||||
addError(new Error(gettext("Input Error"), gettext("Task no found")));
|
||||
}
|
||||
} else {
|
||||
addError(new Error(gettext("Form Error"), gettext("error with field")));
|
||||
}
|
||||
}
|
||||
|
||||
auto transactions_user_must_sign = pt->getTransactionsUserMustSign(account_user);
|
||||
std::vector<Poco::AutoPtr<controller::PendingTask>> transactions_someone_must_sign;
|
||||
// TODO: work with community server roles
|
||||
if(user_model->getRole() == model::table::ROLE_ADMIN) {
|
||||
transactions_someone_must_sign = pt->getTransactionSomeoneMustSign(account_user);
|
||||
}
|
||||
std::vector<Poco::AutoPtr<controller::PendingTask>> transactions_to_sign;
|
||||
bool transaction_removeable = false;
|
||||
int transaction_to_sign_index = 0;
|
||||
if(!transaction)
|
||||
{
|
||||
transactions_to_sign = pt->getTransactionsUserMustSign(account_user);
|
||||
if(transactions_to_sign.size() > 0)
|
||||
if(transactions_user_must_sign.size() > skip_count) {
|
||||
transactions_to_sign = transactions_user_must_sign;
|
||||
transaction_to_sign_index = skip_count;
|
||||
} else if(transactions_someone_must_sign.size() > (skip_count - transactions_user_must_sign.size())) {
|
||||
transactions_to_sign = transactions_someone_must_sign;
|
||||
transaction_to_sign_index = skip_count - transactions_user_must_sign.size();
|
||||
}
|
||||
|
||||
if(transactions_to_sign.size() > transaction_to_sign_index)
|
||||
{
|
||||
transaction = dynamic_cast<model::gradido::Transaction*>(transactions_to_sign[0].get());
|
||||
transaction = dynamic_cast<model::gradido::Transaction*>(transactions_to_sign[transaction_to_sign_index].get());
|
||||
transaction_body = transaction->getTransactionBody();
|
||||
// user can only delete there own transactions
|
||||
// TODO: Auto timeout for community transactions
|
||||
if(transaction->getModel()->getUserId() == user_model->getID()) {
|
||||
transaction_removeable = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
size_t sumTransactions = transactions_to_sign.size();
|
||||
size_t sumTransactions = transactions_user_must_sign.size() + transactions_someone_must_sign.size();
|
||||
if(sumTransactions == 0)
|
||||
{
|
||||
auto lastExternReferer = mSession->getLastReferer();
|
||||
@ -216,14 +254,14 @@ enum PageState {
|
||||
return;
|
||||
}
|
||||
|
||||
if(sumTransactions > 0)
|
||||
if(transactions_user_must_sign.size() > 0)
|
||||
{
|
||||
enableLogout = false;
|
||||
}
|
||||
if(PAGE_NO_TRANSACTIONS == state && sumTransactions > 0)
|
||||
if(PAGE_NO_TRANSACTIONS == state && transaction && !transaction_body.isNull())
|
||||
{
|
||||
auto transactionType = transaction_body->getType();
|
||||
auto memo = transaction_body->getMemo();
|
||||
memo = transaction_body->getMemo();
|
||||
switch(transactionType) {
|
||||
case model::gradido::TRANSACTION_CREATION: state = PAGE_TRANSACTION_CREATION; break;
|
||||
case model::gradido::TRANSACTION_TRANSFER: state = PAGE_TRANSACTION_TRANSFER; break;
|
||||
@ -249,11 +287,14 @@ enum PageState {
|
||||
<% } %>
|
||||
<div class="col-md-10 equel-grid mb-3">
|
||||
<small class="text-gray d-block mt-3">
|
||||
<% if(sumTransactions > 0) { %>
|
||||
<%= sumTransactions %> <%= gettext("Transaktionen warten darauf bestätigt zu werden.") %>
|
||||
<% } else if(state == PAGE_NO_TRANSACTIONS) { %>
|
||||
<% if(sumTransactions == 0) { %>
|
||||
<%= gettext("Es gibt zurzeit keine Transaktionen zum bestätigen") %>
|
||||
<% } %>
|
||||
<% } else { %>
|
||||
<p><%= sumTransactions %> <%= gettext("Transaktionen warten darauf bestätigt zu werden.") %></p>
|
||||
<% if(skip_count > 0) { %>
|
||||
<p><%= skip_count %> <%= gettext("Transaktionen übersprungen.") %></p>
|
||||
<% } %>
|
||||
<% } %>
|
||||
</small>
|
||||
</div>
|
||||
<div class="content-container main-container">
|
||||
@ -340,6 +381,7 @@ enum PageState {
|
||||
<% } else if(PAGE_USER_DATA_CORRUPTED == state) { %>
|
||||
<p class="alert-color"><%= gettext("Es gibt ein Problem mit deinen gespeicherten Daten, bitte wende dich an den")%><a href="mailto:<%= em->getAdminReceiver()%>?subject=Corrupt User Data&body=Hallo Dario,%0D%0A%0D%0Ameine Benutzer Daten sind korrupt.%0D%0Akannst du das prüfen?%0D%0A%0D%0AMit freundlichen Grüßen%0D%0A"><%=gettext("Support") %></a></p>
|
||||
<% } %>
|
||||
<!--
|
||||
<div class="content-table">
|
||||
<div class="content-row content-row-header">
|
||||
<span class="content-cell">Aktives Konto</span>
|
||||
@ -381,6 +423,56 @@ enum PageState {
|
||||
</button>
|
||||
<% } %>
|
||||
</form>
|
||||
-->
|
||||
<% if(PAGE_NO_TRANSACTIONS == state) { %>
|
||||
<a href="<%= ServerConfig::g_php_serverPath %>"><%= gettext("Zurück") %></a>
|
||||
<% } else { %>
|
||||
<div class="content-table">
|
||||
<div class="content-row content-row-header">
|
||||
<span class="content-cell">Aktives Konto</span>
|
||||
</div>
|
||||
<div class="content-row">
|
||||
<span class="content-cell"><%= user_model->getNameWithEmailHtml() %></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content-table">
|
||||
<div class="content-row content-row-header">
|
||||
<span class="content-cell">Verwendungszweck</span>
|
||||
</div>
|
||||
<div class="content-row content-row-bg">
|
||||
<span class="content-cell"><%= memo %></span>
|
||||
</div>
|
||||
</div>
|
||||
<form>
|
||||
<% if(transaction) { %>
|
||||
<input type="hidden" name="pending-task-id" value="<%= transaction->getModel()->getID() %>">
|
||||
<% } %>
|
||||
<input type="hidden" name="skip-count" value="<%= skip_count %>">
|
||||
<% if(!account_user->hasPassword()) {%>
|
||||
<div class="form-group">
|
||||
<label for="sign-password"><%= gettext("Ich brauche nochmal dein Passwort") %></label>
|
||||
<input type="password" class="form-control" id="sign-password" name="sign-password" placeholder="<%= gettext("Passwort") %>">
|
||||
</div>
|
||||
<% } %>
|
||||
<% if(PAGE_USER_DATA_CORRUPTED != state && user_model->isEmailChecked()) { %>
|
||||
<button type="submit" class="form-button" name="ok" value="ok">
|
||||
<i class="material-icons-outlined">verified_user</i>
|
||||
<%= gettext("Transaktion unterzeichnen") %>
|
||||
</button>
|
||||
<% } %>
|
||||
<% if(transaction_removeable) { %>
|
||||
<button type="submit" class="form-button button-cancel" name="abort" value="abort">
|
||||
<i class="material-icons-outlined">delete</i>
|
||||
<%= gettext("Transaktion verwerfen") %>
|
||||
</button>
|
||||
<% } else { %>
|
||||
<button type="submit" class="form-button button-cancel" name="skip" value="skip">
|
||||
<i class="material-icons-outlined">debug-step-over</i>
|
||||
<%= gettext("Transaktion überspringen") %>
|
||||
</button>
|
||||
<% } %>
|
||||
</form>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user