%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/twofa/drivers/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/twofa/drivers/BaseDriver.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\drivers; use humhub\modules\twofa\helpers\TwofaHelper; use humhub\modules\twofa\models\CheckCode; use humhub\modules\twofa\Module; use humhub\modules\user\models\User; use Yii; use yii\base\BaseObject; use yii\base\Model; use yii\bootstrap\ActiveForm; abstract class BaseDriver extends BaseObject { /** * @var string Last generated code */ private $code; /** * @var string Driver name */ public $name; /** * @var string Info for user to know where to find a verifying code */ public $info; /** * @var Model */ protected $userSettings; /** * @inheritdoc */ public function init() { parent::init(); $this->info = Yii::t('TwofaModule.base', 'Please enter your verifying code.'); } /** * Check if this Driver is installed successfully and can be used properly * * @return bool */ public function isInstalled() { return true; } /** * Check if this Driver is active for current User * * @return bool */ public function isActive(): bool { if (Yii::$app->user->isGuest) { return false; } return Yii::$app->user->getIdentity() instanceof User; } /** * Action before send/generate code * * @return bool */ protected function beforeSend() { if (TwofaHelper::isBrowserRemembered()) { return false; } if (!$this->isActive()) { return false; } // Switch to users language - if specified if (!empty($user->language)) { Yii::$app->language = $user->language; } return true; } /** * Send and/or Generate a new code * * @return bool true on success sending */ abstract public function send(); /** * Get code, Generate random code on first call * * @return string */ public function getCode() { if (!isset($this->code)) { /** @var Module $module */ $module = Yii::$app->getModule('twofa'); $this->code = TwofaHelper::generateCode($module->getCodeLength()); } return $this->code; } /** * Display additional elements before input of checking code on 2FA form * * @param ActiveForm $form * @param CheckCode $model */ public function beforeCheckCodeFormInput(ActiveForm $form, CheckCode $model) { echo '<p>' . $this->info . '</p>'; } /** * Render additional user settings * * @param array Params */ public function renderUserSettings($params) { } /** * Render additional user settings * * @param array */ public function renderUserSettingsFile($params = []) { $params = array_merge([ 'activeDriverClassName' => TwofaHelper::getDriverSetting(), ], $params); echo '<div data-driver-fields="' . static::class . '"' . ($params['activeDriverClassName'] == static::class ? '' : ' style="display:none"') . '>'; echo $this->renderFile($params); echo '</div>'; } /** * Get a rendered custom driver file * * @param array Params to pass to template * @param array Options to init the rendered file * @return string The rendered result */ public function renderFile($params = [], $options = []) { $options = array_merge([ 'prefix' => 'config/user', 'suffix' => '', ], $options); $driverName = substr(static::class, strrpos(static::class, '\\') + 1, -6); $driverFieldsFileName = '@twofa/views/' . $options['prefix'] . $driverName . $options['suffix'] . '.php'; if (!file_exists(Yii::getAlias($driverFieldsFileName))) { // Skip if this Driver has no file for additional fields: return; } // Render a form file with additional fields for this Driver: return Yii::$app->getView()->renderFile($driverFieldsFileName, $params); } /** * Check code * * @param string Verifying code * @param string Correct code * @return bool */ public function checkCode($verifyingCode, $correctCode = null) { if ($correctCode === null) { $correctCode = TwofaHelper::getCode(); } return TwofaHelper::hashCode($verifyingCode) === $correctCode; } /** * Call driver action * Used by AJAX request * * @param string Action name * @param array Params * @return mixed */ public function callAction($action, $params = []) { $methodName = 'action' . ucfirst($action); if (empty($action) || !method_exists($this, $methodName)) { return; } return $this->$methodName($params); } /** * @return Model|false */ public function getUserSettings() { if (!isset($this->userSettings)) { $className = preg_replace('/^.+?\\\\([^\\\\]+)Driver$/', '$1', get_class($this)); $userSettingsClassName = '\\humhub\\modules\\twofa\\models\\' . $className . 'UserSettings'; $this->userSettings = (class_exists($userSettingsClassName) ? new $userSettingsClassName() : false); } return $this->userSettings; } }