From 6aced08f09c07df8c78c65c753a4b1b08a9212a6 Mon Sep 17 00:00:00 2001 From: Dario Rekowski on RockPI Date: Tue, 17 Dec 2019 10:25:00 +0000 Subject: [PATCH 1/2] fixing multi creation --- src/Controller/AppController.php | 28 +++++++++ .../Component/JsonRequestClientComponent.php | 9 ++- src/Controller/DashboardController.php | 6 +- .../TransactionCreationsController.php | 60 +++++++------------ src/Template/Dashboard/server_index.ctp | 4 ++ 5 files changed, 66 insertions(+), 41 deletions(-) diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php index 04762e14f..4e3598c6c 100644 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -231,6 +231,34 @@ class AppController extends Controller } */ + public function addAdminError($controller, $action, $returnTable, $state_user_id) { + if(!is_array($returnTable)) { + $this->addAdminError('AppController', 'addAdminError', ['state' => 'error', 'msg' => 'returnTable isn\'t array', 'details' => gettype($returnTable)]); + return false; + } + $adminErrorTable = TableRegistry::getTableLocator()->get('AdminErrors'); + $adminErrorEntity = $adminErrorTable->newEntity(); + $adminErrorEntity->state_user_id = $state_user_id; + $adminErrorEntity->controller = $controller; + $adminErrorEntity->action = $action; + $adminErrorEntity->state = $returnTable->state; + if(isset($returnTable['msg'])) { + $adminErrorEntity->msg = $returnTable['msg']; + } + if(isset($returnTable['details'])) { + $adminErrorEntity->details = $returnTable['details']; + } + if(!$adminErrorTable->save($adminErrorEntity)) { + $this->Flash->error(__('Serious error, couldn\'t save to db, please write the admin: ' . $this->getAdminEmailLink())); + } + return true; + } + + public function getAdminEmailLink($text) { + $serverAdminEmail = Configure::read('ServerAdminEmail'); + return ''. $serverAdminEmail . ''; + } + public function returnJsonEncoded($json) { $this->autoRender = false; $response = $this->response->withType('application/json'); diff --git a/src/Controller/Component/JsonRequestClientComponent.php b/src/Controller/Component/JsonRequestClientComponent.php index 169f7a56b..bf112bd4e 100644 --- a/src/Controller/Component/JsonRequestClientComponent.php +++ b/src/Controller/Component/JsonRequestClientComponent.php @@ -20,9 +20,16 @@ class JsonRequestClientComponent extends Component if(!is_numeric($user_balance) || intval($user_balance) < 0) { return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'user_balance invalid']; } - if(!$this->is_base64($base64Message)) { + if(is_array($base64Message)) { + foreach($base64Message as $singleMessage) { + if(!$this->is_base64($singleMessage)) { + return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'at least one base64Message contain invalid base64 characters']; + } + } + } else if(!$this->is_base64($base64Message)) { return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'base64Message contain invalid base64 characters']; } + $http = new Client(); $transactionbody = json_encode([ diff --git a/src/Controller/DashboardController.php b/src/Controller/DashboardController.php index 5f7118ef8..8e5b44152 100644 --- a/src/Controller/DashboardController.php +++ b/src/Controller/DashboardController.php @@ -3,7 +3,7 @@ namespace App\Controller; use App\Controller\AppController; //use Cake\Routing\Router; -//use Cake\ORM\TableRegistry; +use Cake\ORM\TableRegistry; /** * StateUsers Controller @@ -49,8 +49,10 @@ class DashboardController extends AppController { $startTime = microtime(true); $this->viewBuilder()->setLayout('frontend'); + $adminErrorsTable = TableRegistry::getTableLocator()->get('AdminErrors'); + $adminErrorCount = $adminErrorsTable->find('all')->count(); - + $this->set('adminErrorCount', $adminErrorCount); $this->set('timeUsed', microtime(true) - $startTime); } diff --git a/src/Controller/TransactionCreationsController.php b/src/Controller/TransactionCreationsController.php index ced9727fb..651cda40a 100644 --- a/src/Controller/TransactionCreationsController.php +++ b/src/Controller/TransactionCreationsController.php @@ -282,40 +282,32 @@ class TransactionCreationsController extends AppController } $creationTransactionCount = count($transactions); if($creationTransactionCount > 0) { - $http = new Client(); - try { - $loginServer = Configure::read('LoginServer'); - $url = $loginServer['host'] . ':' . $loginServer['port']; - $session_id = $session->read('session_id'); - /* - * $response = $http->post($url . '/checkTransaction', json_encode([ - 'session_id' => $session_id, - 'transaction_base64' => base64_encode($builderResult['transactionBody']->serializeToString()), - 'balance' => $user['balance'] - ]), ['type' => 'json']); - */ - $transactionbody = json_encode([ - 'session_id' => $session_id, - 'transaction_base64' => $transactions, - 'balance' => $user['balance'] - ]); - //die($transactionbody); - $response = $http->post($url . '/checkTransaction', $transactionbody, ['type' => 'json']); - //var_dump($response->getStringBody()); - try { - //$stringBody = $response->getStringBody(); - //var_dump($stringBody); - $json = $response->getJson(); - } catch(Exception $ex) { - $this->Flash->error(__('result isn\'t json ') . $ex->getMessage()); + $user_balance = 0; + if(isset($user['balance'])) { + $user_balance = $user['balance']; + } + // $session_id, $base64Message, $user_balance = 0 + $requestResult = $this->JsonRequestClient->sendTransaction( + $session->read('session_id'), + $transactions, + $user_balance + ); + if($requestResult['state'] != 'success') { + $this->addAdminError('TransactionCreations', 'createMulti', $requestResult, $user['id']); + if($requestResult['type'] == 'request error') { + $this->Flash->error(__('Error by requesting LoginServer, please try again')); + } else { + $this->Flash->error(__('Error, please wait for the admin to fix it')); } + } else { + $json = $requestResult['data']; if($json['state'] != 'success') { if($json['msg'] == 'session not found') { $session->destroy(); return $this->redirect(Router::url('/', true) . 'account', 303); - //$this->Flash->error(__('session not found, please login again')); } else { - $this->Flash->error(__('login server return error: ' . json_encode($json))); + $this->addAdminError('TransactionCreations', 'createMulti', $json, $user['id']); + $this->Flash->error(__('Login Server Error, please wait for the admin to fix it')); } } else { $pendingTransactionCount = $session->read('Transactions.pending'); @@ -325,25 +317,17 @@ class TransactionCreationsController extends AppController $pendingTransactionCount += $creationTransactionCount; } $session->write('Transactions.pending', $pendingTransactionCount); - echo "pending: " . $pendingTransactionCount; + //echo "pending: " . $pendingTransactionCount; if($mode === 'next') { return $this->redirect(Router::url('/', true) . 'account/checkTransactions', 303); } else { $this->Flash->success(__('Transaction submitted for review.')); } } - - } catch(\Exception $e) { - $msg = $e->getMessage(); - $this->Flash->error(__('error http request: ') . $msg); } - } - + } } - } - - } /** diff --git a/src/Template/Dashboard/server_index.ctp b/src/Template/Dashboard/server_index.ctp index 552898569..a18ec3aa6 100644 --- a/src/Template/Dashboard/server_index.ctp +++ b/src/Template/Dashboard/server_index.ctp @@ -23,4 +23,8 @@ $this->assign('title', __('Willkommen')); ['class' => 'grd-nav-bn grd-nav-bn-large'] );?> + Html->link( + __('Fehler') . ' (' . $adminErrorCount . ')', + ['controller' => 'AdminErrors'], ['class' => 'grd-nav-bn']); + ?> \ No newline at end of file From a3a09182e992058f2563fe2017c08db0d09430bc Mon Sep 17 00:00:00 2001 From: Dario Rekowski on RockPI Date: Tue, 17 Dec 2019 12:10:56 +0000 Subject: [PATCH 2/2] disable self by multi create --- src/Controller/TransactionCreationsController.php | 1 + .../TransactionCreations/create_multi.ctp | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Controller/TransactionCreationsController.php b/src/Controller/TransactionCreationsController.php index 651cda40a..06768ef74 100644 --- a/src/Controller/TransactionCreationsController.php +++ b/src/Controller/TransactionCreationsController.php @@ -243,6 +243,7 @@ class TransactionCreationsController extends AppController $timeUsed = microtime(true) - $startTime; $this->set(compact('timeUsed', 'stateUsers', 'creationForm', 'possibleReceiver')); + $this->set('activeUser', $user); $this->set('creationForm', $creationForm); $this->set('timeUsed', microtime(true) - $startTime); diff --git a/src/Template/TransactionCreations/create_multi.ctp b/src/Template/TransactionCreations/create_multi.ctp index fa2547436..f6001bdea 100644 --- a/src/Template/TransactionCreations/create_multi.ctp +++ b/src/Template/TransactionCreations/create_multi.ctp @@ -42,9 +42,17 @@ $this->assign('title', __('Schöpfungstransaktion'));
Form->control('memo'); ?> Form->control('amount'); ?> - +
- Form->checkbox('user[' .$possibleReceiver['id'] . ']', ['value' => $possibleReceiver['id'], 'hiddenField' => false]); ?> + Form->checkbox('user[' .$possibleReceiver['id'] . ']', ['value' => $possibleReceiver['id'], 'hiddenField' => false, $disable]); ?> + + + <> @@ -52,6 +60,9 @@ $this->assign('title', __('Schöpfungstransaktion')); In diesem Monat bereits geschöpft: element('printGradido', ['number' => $possibleReceiver['amount']]);?> + + +