%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/twofa/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/twofa/Events.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2020 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ namespace humhub\modules\twofa; use humhub\components\Controller; use humhub\modules\admin\controllers\UserController as AdminUserController; use humhub\modules\admin\permissions\ManageUsers; use humhub\modules\twofa\helpers\TwofaHelper; use humhub\modules\twofa\helpers\TwofaUrl; use humhub\modules\ui\menu\MenuLink; use humhub\modules\user\controllers\AuthController; use humhub\modules\user\events\UserEvent; use humhub\modules\user\widgets\AccountMenu; use Yii; class Events { /** * @inheritdoc */ public static function onBeforeRequest() { try { static::registerAutoloader(); } catch (\Throwable $e) { Yii::error($e); } } /** * Register composer autoloader */ public static function registerAutoloader() { $autoloaderFilePath = Yii::getAlias('@twofa/vendor/autoload.php'); if (file_exists($autoloaderFilePath)) { require $autoloaderFilePath; } } /** * Check if current User has been verified by 2fa if it is required * * @param $event * @return false|\yii\console\Response|\yii\web\Response */ public static function onBeforeAction($event) { if (Yii::$app->request->isAjax) { // TODO: maybe it should be restricted better, but we don't need to call this for PollController from live module indeed return false; } if (Yii::$app->user->mustChangePassword()) { return false; } if (self::isImpersonateAction($event->sender)) { Yii::$app->session->set('twofa.switchedUserId', Yii::$app->user->id); } if (TwofaHelper::isVerifyingRequired() && !Yii::$app->getModule('twofa')->isTwofaCheckUrl()) { return Yii::$app->getResponse()->redirect(TwofaUrl::toCheck()); } } /** * Check if currently action "Impersonate" is called * * @param $controller Controller * @return bool */ protected static function isImpersonateAction($controller): bool { return ($controller instanceof AdminUserController) && isset($controller->action) && $controller->action->id == 'impersonate' && Yii::$app->user->can(ManageUsers::class); } /** * Clear temp user ID which was used for administration action "Impersonate" * * @param $event */ public static function onAfterAction($event) { if ($event->sender instanceof AuthController && $event->sender->action->id == 'logout') { Yii::$app->session->remove('twofa.switchedUserId'); } } /** * Set flag after login to user who need 2fa * * @param $event * @throws \Throwable */ public static function onAfterLogin($event) { TwofaHelper::enableVerifying(); } /** * Add menu to edit module setting per current User * * @param UserEvent $event */ public static function onProfileSettingMenuInit($event) { if (Yii::$app->user->isGuest) { return; } $menuRoute = explode('/', trim(TwofaUrl::ROUTE_USER_SETTINGS, '/')); $isActiveMenu = MenuLink::isActiveState($menuRoute[0], $menuRoute[1]); $event->sender->addItem([ 'label' => Yii::t('TwofaModule.base', 'Two-Factor Authentication'), 'url' => Yii::$app->user->identity->createUrl(TwofaUrl::ROUTE_USER_SETTINGS), 'isActive' => $isActiveMenu, 'sortOrder' => 300 ]); if ($isActiveMenu) { AccountMenu::markAsActive('account-settings-settings'); } } }