%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/twofa/models/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/twofa/models/UserSettings.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\models; use humhub\modules\twofa\drivers\BaseDriver; use humhub\modules\twofa\helpers\TwofaHelper; use humhub\modules\twofa\Module; use humhub\modules\ui\form\widgets\ActiveForm; use Yii; use yii\base\Model; /** * This is the form for User Settings of Two-Factor Authentication */ class UserSettings extends Model { /** * @var Module */ public $module; /** * @var string Class name of Driver: '\humhub\modules\twofa\drivers\EmailDriver' */ public $driver; /** * @var BaseDriver[] */ protected $driverObjects = []; public function init() { $this->module = Yii::$app->getModule('twofa'); $this->driver = TwofaHelper::getDriverSetting(); } /** * @inheritdoc */ public function rules() { return [ ['driver', 'string'], ['driver', 'in', 'range' => array_keys($this->getDrivers())], ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'driver' => Yii::t('TwofaModule.base', 'Authentication method'), ]; } /** * @inheritdoc */ public function attributeHints() { return []; } /** * Get available drivers for current User in the 2fa module * * @return array */ public function getDrivers() { if (TwofaHelper::isEnforcedUser()) { // User from enforced group should be denied to unselect 2fa driver $noneOption = [$this->module->defaultDriver => TwofaHelper::getDriverByClassName($this->module->defaultDriver)->name]; } else { $noneOption = ['' => Yii::t('TwofaModule.base', 'Disable two-factor authentication (not recommended)')]; } return $this->module->getDriversOptions($noneOption, true); } /** * Display additional fields of all enabled drivers * * @param ActiveForm $form */ public function renderDriversFields($form) { $drivers = $this->module->getEnabledDrivers(); foreach ($drivers as $driverClassName) { $this->getDriver($driverClassName)->renderUserSettings([ 'form' => $form, 'activeDriverClassName' => $this->driver, ]); } } /** * Get driver by class name * * @param string Driver class name, null - to get current driver * @return Model|false */ protected function getDriver($driverClassName = null) { if ($driverClassName === null) { $driverClassName = $this->driver; } if (!isset($this->driverObjects[$driverClassName])) { $this->driverObjects[$driverClassName] = TwofaHelper::getDriverByClassName($driverClassName); } return $this->driverObjects[$driverClassName]; } /** * @return Model|false */ protected function getDriverSettings() { return $this->getDriver() ? $this->getDriver()->getUserSettings() : false; } /** * Save 2fa settings per current User * * @return bool */ public function save() { return TwofaHelper::setSetting(TwofaHelper::USER_SETTING, $this->driver); } /** * Save form with validated params loaded from request * * @return bool */ public function validatedSave() { return $this->load(Yii::$app->request->post()) && $this->validate() && $this->driverValidatedSave() && $this->save(); } /** * Save form with validated params loaded from request per current selected Driver * * @return bool */ protected function driverValidatedSave() { $driverSettings = $this->getDriverSettings(); if (!$driverSettings) { return true; } return $driverSettings->load(Yii::$app->request->post()) && $driverSettings->validate() && $driverSettings->save(); } }