| | <?php |
| |
|
| | namespace Kanboard\Subscriber; |
| |
|
| | use Symfony\Component\EventDispatcher\EventSubscriberInterface; |
| | use Kanboard\Core\Security\AuthenticationManager; |
| | use Kanboard\Core\Session\SessionManager; |
| | use Kanboard\Event\AuthSuccessEvent; |
| | use Kanboard\Event\AuthFailureEvent; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | class AuthSubscriber extends BaseSubscriber implements EventSubscriberInterface |
| | { |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public static function getSubscribedEvents() |
| | { |
| | return array( |
| | AuthenticationManager::EVENT_SUCCESS => 'afterLogin', |
| | AuthenticationManager::EVENT_FAILURE => 'onLoginFailure', |
| | SessionManager::EVENT_DESTROY => 'afterLogout', |
| | ); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function afterLogin(AuthSuccessEvent $event) |
| | { |
| | $this->logger->debug('Subscriber executed: '.__METHOD__); |
| |
|
| | $userAgent = $this->request->getUserAgent(); |
| | $ipAddress = $this->request->getIpAddress(); |
| |
|
| | $this->userLockingModel->resetFailedLogin($this->userSession->getUsername()); |
| |
|
| | $this->lastLoginModel->create( |
| | $event->getAuthType(), |
| | $this->userSession->getId(), |
| | $ipAddress, |
| | $userAgent |
| | ); |
| |
|
| | if ($event->getAuthType() === 'RememberMe') { |
| | $this->userSession->setPostAuthenticationAsValidated(); |
| | } |
| |
|
| | if (session_is_true('hasRememberMe') && ! $this->userSession->hasPostAuthentication()) { |
| | $session = $this->rememberMeSessionModel->create($this->userSession->getId(), $ipAddress, $userAgent); |
| | $this->rememberMeCookie->write($session['token'], $session['sequence'], $session['expiration']); |
| | } |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | public function afterLogout() |
| | { |
| | $this->logger->debug('Subscriber executed: '.__METHOD__); |
| | $credentials = $this->rememberMeCookie->read(); |
| |
|
| | if ($credentials !== false) { |
| | $session = $this->rememberMeSessionModel->find($credentials['token'], $credentials['sequence']); |
| |
|
| | if (! empty($session)) { |
| | $this->rememberMeSessionModel->remove($session['id']); |
| | } |
| |
|
| | $this->rememberMeCookie->remove(); |
| | } |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function onLoginFailure(AuthFailureEvent $event) |
| | { |
| | $this->logger->debug('Subscriber executed: '.__METHOD__); |
| | $username = $event->getUsername(); |
| | $ipAddress = $this->request->getIpAddress(); |
| | |
| | if (! empty($username)) { |
| | |
| | error_log('Kanboard: user '.$username.' authentication failure with IP address: '.$ipAddress); |
| | $this->userLockingModel->incrementFailedLogin($username); |
| |
|
| | if ($this->userLockingModel->getFailedLogin($username) > BRUTEFORCE_LOCKDOWN) { |
| | $this->userLockingModel->lock($username, BRUTEFORCE_LOCKDOWN_DURATION); |
| | } |
| | } |
| | else { |
| | |
| | error_log('Kanboard: user Unknown authentication failure with IP address: '.$ipAddress); |
| | } |
| | } |
| | } |
| |
|