From be80b12a03bdcc00185f1efe450ead0f2c1f5623 Mon Sep 17 00:00:00 2001 From: Antonio Ramirez Date: Sun, 4 Dec 2016 23:20:33 +0100 Subject: [PATCH] add block/unblock service --- lib/User/Controller/AdminController.php | 2 +- lib/User/Event/UserEvent.php | 5 +++++ lib/User/Helper/SecurityHelper.php | 5 +++++ lib/User/Service/UserBlockService.php | 27 ++++++++++++++++++++++--- 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/lib/User/Controller/AdminController.php b/lib/User/Controller/AdminController.php index 87c67cc..ca948bf 100644 --- a/lib/User/Controller/AdminController.php +++ b/lib/User/Controller/AdminController.php @@ -255,7 +255,7 @@ class AdminController extends Controller /** @var UserEvent $event */ $event = $this->make(UserEvent::class, [$user]); - if ($this->make(UserBlockService::class, [$user, $event])->run()) { + if ($this->make(UserBlockService::class, [$user, $event, $this])->run()) { Yii::$app->getSession()->setFlash('success', Yii::t('user', 'User block status has been updated.')); } else { Yii::$app->getSession()->setFlash('danger', Yii::t('user', 'Unable to update block status.')); diff --git a/lib/User/Event/UserEvent.php b/lib/User/Event/UserEvent.php index 636508c..49d55c6 100644 --- a/lib/User/Event/UserEvent.php +++ b/lib/User/Event/UserEvent.php @@ -14,6 +14,11 @@ class UserEvent extends Event const EVENT_AFTER_PROFILE_UPDATE = 'afterProfileUpdate'; const EVENT_BEFORE_CONFIRMATION = 'beforeConfirmation'; const EVENT_AFTER_CONFIRMATION = 'afterConfirmation'; + const EVENT_BEFORE_UNBLOCK = 'beforeUnblock'; + const EVENT_AFTER_UNBLOCK = 'afterUnblock'; + const EVENT_BEFORE_BLOCK = 'beforeBlock'; + const EVENT_AFTER_BLOCK = 'afterBlock'; + protected $user; diff --git a/lib/User/Helper/SecurityHelper.php b/lib/User/Helper/SecurityHelper.php index 13e3d60..7611afa 100644 --- a/lib/User/Helper/SecurityHelper.php +++ b/lib/User/Helper/SecurityHelper.php @@ -29,6 +29,11 @@ class SecurityHelper return $this->security->generatePasswordHash($password, $cost); } + public function generateRandomString($length = 32) + { + return $this->security->generateRandomString($length); + } + public function validatePassword($password, $hash) { return $this->security->validatePassword($password, $hash); diff --git a/lib/User/Service/UserBlockService.php b/lib/User/Service/UserBlockService.php index 774acc2..a5789c9 100644 --- a/lib/User/Service/UserBlockService.php +++ b/lib/User/Service/UserBlockService.php @@ -2,22 +2,43 @@ namespace Da\User\Service; use Da\User\Contracts\ServiceInterface; +use Da\User\Controller\AdminController; use Da\User\Event\UserEvent; +use Da\User\Helper\SecurityHelper; use Da\User\Model\User; class UserBlockService implements ServiceInterface { protected $model; protected $event; + protected $controller; + protected $securityHelper; - public function __construct(User $model, UserEvent $event) - { + public function __construct( + User $model, + UserEvent $event, + AdminController $controller, + SecurityHelper $securityHelper + ) { $this->model = $model; $this->event = $event; + $this->controller = $controller; + $this->securityHelper = $securityHelper; } public function run() { - + if ($this->model->getIsBlocked()) { + $this->controller->trigger(UserEvent::EVENT_BEFORE_UNBLOCK, $this->event); + $result = (bool)$this->model->updateAttributes(['blocked_at' => null]); + $this->controller->trigger(UserEvent::EVENT_AFTER_UNBLOCK, $this->event); + } else { + $this->controller->trigger(UserEvent::EVENT_BEFORE_BLOCK, $this->event); + $result = (bool)$this->model->updateAttributes( + ['blocked_at' => time(), 'auth_key' => $this->securityHelper->generateRandomString()] + ); + $this->controller->trigger(UserEvent::EVENT_AFTER_BLOCK, $this->event); + } + return $result; } }