%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/twofa/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/twofa/Module.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\Module as BaseModule;
use humhub\libs\Html;
use humhub\modules\admin\models\forms\UserEditForm;
use humhub\modules\twofa\drivers\EmailDriver;
use humhub\modules\twofa\drivers\GoogleAuthenticatorDriver;
use humhub\modules\twofa\helpers\TwofaHelper;
use humhub\modules\twofa\helpers\TwofaUrl;
use humhub\modules\user\models\Group;
use Yii;
/**
* @inheritdoc
*/
class Module extends BaseModule
{
/**
* @inheritdoc
*/
public $resourcesPath = 'resources';
/**
* @var string Default Driver, used for Users from enforced Groups by default
*/
public $defaultDriver = EmailDriver::class;
/**
* @var array Drivers
*/
public $drivers = [
EmailDriver::class,
GoogleAuthenticatorDriver::class,
];
/**
* @inheritdoc
*/
public function getConfigUrl()
{
return TwofaUrl::toConfig();
}
/**
* @return bool Check if current page is already URL of 2fa
*/
public function isTwofaCheckUrl()
{
return Yii::$app->getRequest()->getUrl() === TwofaUrl::toCheck();
}
/**
* Get available drivers options for the 2fa module settings
*
* @param array|null Init options(Key - Driver class name, Value - Drive name), used to init None option and/or forced/default Driver
* @param boolean true - to load only enabled drivers, false - to load all implemented drivers for the module
* @return array
*/
public function getDriversOptions($driversOptions = [], $onlyEnabled = false)
{
$drivers = $onlyEnabled ? $this->getEnabledDrivers() : $this->drivers;
foreach ($drivers as $driverClassName) {
$driversOptions[$driverClassName] = TwofaHelper::getDriverByClassName($driverClassName)->name;
}
return $driversOptions;
}
/**
* Callback function to render checkbox element of Driver on backoffice module config form
*
* @param $index
* @param $label
* @param $name
* @param $checked
* @param $value
* @return string
*/
public function renderDriverCheckboxItem($index, $label, $name, $checked, $value)
{
$options = [
'label' => Html::encode($label),
'value' => $value,
'disabled' => !TwofaHelper::getDriverByClassName($value)->isInstalled(),
];
return '<div class="checkbox">' . Html::checkbox($name, $checked, $options) . '</div>';
}
/**
* Get enabled drivers
*
* @param bool $checkActive
* @return array
*/
public function getEnabledDrivers(bool $checkActive = true): array
{
$enabledDrivers = $this->settings->get('enabledDrivers', implode(',', $this->drivers));
if (empty($enabledDrivers)) {
return [];
}
// Check if each enabled Driver is properly installed:
$enabledDrivers = explode(',', $enabledDrivers);
foreach ($enabledDrivers as $d => $enabledDriverClassName) {
$enabledDriver = TwofaHelper::getDriverByClassName($enabledDriverClassName);
if (!$enabledDriver->isInstalled() || ($checkActive && !$enabledDriver->isActive())) {
unset($enabledDrivers[$d]);
}
}
return $enabledDrivers;
}
/**
* Get length of verifying code
*
* @return integer
*/
public function getCodeLength()
{
return intval($this->settings->get('codeLength', 6));
}
/**
* Get length in days of remember me option
*
* @return integer
*/
public function getRememberMeDays()
{
return $this->settings->get('rememberMeDays', 7);
}
/**
* Get groups options for the 2fa module settings
*
* @return array
*/
public function getGroupsOptions()
{
$groups = Group::find()->all();
return UserEditForm::getGroupItems($groups);
}
/**
* Get enforced groups to 2fa E-mail driver
*
* @return array
*/
public function getEnforcedGroups()
{
$enforcedGroups = $this->settings->get('enforcedGroups');
if ($enforcedGroups === null) {
// Enforce all Administrative Groups by default
return Group::find()->select('id')->where(['is_admin_group' => '1'])->column();
}
return empty($enforcedGroups) ? [] : explode(',', $enforcedGroups);
}
/**
* Get default method for the mandatory/enforced groups
*
* @return string
*/
public function getEnforcedMethod(): string
{
return $this->settings->get('enforcedMethod', $this->defaultDriver);
}
/**
* @return mixed
*/
public function getTrustedNetworks()
{
return json_decode($this->settings->get('trustedNetworks', '[]'));
}
}