PHP-CS-Fixer run
This commit is contained in:
@ -27,9 +27,9 @@ use yii\base\Event as YiiEvent;
|
|||||||
use yii\base\Exception;
|
use yii\base\Exception;
|
||||||
use yii\base\InvalidConfigException;
|
use yii\base\InvalidConfigException;
|
||||||
use yii\console\Application as ConsoleApplication;
|
use yii\console\Application as ConsoleApplication;
|
||||||
|
use yii\helpers\ArrayHelper;
|
||||||
use yii\i18n\PhpMessageSource;
|
use yii\i18n\PhpMessageSource;
|
||||||
use yii\web\Application as WebApplication;
|
use yii\web\Application as WebApplication;
|
||||||
use yii\helpers\ArrayHelper;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bootstrap class of the yii2-usuario extension. Configures container services, initializes translations,
|
* Bootstrap class of the yii2-usuario extension. Configures container services, initializes translations,
|
||||||
@ -134,7 +134,7 @@ class Bootstrap implements BootstrapInterface
|
|||||||
if (in_array($name, ['User', 'Profile', 'Token', 'SocialNetworkAccount', 'SessionHistory'])) {
|
if (in_array($name, ['User', 'Profile', 'Token', 'SocialNetworkAccount', 'SessionHistory'])) {
|
||||||
$di->set(
|
$di->set(
|
||||||
"Da\\User\\Query\\{$name}Query",
|
"Da\\User\\Query\\{$name}Query",
|
||||||
function() use($model) {
|
function () use ($model) {
|
||||||
return $model::find();
|
return $model::find();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -168,34 +168,36 @@ class Bootstrap implements BootstrapInterface
|
|||||||
// Initialize array of two factor authentication validators available
|
// Initialize array of two factor authentication validators available
|
||||||
$defaultTwoFactorAuthenticationValidators =
|
$defaultTwoFactorAuthenticationValidators =
|
||||||
[
|
[
|
||||||
'google-authenticator'=>[
|
'google-authenticator' => [
|
||||||
'class'=>\Da\User\Validator\TwoFactorCodeValidator::class,
|
'class' => \Da\User\Validator\TwoFactorCodeValidator::class,
|
||||||
'description'=>Yii::t('usuario', 'Google Authenticator'),
|
'description' => Yii::t('usuario', 'Google Authenticator'),
|
||||||
'configurationUrl'=>'user/settings/two-factor',
|
'configurationUrl' => 'user/settings/two-factor',
|
||||||
'enabled'=>true
|
'enabled' => true
|
||||||
],
|
],
|
||||||
'email'=>[
|
'email' => [
|
||||||
'class'=>\Da\User\Validator\TwoFactorEmailValidator::class,
|
'class' => \Da\User\Validator\TwoFactorEmailValidator::class,
|
||||||
'description'=>Yii::t('usuario', 'Email'),
|
'description' => Yii::t('usuario', 'Email'),
|
||||||
'configurationUrl'=>'user/settings/two-factor-email',
|
'configurationUrl' => 'user/settings/two-factor-email',
|
||||||
// Time duration of the code in seconds
|
// Time duration of the code in seconds
|
||||||
'codeDurationTime'=>300,
|
'codeDurationTime' => 300,
|
||||||
'enabled'=>true
|
'enabled' => true
|
||||||
],
|
],
|
||||||
'sms'=>[
|
'sms' => [
|
||||||
'class'=>\Da\User\Validator\TwoFactorTextMessageValidator::class,
|
'class' => \Da\User\Validator\TwoFactorTextMessageValidator::class,
|
||||||
'description'=>Yii::t('usuario', 'Text message'),
|
'description' => Yii::t('usuario', 'Text message'),
|
||||||
'configurationUrl'=>'user/settings/two-factor-sms',
|
'configurationUrl' => 'user/settings/two-factor-sms',
|
||||||
// component for sending sms
|
// component for sending sms
|
||||||
'smsSender'=>'smsSender',
|
'smsSender' => 'smsSender',
|
||||||
// Time duration of the code in seconds
|
// Time duration of the code in seconds
|
||||||
'codeDurationTime'=>300,
|
'codeDurationTime' => 300,
|
||||||
'enabled'=>true
|
'enabled' => true
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
$app->getModule('user')->twoFactorAuthenticationValidators = ArrayHelper::merge(
|
$app->getModule('user')->twoFactorAuthenticationValidators = ArrayHelper::merge(
|
||||||
$defaultTwoFactorAuthenticationValidators, $app->getModule('user')->twoFactorAuthenticationValidators);
|
$defaultTwoFactorAuthenticationValidators,
|
||||||
|
$app->getModule('user')->twoFactorAuthenticationValidators
|
||||||
|
);
|
||||||
|
|
||||||
if ($app instanceof WebApplication) {
|
if ($app instanceof WebApplication) {
|
||||||
// override Yii
|
// override Yii
|
||||||
@ -208,11 +210,6 @@ class Bootstrap implements BootstrapInterface
|
|||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
die($e);
|
die($e);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -357,6 +357,7 @@ class AdminController extends Controller
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Display list session history
|
* Display list session history
|
||||||
|
* @param mixed $id
|
||||||
*/
|
*/
|
||||||
public function actionSessionHistory($id)
|
public function actionSessionHistory($id)
|
||||||
{
|
{
|
||||||
@ -376,6 +377,7 @@ class AdminController extends Controller
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Terminate all session user
|
* Terminate all session user
|
||||||
|
* @param mixed $id
|
||||||
*/
|
*/
|
||||||
public function actionTerminateSessions($id)
|
public function actionTerminateSessions($id)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* This file is part of the 2amigos/yii2-usuario project.
|
* This file is part of the 2amigos/yii2-usuario project.
|
||||||
*
|
*
|
||||||
* (c) 2amigOS! <http://2amigos.us/>
|
* (c) 2amigOS! <http://2amigos.us/>
|
||||||
@ -15,6 +15,7 @@ use Da\User\Contracts\AuthClientInterface;
|
|||||||
use Da\User\Event\FormEvent;
|
use Da\User\Event\FormEvent;
|
||||||
use Da\User\Event\UserEvent;
|
use Da\User\Event\UserEvent;
|
||||||
use Da\User\Form\LoginForm;
|
use Da\User\Form\LoginForm;
|
||||||
|
use Da\User\Model\User;
|
||||||
use Da\User\Query\SocialNetworkAccountQuery;
|
use Da\User\Query\SocialNetworkAccountQuery;
|
||||||
use Da\User\Service\SocialNetworkAccountConnectService;
|
use Da\User\Service\SocialNetworkAccountConnectService;
|
||||||
use Da\User\Service\SocialNetworkAuthenticateService;
|
use Da\User\Service\SocialNetworkAuthenticateService;
|
||||||
@ -22,7 +23,6 @@ use Da\User\Traits\ContainerAwareTrait;
|
|||||||
use Da\User\Traits\ModuleAwareTrait;
|
use Da\User\Traits\ModuleAwareTrait;
|
||||||
use Da\User\Validator\TwoFactorEmailValidator;
|
use Da\User\Validator\TwoFactorEmailValidator;
|
||||||
use Da\User\Validator\TwoFactorTextMessageValidator;
|
use Da\User\Validator\TwoFactorTextMessageValidator;
|
||||||
use Da\User\Model\User;
|
|
||||||
use Yii;
|
use Yii;
|
||||||
use yii\authclient\AuthAction;
|
use yii\authclient\AuthAction;
|
||||||
use yii\base\InvalidConfigException;
|
use yii\base\InvalidConfigException;
|
||||||
@ -30,10 +30,10 @@ use yii\base\InvalidParamException;
|
|||||||
use yii\base\Module;
|
use yii\base\Module;
|
||||||
use yii\filters\AccessControl;
|
use yii\filters\AccessControl;
|
||||||
use yii\filters\VerbFilter;
|
use yii\filters\VerbFilter;
|
||||||
|
use yii\helpers\ArrayHelper;
|
||||||
use yii\web\Controller;
|
use yii\web\Controller;
|
||||||
use yii\web\Response;
|
use yii\web\Response;
|
||||||
use yii\widgets\ActiveForm;
|
use yii\widgets\ActiveForm;
|
||||||
use yii\helpers\ArrayHelper;
|
|
||||||
|
|
||||||
class SecurityController extends Controller
|
class SecurityController extends Controller
|
||||||
{
|
{
|
||||||
@ -216,24 +216,22 @@ class SecurityController extends Controller
|
|||||||
|
|
||||||
return $this->goBack();
|
return $this->goBack();
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$module = Yii::$app->getModule('user');
|
$module = Yii::$app->getModule('user');
|
||||||
$validators = $module->twoFactorAuthenticationValidators;
|
$validators = $module->twoFactorAuthenticationValidators;
|
||||||
$credentials=Yii::$app->session->get('credentials');
|
$credentials = Yii::$app->session->get('credentials');
|
||||||
$login= $credentials['login'];
|
$login = $credentials['login'];
|
||||||
$user = User::findOne(['email'=>$login]);
|
$user = User::findOne(['email' => $login]);
|
||||||
if( $user==null){
|
if ($user == null) {
|
||||||
$user = User::findOne(['username'=>$login]);
|
$user = User::findOne(['username' => $login]);
|
||||||
}
|
}
|
||||||
$tfType = $user->getAuthTfType();
|
$tfType = $user->getAuthTfType();
|
||||||
|
|
||||||
$class = ArrayHelper::getValue($validators,$tfType.'.class');
|
$class = ArrayHelper::getValue($validators, $tfType.'.class');
|
||||||
$object = $this
|
$object = $this
|
||||||
->make($class, [$user, null, $this->module->twoFactorAuthenticationCycles]);
|
->make($class, [$user, null, $this->module->twoFactorAuthenticationCycles]);
|
||||||
|
|
||||||
$object->generateCode();
|
$object->generateCode();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->render(
|
return $this->render(
|
||||||
@ -273,5 +271,4 @@ class SecurityController extends Controller
|
|||||||
|
|
||||||
$this->make(SocialNetworkAccountConnectService::class, [$this, $client])->run();
|
$this->make(SocialNetworkAccountConnectService::class, [$this, $client])->run();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* This file is part of the 2amigos/yii2-usuario project.
|
* This file is part of the 2amigos/yii2-usuario project.
|
||||||
*
|
*
|
||||||
* (c) 2amigOS! <http://2amigos.us/>
|
* (c) 2amigOS! <http://2amigos.us/>
|
||||||
@ -29,8 +29,8 @@ use Da\User\Query\UserQuery;
|
|||||||
use Da\User\Search\SessionHistorySearch;
|
use Da\User\Search\SessionHistorySearch;
|
||||||
use Da\User\Service\EmailChangeService;
|
use Da\User\Service\EmailChangeService;
|
||||||
use Da\User\Service\SessionHistory\TerminateUserSessionsService;
|
use Da\User\Service\SessionHistory\TerminateUserSessionsService;
|
||||||
use Da\User\Service\TwoFactorQrCodeUriGeneratorService;
|
|
||||||
use Da\User\Service\TwoFactorEmailCodeGeneratorService;
|
use Da\User\Service\TwoFactorEmailCodeGeneratorService;
|
||||||
|
use Da\User\Service\TwoFactorQrCodeUriGeneratorService;
|
||||||
use Da\User\Service\TwoFactorSmsCodeGeneratorService;
|
use Da\User\Service\TwoFactorSmsCodeGeneratorService;
|
||||||
use Da\User\Traits\ContainerAwareTrait;
|
use Da\User\Traits\ContainerAwareTrait;
|
||||||
use Da\User\Traits\ModuleAwareTrait;
|
use Da\User\Traits\ModuleAwareTrait;
|
||||||
@ -453,7 +453,7 @@ class SettingsController extends Controller
|
|||||||
|
|
||||||
public function actionTwoFactor($id)
|
public function actionTwoFactor($id)
|
||||||
{
|
{
|
||||||
$choice=Yii::$app->request->post('choice');
|
$choice = Yii::$app->request->post('choice');
|
||||||
/** @var User $user */
|
/** @var User $user */
|
||||||
$user = $this->userQuery->whereId($id)->one();
|
$user = $this->userQuery->whereId($id)->one();
|
||||||
|
|
||||||
@ -470,7 +470,7 @@ class SettingsController extends Controller
|
|||||||
return $this->renderAjax('two-factor-email', ['id' => $id, 'code' => $emailCode]);
|
return $this->renderAjax('two-factor-email', ['id' => $id, 'code' => $emailCode]);
|
||||||
case 'sms':
|
case 'sms':
|
||||||
// get mobile phone, if exists
|
// get mobile phone, if exists
|
||||||
$mobilePhone=$user->getAuthTfMobilePhone();
|
$mobilePhone = $user->getAuthTfMobilePhone();
|
||||||
$smsCode = $this->make(TwoFactorSmsCodeGeneratorService::class, [$user])->run();
|
$smsCode = $this->make(TwoFactorSmsCodeGeneratorService::class, [$user])->run();
|
||||||
return $this->renderAjax('two-factor-sms', ['id' => $id, 'code' => $smsCode, 'mobilePhone' => $mobilePhone]);
|
return $this->renderAjax('two-factor-sms', ['id' => $id, 'code' => $smsCode, 'mobilePhone' => $mobilePhone]);
|
||||||
}
|
}
|
||||||
@ -564,6 +564,41 @@ class SettingsController extends Controller
|
|||||||
return $this->redirect(['session-history']);
|
return $this->redirect(['session-history']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function actionTwoFactorMobilePhone($id)
|
||||||
|
{
|
||||||
|
Yii::$app->response->format = Response::FORMAT_JSON;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @var User $user
|
||||||
|
*/
|
||||||
|
$user = $this->userQuery->whereId($id)->one();
|
||||||
|
|
||||||
|
if (null === $user) {
|
||||||
|
return [
|
||||||
|
'success' => false,
|
||||||
|
'message' => Yii::t('usuario', 'User not found.')
|
||||||
|
];
|
||||||
|
}
|
||||||
|
$mobilePhone = Yii::$app->request->get('mobilephone');
|
||||||
|
$currentMobilePhone = $user->getAuthTfMobilePhone();
|
||||||
|
$success = false;
|
||||||
|
if ($currentMobilePhone == $mobilePhone) {
|
||||||
|
$success = true;
|
||||||
|
} else {
|
||||||
|
$success = $user->updateAttributes(['auth_tf_mobile_phone' => $mobilePhone]);
|
||||||
|
$success = $success && $this->make(TwoFactorSmsCodeGeneratorService::class, [$user])->run();
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'success' => $success,
|
||||||
|
'message' => $success
|
||||||
|
? Yii::t('usuario', 'Mobile phone number successfully enabled.')
|
||||||
|
: Yii::t('usuario', 'Error while enabling SMS two factor authentication. Please reload the page.'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $id
|
* @param $id
|
||||||
* @throws ForbiddenHttpException
|
* @throws ForbiddenHttpException
|
||||||
@ -593,39 +628,4 @@ class SettingsController extends Controller
|
|||||||
$account->delete();
|
$account->delete();
|
||||||
$this->trigger(SocialNetworkConnectEvent::EVENT_AFTER_DISCONNECT, $event);
|
$this->trigger(SocialNetworkConnectEvent::EVENT_AFTER_DISCONNECT, $event);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionTwoFactorMobilePhone($id)
|
|
||||||
{
|
|
||||||
Yii::$app->response->format = Response::FORMAT_JSON;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @var User $user
|
|
||||||
*/
|
|
||||||
$user = $this->userQuery->whereId($id)->one();
|
|
||||||
|
|
||||||
if (null === $user) {
|
|
||||||
return [
|
|
||||||
'success' => false,
|
|
||||||
'message' => Yii::t('usuario', 'User not found.')
|
|
||||||
];
|
|
||||||
}
|
|
||||||
$mobilePhone = Yii::$app->request->get('mobilephone');
|
|
||||||
$currentMobilePhone = $user->getAuthTfMobilePhone();
|
|
||||||
$success=false;
|
|
||||||
if ($currentMobilePhone==$mobilePhone) {
|
|
||||||
$success=true;
|
|
||||||
} else {
|
|
||||||
$success = $user->updateAttributes(['auth_tf_mobile_phone' => $mobilePhone]);
|
|
||||||
$success = $success && $this->make(TwoFactorSmsCodeGeneratorService::class, [$user])->run();
|
|
||||||
}
|
|
||||||
|
|
||||||
return [
|
|
||||||
'success' => $success,
|
|
||||||
'message' => $success
|
|
||||||
? Yii::t('usuario', 'Mobile phone number successfully enabled.')
|
|
||||||
: Yii::t('usuario', 'Error while enabling SMS two factor authentication. Please reload the page.'),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -115,7 +115,7 @@ class MailFactory
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param User $user
|
* @param User $user
|
||||||
* @param String $code
|
* @param String $code
|
||||||
*
|
*
|
||||||
* @throws InvalidConfigException
|
* @throws InvalidConfigException
|
||||||
|
|||||||
@ -13,10 +13,9 @@ namespace Da\User\Filter;
|
|||||||
|
|
||||||
use Da\User\Model\User;
|
use Da\User\Model\User;
|
||||||
use Da\User\Module;
|
use Da\User\Module;
|
||||||
|
use Da\User\Traits\AuthManagerAwareTrait;
|
||||||
use Yii;
|
use Yii;
|
||||||
use yii\base\ActionFilter;
|
use yii\base\ActionFilter;
|
||||||
use Da\User\Traits\AuthManagerAwareTrait;
|
|
||||||
|
|
||||||
|
|
||||||
class TwoFactorAuthenticationEnforceFilter extends ActionFilter
|
class TwoFactorAuthenticationEnforceFilter extends ActionFilter
|
||||||
{
|
{
|
||||||
@ -40,9 +39,9 @@ class TwoFactorAuthenticationEnforceFilter extends ActionFilter
|
|||||||
|
|
||||||
$permissions = $module->twoFactorAuthenticationForcedPermissions;
|
$permissions = $module->twoFactorAuthenticationForcedPermissions;
|
||||||
$itemsByUser = array_keys($this->getAuthManager()->getItemsByUser(Yii::$app->user->identity->id));
|
$itemsByUser = array_keys($this->getAuthManager()->getItemsByUser(Yii::$app->user->identity->id));
|
||||||
if(!empty(array_intersect($permissions, $itemsByUser))){
|
if (!empty(array_intersect($permissions, $itemsByUser))) {
|
||||||
Yii::$app->session->setFlash('warning', Yii::t('usuario', 'Your role requires 2FA, you won\'t be able to use the application until you enable it'));
|
Yii::$app->session->setFlash('warning', Yii::t('usuario', 'Your role requires 2FA, you won\'t be able to use the application until you enable it'));
|
||||||
return Yii::$app->response->redirect(['/user/settings/account'])->send();
|
return Yii::$app->response->redirect(['/user/settings/account'])->send();
|
||||||
}
|
}
|
||||||
|
|
||||||
return parent::beforeAction($action);
|
return parent::beforeAction($action);
|
||||||
|
|||||||
@ -14,8 +14,8 @@ namespace Da\User\Form;
|
|||||||
use Da\User\Helper\SecurityHelper;
|
use Da\User\Helper\SecurityHelper;
|
||||||
use Da\User\Model\User;
|
use Da\User\Model\User;
|
||||||
use Da\User\Query\UserQuery;
|
use Da\User\Query\UserQuery;
|
||||||
use Da\User\Traits\ModuleAwareTrait;
|
|
||||||
use Da\User\Traits\ContainerAwareTrait;
|
use Da\User\Traits\ContainerAwareTrait;
|
||||||
|
use Da\User\Traits\ModuleAwareTrait;
|
||||||
use Da\User\Validator\TwoFactorCodeValidator;
|
use Da\User\Validator\TwoFactorCodeValidator;
|
||||||
use Da\User\Validator\TwoFactorEmailValidator;
|
use Da\User\Validator\TwoFactorEmailValidator;
|
||||||
use Da\User\Validator\TwoFactorTextMessageValidator;
|
use Da\User\Validator\TwoFactorTextMessageValidator;
|
||||||
@ -112,16 +112,15 @@ class LoginForm extends Model
|
|||||||
'twoFactorAuthenticationCodeValidate' => [
|
'twoFactorAuthenticationCodeValidate' => [
|
||||||
'twoFactorAuthenticationCode',
|
'twoFactorAuthenticationCode',
|
||||||
function ($attribute) {
|
function ($attribute) {
|
||||||
|
if ($this->user === null) {
|
||||||
if ($this->user === null ) {
|
|
||||||
$this->addError($attribute, Yii::t('usuario', 'Invalid two factor authentication code'));
|
$this->addError($attribute, Yii::t('usuario', 'Invalid two factor authentication code'));
|
||||||
}else{
|
} else {
|
||||||
$module = Yii::$app->getModule('user');
|
$module = Yii::$app->getModule('user');
|
||||||
$validators = $module->twoFactorAuthenticationValidators;
|
$validators = $module->twoFactorAuthenticationValidators;
|
||||||
$type = $this->user->auth_tf_type;
|
$type = $this->user->auth_tf_type;
|
||||||
$class = ArrayHelper::getValue($validators,$type.'.class');
|
$class = ArrayHelper::getValue($validators, $type.'.class');
|
||||||
$codeDurationTime = ArrayHelper::getValue($validators,$type.'.codeDurationTime', 300);
|
$codeDurationTime = ArrayHelper::getValue($validators, $type.'.codeDurationTime', 300);
|
||||||
$validator = $this
|
$validator = $this
|
||||||
->make($class, [$this->user, $this->twoFactorAuthenticationCode, $this->module->twoFactorAuthenticationCycles]);
|
->make($class, [$this->user, $this->twoFactorAuthenticationCode, $this->module->twoFactorAuthenticationCycles]);
|
||||||
$success = $validator->validate();
|
$success = $validator->validate();
|
||||||
if (!$success) {
|
if (!$success) {
|
||||||
|
|||||||
@ -14,7 +14,6 @@ namespace Da\User\Migration\Session;
|
|||||||
use Da\User\Helper\MigrationHelper;
|
use Da\User\Helper\MigrationHelper;
|
||||||
use yii\db\Migration;
|
use yii\db\Migration;
|
||||||
|
|
||||||
|
|
||||||
class m000000_000001_create_session_history_table extends Migration
|
class m000000_000001_create_session_history_table extends Migration
|
||||||
{
|
{
|
||||||
const SESSION_HISTORY_TABLE = '{{%session_history}}';
|
const SESSION_HISTORY_TABLE = '{{%session_history}}';
|
||||||
|
|||||||
@ -1,5 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the 2amigos/yii2-usuario project.
|
||||||
|
*
|
||||||
|
* (c) 2amigOS! <http://2amigos.us/>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view
|
||||||
|
* the LICENSE file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
namespace Da\User\Migration;
|
namespace Da\User\Migration;
|
||||||
|
|
||||||
use yii\db\Migration;
|
use yii\db\Migration;
|
||||||
@ -16,7 +25,6 @@ class m000000_000010_add_auth_tf_type_auth_tf_mobile_phone_columns_to_user_table
|
|||||||
{
|
{
|
||||||
$this->addColumn('{{%user}}', 'auth_tf_type', $this->string(20)->after('auth_tf_enabled')->null());
|
$this->addColumn('{{%user}}', 'auth_tf_type', $this->string(20)->after('auth_tf_enabled')->null());
|
||||||
$this->addColumn('{{%user}}', 'auth_tf_mobile_phone', $this->string(20)->after('auth_tf_type')->null());
|
$this->addColumn('{{%user}}', 'auth_tf_mobile_phone', $this->string(20)->after('auth_tf_type')->null());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -16,16 +16,16 @@ use Da\User\Query\SessionHistoryQuery;
|
|||||||
use Da\User\Traits\ModuleAwareTrait;
|
use Da\User\Traits\ModuleAwareTrait;
|
||||||
use Yii;
|
use Yii;
|
||||||
use yii\behaviors\TimestampBehavior;
|
use yii\behaviors\TimestampBehavior;
|
||||||
use yii\db\ActiveRecord;
|
|
||||||
use yii\db\ActiveQuery;
|
use yii\db\ActiveQuery;
|
||||||
|
use yii\db\ActiveRecord;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @property int $user_id
|
* @property int $user_id
|
||||||
* @property string $session_id
|
* @property string $session_id
|
||||||
* @property string $user_agent
|
* @property string $user_agent
|
||||||
* @property string $ip
|
* @property string $ip
|
||||||
* @property int $created_at
|
* @property int $created_at
|
||||||
* @property int $updated_at
|
* @property int $updated_at
|
||||||
*
|
*
|
||||||
* @property User $user
|
* @property User $user
|
||||||
* @property bool $isActive
|
* @property bool $isActive
|
||||||
|
|||||||
@ -36,30 +36,30 @@ use yii\web\IdentityInterface;
|
|||||||
* @property bool $gdpr_consent whether user has consent personal data processing
|
* @property bool $gdpr_consent whether user has consent personal data processing
|
||||||
*
|
*
|
||||||
* Database fields:
|
* Database fields:
|
||||||
* @property int $id
|
* @property int $id
|
||||||
* @property string $username
|
* @property string $username
|
||||||
* @property string $email
|
* @property string $email
|
||||||
* @property string $unconfirmed_email
|
* @property string $unconfirmed_email
|
||||||
* @property string $password_hash
|
* @property string $password_hash
|
||||||
* @property string $auth_key
|
* @property string $auth_key
|
||||||
* @property string $auth_tf_key
|
* @property string $auth_tf_key
|
||||||
* @property int $auth_tf_enabled
|
* @property int $auth_tf_enabled
|
||||||
* @property string $auth_tf_type
|
* @property string $auth_tf_type
|
||||||
* @property string $auth_tf_mobile_phone
|
* @property string $auth_tf_mobile_phone
|
||||||
* @property string $registration_ip
|
* @property string $registration_ip
|
||||||
* @property int $confirmed_at
|
* @property int $confirmed_at
|
||||||
* @property int $blocked_at
|
* @property int $blocked_at
|
||||||
* @property int $flags
|
* @property int $flags
|
||||||
* @property int $created_at
|
* @property int $created_at
|
||||||
* @property int $updated_at
|
* @property int $updated_at
|
||||||
* @property int $last_login_at
|
* @property int $last_login_at
|
||||||
* @property int $gdpr_consent_date date of agreement of data processing
|
* @property int $gdpr_consent_date date of agreement of data processing
|
||||||
* @property string $last_login_ip
|
* @property string $last_login_ip
|
||||||
* @property int $password_changed_at
|
* @property int $password_changed_at
|
||||||
* @property int $password_age
|
* @property int $password_age
|
||||||
* Defined relations:
|
* Defined relations:
|
||||||
* @property SocialNetworkAccount[] $socialNetworkAccounts
|
* @property SocialNetworkAccount[] $socialNetworkAccounts
|
||||||
* @property Profile $profile
|
* @property Profile $profile
|
||||||
*/
|
*/
|
||||||
class User extends ActiveRecord implements IdentityInterface
|
class User extends ActiveRecord implements IdentityInterface
|
||||||
{
|
{
|
||||||
|
|||||||
@ -24,17 +24,17 @@ class Module extends BaseModule
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var bool Enable the 'session history' function
|
* @var bool Enable the 'session history' function
|
||||||
* Using with {@see SessionHistoryDecorator}
|
* Using with {@see SessionHistoryDecorator}
|
||||||
*/
|
*/
|
||||||
public $enableSessionHistory = false;
|
public $enableSessionHistory = false;
|
||||||
/**
|
/**
|
||||||
* @var int|bool The number of 'session history' records will be stored for user
|
* @var int|bool The number of 'session history' records will be stored for user
|
||||||
* if equals false records will not be deleted
|
* if equals false records will not be deleted
|
||||||
*/
|
*/
|
||||||
public $numberSessionHistory = false;
|
public $numberSessionHistory = false;
|
||||||
/**
|
/**
|
||||||
* @var int|bool The time after which the expired 'session history' will be deleted
|
* @var int|bool The time after which the expired 'session history' will be deleted
|
||||||
* if equals false records will not be deleted
|
* if equals false records will not be deleted
|
||||||
*/
|
*/
|
||||||
public $timeoutSessionHistory = false;
|
public $timeoutSessionHistory = false;
|
||||||
/**
|
/**
|
||||||
@ -96,9 +96,9 @@ class Module extends BaseModule
|
|||||||
* @var bool whether to enable two factor authentication or not
|
* @var bool whether to enable two factor authentication or not
|
||||||
*/
|
*/
|
||||||
public $enableTwoFactorAuthentication = false;
|
public $enableTwoFactorAuthentication = false;
|
||||||
/**
|
/**
|
||||||
* @var array list of permissions for which two factor authentication is mandatory
|
* @var array list of permissions for which two factor authentication is mandatory
|
||||||
*/
|
*/
|
||||||
public $twoFactorAuthenticationForcedPermissions = [];
|
public $twoFactorAuthenticationForcedPermissions = [];
|
||||||
/**
|
/**
|
||||||
* @var array list of channels for two factor authentication availables
|
* @var array list of channels for two factor authentication availables
|
||||||
|
|||||||
@ -12,8 +12,8 @@
|
|||||||
namespace Da\User\Query;
|
namespace Da\User\Query;
|
||||||
|
|
||||||
use Da\User\Traits\ModuleAwareTrait;
|
use Da\User\Traits\ModuleAwareTrait;
|
||||||
use yii\web\Session;
|
|
||||||
use Yii;
|
use Yii;
|
||||||
|
use yii\web\Session;
|
||||||
|
|
||||||
class SessionHistoryCondition
|
class SessionHistoryCondition
|
||||||
{
|
{
|
||||||
|
|||||||
@ -12,8 +12,8 @@
|
|||||||
namespace Da\User\Query;
|
namespace Da\User\Query;
|
||||||
|
|
||||||
use Da\User\Traits\ModuleAwareTrait;
|
use Da\User\Traits\ModuleAwareTrait;
|
||||||
use yii\db\ActiveQuery;
|
|
||||||
use Yii;
|
use Yii;
|
||||||
|
use yii\db\ActiveQuery;
|
||||||
|
|
||||||
class SessionHistoryQuery extends ActiveQuery
|
class SessionHistoryQuery extends ActiveQuery
|
||||||
{
|
{
|
||||||
@ -34,7 +34,6 @@ class SessionHistoryQuery extends ActiveQuery
|
|||||||
return $this->andWhere($this->getCondition()->inactive($userId));
|
return $this->andWhere($this->getCondition()->inactive($userId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function whereExpired($userId)
|
public function whereExpired($userId)
|
||||||
{
|
{
|
||||||
return $this->andWhere($this->getCondition()->expired($userId));
|
return $this->andWhere($this->getCondition()->expired($userId));
|
||||||
|
|||||||
@ -17,7 +17,6 @@ use yii\base\InvalidConfigException;
|
|||||||
use yii\base\InvalidParamException;
|
use yii\base\InvalidParamException;
|
||||||
use yii\data\ActiveDataProvider;
|
use yii\data\ActiveDataProvider;
|
||||||
|
|
||||||
|
|
||||||
class SessionHistorySearch extends SessionHistory
|
class SessionHistorySearch extends SessionHistory
|
||||||
{
|
{
|
||||||
use ContainerAwareTrait;
|
use ContainerAwareTrait;
|
||||||
|
|||||||
@ -11,7 +11,6 @@
|
|||||||
|
|
||||||
namespace Da\User\Service\SessionHistory;
|
namespace Da\User\Service\SessionHistory;
|
||||||
|
|
||||||
|
|
||||||
use yii\web\DbSession;
|
use yii\web\DbSession;
|
||||||
|
|
||||||
class DBTerminateSessionsService implements TerminateSessionsServiceInterface
|
class DBTerminateSessionsService implements TerminateSessionsServiceInterface
|
||||||
|
|||||||
@ -16,9 +16,9 @@ use Da\User\Query\SessionHistoryCondition;
|
|||||||
use Da\User\Query\SessionHistoryQuery;
|
use Da\User\Query\SessionHistoryQuery;
|
||||||
use Da\User\Traits\ModuleAwareTrait;
|
use Da\User\Traits\ModuleAwareTrait;
|
||||||
use Yii;
|
use Yii;
|
||||||
|
use yii\base\InvalidArgumentException as BaseInvalidArgumentException;
|
||||||
use yii\db\Exception;
|
use yii\db\Exception;
|
||||||
use yii\web\Session;
|
use yii\web\Session;
|
||||||
use yii\base\InvalidArgumentException as BaseInvalidArgumentException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decorator for the {@see Session} class for storing the 'session history'
|
* Decorator for the {@see Session} class for storing the 'session history'
|
||||||
@ -255,7 +255,6 @@ class SessionHistoryDecorator extends Session
|
|||||||
return $result;
|
return $result;
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @inheritdoc */
|
/** @inheritdoc */
|
||||||
@ -404,9 +403,9 @@ class SessionHistoryDecorator extends Session
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $id
|
* @param string $id
|
||||||
* @return bool
|
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function unbindSessionHistory($id)
|
protected function unbindSessionHistory($id)
|
||||||
{
|
{
|
||||||
@ -419,9 +418,9 @@ class SessionHistoryDecorator extends Session
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param int $userId
|
* @param int $userId
|
||||||
* @return bool
|
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function displacementHistory($userId)
|
protected function displacementHistory($userId)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -11,7 +11,6 @@
|
|||||||
|
|
||||||
namespace Da\User\Service\SessionHistory;
|
namespace Da\User\Service\SessionHistory;
|
||||||
|
|
||||||
|
|
||||||
class TerminateSessionsService implements TerminateSessionsServiceInterface
|
class TerminateSessionsService implements TerminateSessionsServiceInterface
|
||||||
{
|
{
|
||||||
protected $sessionIds;
|
protected $sessionIds;
|
||||||
|
|||||||
@ -11,7 +11,6 @@
|
|||||||
|
|
||||||
namespace Da\User\Service\SessionHistory;
|
namespace Da\User\Service\SessionHistory;
|
||||||
|
|
||||||
|
|
||||||
use Da\User\Contracts\ServiceInterface;
|
use Da\User\Contracts\ServiceInterface;
|
||||||
|
|
||||||
interface TerminateSessionsServiceInterface extends ServiceInterface
|
interface TerminateSessionsServiceInterface extends ServiceInterface
|
||||||
|
|||||||
@ -11,15 +11,14 @@
|
|||||||
|
|
||||||
namespace Da\User\Service\SessionHistory;
|
namespace Da\User\Service\SessionHistory;
|
||||||
|
|
||||||
|
|
||||||
use Da\User\Contracts\ServiceInterface;
|
use Da\User\Contracts\ServiceInterface;
|
||||||
use Da\User\Event\SessionEvent;
|
use Da\User\Event\SessionEvent;
|
||||||
use Da\User\Model\SessionHistory;
|
use Da\User\Model\SessionHistory;
|
||||||
use Da\User\Model\User;
|
use Da\User\Model\User;
|
||||||
use Da\User\Traits\ContainerAwareTrait;
|
use Da\User\Traits\ContainerAwareTrait;
|
||||||
use Da\User\Traits\ModuleAwareTrait;
|
use Da\User\Traits\ModuleAwareTrait;
|
||||||
use yii\web\Session;
|
|
||||||
use Yii;
|
use Yii;
|
||||||
|
use yii\web\Session;
|
||||||
|
|
||||||
class TerminateUserSessionsService implements ServiceInterface
|
class TerminateUserSessionsService implements ServiceInterface
|
||||||
{
|
{
|
||||||
@ -68,7 +67,7 @@ class TerminateUserSessionsService implements ServiceInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int $userId
|
* @param int $userId
|
||||||
* @return User
|
* @return User
|
||||||
*/
|
*/
|
||||||
protected function getUser($userId)
|
protected function getUser($userId)
|
||||||
|
|||||||
@ -13,9 +13,8 @@ namespace Da\User\Service;
|
|||||||
|
|
||||||
use Da\TwoFA\Manager;
|
use Da\TwoFA\Manager;
|
||||||
use Da\User\Contracts\ServiceInterface;
|
use Da\User\Contracts\ServiceInterface;
|
||||||
use Da\User\Model\User;
|
|
||||||
use Da\User\Factory\MailFactory;
|
use Da\User\Factory\MailFactory;
|
||||||
|
use Da\User\Model\User;
|
||||||
use Yii;
|
use Yii;
|
||||||
|
|
||||||
class TwoFactorEmailCodeGeneratorService implements ServiceInterface
|
class TwoFactorEmailCodeGeneratorService implements ServiceInterface
|
||||||
@ -51,14 +50,14 @@ class TwoFactorEmailCodeGeneratorService implements ServiceInterface
|
|||||||
// send email
|
// send email
|
||||||
$mailService = MailFactory::makeTwoFactorCodeMailerService($user, $code);
|
$mailService = MailFactory::makeTwoFactorCodeMailerService($user, $code);
|
||||||
// check the sending emailYii::t(
|
// check the sending emailYii::t(
|
||||||
if(!$mailService->run()){
|
if (!$mailService->run()) {
|
||||||
Yii::$app->session->addFlash('error', Yii::t('usuario','The email sending failed, please check your configuration.'));
|
Yii::$app->session->addFlash('error', Yii::t('usuario', 'The email sending failed, please check your configuration.'));
|
||||||
return false;
|
return false;
|
||||||
}else{
|
|
||||||
// put key in session
|
|
||||||
Yii::$app->session->set("email_code_time", date('Y-m-d H:i:s'));
|
|
||||||
Yii::$app->session->set("email_code", $code);
|
|
||||||
}
|
}
|
||||||
|
// put key in session
|
||||||
|
Yii::$app->session->set("email_code_time", date('Y-m-d H:i:s'));
|
||||||
|
Yii::$app->session->set("email_code", $code);
|
||||||
|
|
||||||
return $code;
|
return $code;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,13 +13,12 @@ namespace Da\User\Service;
|
|||||||
|
|
||||||
use Da\TwoFA\Manager;
|
use Da\TwoFA\Manager;
|
||||||
use Da\User\Contracts\ServiceInterface;
|
use Da\User\Contracts\ServiceInterface;
|
||||||
use Da\User\Model\User;
|
|
||||||
use Da\User\Factory\MailFactory;
|
use Da\User\Factory\MailFactory;
|
||||||
use yii\di\Instance;
|
use Da\User\Model\User;
|
||||||
use yetopen\smssender\SmsSenderInterface;
|
use yetopen\smssender\SmsSenderInterface;
|
||||||
use yii\helpers\ArrayHelper;
|
|
||||||
|
|
||||||
use Yii;
|
use Yii;
|
||||||
|
use yii\di\Instance;
|
||||||
|
use yii\helpers\ArrayHelper;
|
||||||
|
|
||||||
class TwoFactorSmsCodeGeneratorService implements ServiceInterface
|
class TwoFactorSmsCodeGeneratorService implements ServiceInterface
|
||||||
{
|
{
|
||||||
@ -49,7 +48,7 @@ class TwoFactorSmsCodeGeneratorService implements ServiceInterface
|
|||||||
$this->type = 'sms';
|
$this->type = 'sms';
|
||||||
$module = Yii::$app->getModule('user');
|
$module = Yii::$app->getModule('user');
|
||||||
$validators = $module->twoFactorAuthenticationValidators;
|
$validators = $module->twoFactorAuthenticationValidators;
|
||||||
$smsSender = ArrayHelper::getValue($validators,'sms'.'.smsSender');
|
$smsSender = ArrayHelper::getValue($validators, 'sms'.'.smsSender');
|
||||||
$this->smsSender = Instance::ensure($smsSender, SmsSenderInterface::class);
|
$this->smsSender = Instance::ensure($smsSender, SmsSenderInterface::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,19 +62,19 @@ class TwoFactorSmsCodeGeneratorService implements ServiceInterface
|
|||||||
$code = str_pad($code, 6, 0, STR_PAD_LEFT);
|
$code = str_pad($code, 6, 0, STR_PAD_LEFT);
|
||||||
// get the mobile phone of the user
|
// get the mobile phone of the user
|
||||||
$user = $this->user;
|
$user = $this->user;
|
||||||
$mobilePhone=$user->getAuthTfMobilePhone();
|
$mobilePhone = $user->getAuthTfMobilePhone();
|
||||||
|
|
||||||
if( null===$mobilePhone || $mobilePhone=='' ){
|
if (null === $mobilePhone || $mobilePhone == '') {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// send sms
|
// send sms
|
||||||
$success = $this->smsSender->send($mobilePhone, $code);
|
$success = $this->smsSender->send($mobilePhone, $code);
|
||||||
if($success){
|
if ($success) {
|
||||||
// put key in session
|
// put key in session
|
||||||
Yii::$app->session->set("sms_code_time", date('Y-m-d H:i:s'));
|
Yii::$app->session->set("sms_code_time", date('Y-m-d H:i:s'));
|
||||||
Yii::$app->session->set("sms_code", $code);
|
Yii::$app->session->set("sms_code", $code);
|
||||||
}else{
|
} else {
|
||||||
Yii::$app->session->addFlash('error', Yii::t('usuario','The sms sending failed, please check your configuration.'));
|
Yii::$app->session->addFlash('error', Yii::t('usuario', 'The sms sending failed, please check your configuration.'));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -15,8 +15,8 @@ use Da\TwoFA\Exception\InvalidSecretKeyException;
|
|||||||
use Da\TwoFA\Manager;
|
use Da\TwoFA\Manager;
|
||||||
use Da\User\Contracts\ValidatorInterface;
|
use Da\User\Contracts\ValidatorInterface;
|
||||||
use Da\User\Model\User;
|
use Da\User\Model\User;
|
||||||
use Da\User\Traits\ContainerAwareTrait;
|
|
||||||
use Da\User\Service\TwoFactorQrCodeUriGeneratorService;
|
use Da\User\Service\TwoFactorQrCodeUriGeneratorService;
|
||||||
|
use Da\User\Traits\ContainerAwareTrait;
|
||||||
use Yii;
|
use Yii;
|
||||||
|
|
||||||
class TwoFactorCodeValidator implements ValidatorInterface
|
class TwoFactorCodeValidator implements ValidatorInterface
|
||||||
@ -61,18 +61,19 @@ class TwoFactorCodeValidator implements ValidatorInterface
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function getSuccessMessage()
|
public function getSuccessMessage()
|
||||||
{
|
{
|
||||||
return Yii::t('usuario', 'Two factor authentication successfully enabled.');
|
return Yii::t('usuario', 'Two factor authentication successfully enabled.');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
|
||||||
*
|
*
|
||||||
|
* @param mixed $codeDurationTime
|
||||||
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getUnsuccessMessage($codeDurationTime)
|
public function getUnsuccessMessage($codeDurationTime)
|
||||||
{
|
{
|
||||||
@ -80,20 +81,21 @@ class TwoFactorCodeValidator implements ValidatorInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
|
||||||
*
|
*
|
||||||
|
* @param mixed $codeDurationTime
|
||||||
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getUnsuccessLoginMessage($codeDurationTime)
|
public function getUnsuccessLoginMessage($codeDurationTime)
|
||||||
{
|
{
|
||||||
return Yii::t('usuario', 'Verification failed. Please, enter new code.');
|
return Yii::t('usuario', 'Verification failed. Please, enter new code.');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function generateCode()
|
public function generateCode()
|
||||||
{
|
{
|
||||||
return $this->make(TwoFactorQrCodeUriGeneratorService::class,[$this->user])->run();
|
return $this->make(TwoFactorQrCodeUriGeneratorService::class, [$this->user])->run();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,11 +13,10 @@ namespace Da\User\Validator;
|
|||||||
|
|
||||||
use Da\TwoFA\Exception\InvalidSecretKeyException;
|
use Da\TwoFA\Exception\InvalidSecretKeyException;
|
||||||
use Da\User\Model\User;
|
use Da\User\Model\User;
|
||||||
|
use Da\User\Service\TwoFactorEmailCodeGeneratorService;
|
||||||
|
use Da\User\Traits\ContainerAwareTrait;
|
||||||
use Yii;
|
use Yii;
|
||||||
use yii\helpers\ArrayHelper;
|
use yii\helpers\ArrayHelper;
|
||||||
use Da\User\Traits\ContainerAwareTrait;
|
|
||||||
use Da\User\Service\TwoFactorEmailCodeGeneratorService;
|
|
||||||
|
|
||||||
|
|
||||||
class TwoFactorEmailValidator extends TwoFactorCodeValidator
|
class TwoFactorEmailValidator extends TwoFactorCodeValidator
|
||||||
{
|
{
|
||||||
@ -31,9 +30,9 @@ class TwoFactorEmailValidator extends TwoFactorCodeValidator
|
|||||||
/**
|
/**
|
||||||
* TwoFactorCodeValidator constructor.
|
* TwoFactorCodeValidator constructor.
|
||||||
*
|
*
|
||||||
* @param User $user
|
* @param User $user
|
||||||
* @param string $code
|
* @param string $code
|
||||||
* @param int $cycles
|
* @param int $cycles
|
||||||
*/
|
*/
|
||||||
public function __construct(User $user, $code, $cycles = 0)
|
public function __construct(User $user, $code, $cycles = 0)
|
||||||
{
|
{
|
||||||
@ -50,21 +49,22 @@ class TwoFactorEmailValidator extends TwoFactorCodeValidator
|
|||||||
*/
|
*/
|
||||||
public function validate()
|
public function validate()
|
||||||
{
|
{
|
||||||
if(is_null($this->code) || $this->code == '' )
|
if (is_null($this->code) || $this->code == '') {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
$emailCodeTime = new \DateTime(Yii::$app->session->get("email_code_time"));
|
$emailCodeTime = new \DateTime(Yii::$app->session->get("email_code_time"));
|
||||||
$currentTime = new \DateTime('now');
|
$currentTime = new \DateTime('now');
|
||||||
$interval = $currentTime->getTimestamp()-$emailCodeTime->getTimestamp();
|
$interval = $currentTime->getTimestamp() - $emailCodeTime->getTimestamp();
|
||||||
|
|
||||||
$module = Yii::$app->getModule('user');
|
$module = Yii::$app->getModule('user');
|
||||||
$validators = $module->twoFactorAuthenticationValidators;
|
$validators = $module->twoFactorAuthenticationValidators;
|
||||||
$codeDurationTime = ArrayHelper::getValue($validators,$this->type.'.codeDurationTime', 300);
|
$codeDurationTime = ArrayHelper::getValue($validators, $this->type.'.codeDurationTime', 300);
|
||||||
|
|
||||||
if($interval > $codeDurationTime ){
|
if ($interval > $codeDurationTime) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$emailCode = Yii::$app->session->get("email_code");
|
$emailCode = Yii::$app->session->get("email_code");
|
||||||
return $this->code==$emailCode;
|
return $this->code == $emailCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -86,29 +86,31 @@ class TwoFactorEmailValidator extends TwoFactorCodeValidator
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
|
||||||
*
|
*
|
||||||
|
* @param mixed $codeDurationTime
|
||||||
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getUnsuccessMessage($codeDurationTime)
|
public function getUnsuccessMessage($codeDurationTime)
|
||||||
{
|
{
|
||||||
return Yii::t('usuario', 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please close this window and repeat the enabling request.', [$codeDurationTime]);
|
return Yii::t('usuario', 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please close this window and repeat the enabling request.', [$codeDurationTime]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
*
|
||||||
*
|
* @param mixed $codeDurationTime
|
||||||
*/
|
* @return string
|
||||||
|
*/
|
||||||
public function getUnsuccessLoginMessage($codeDurationTime)
|
public function getUnsuccessLoginMessage($codeDurationTime)
|
||||||
{
|
{
|
||||||
return Yii::t('usuario', 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please click on \'Cancel\' and repeat the login request.', [$codeDurationTime]);
|
return Yii::t('usuario', 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please click on \'Cancel\' and repeat the login request.', [$codeDurationTime]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function generateCode()
|
public function generateCode()
|
||||||
{
|
{
|
||||||
return $this->make(TwoFactorEmailCodeGeneratorService::class,$this->user)->run();
|
return $this->make(TwoFactorEmailCodeGeneratorService::class, $this->user)->run();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,11 +13,10 @@ namespace Da\User\Validator;
|
|||||||
|
|
||||||
use Da\TwoFA\Exception\InvalidSecretKeyException;
|
use Da\TwoFA\Exception\InvalidSecretKeyException;
|
||||||
use Da\User\Model\User;
|
use Da\User\Model\User;
|
||||||
|
use Da\User\Service\TwoFactorSmsCodeGeneratorService;
|
||||||
|
use Da\User\Traits\ContainerAwareTrait;
|
||||||
use Yii;
|
use Yii;
|
||||||
use yii\helpers\ArrayHelper;
|
use yii\helpers\ArrayHelper;
|
||||||
use Da\User\Traits\ContainerAwareTrait;
|
|
||||||
use Da\User\Service\TwoFactorSmsCodeGeneratorService;
|
|
||||||
|
|
||||||
|
|
||||||
class TwoFactorTextMessageValidator extends TwoFactorCodeValidator
|
class TwoFactorTextMessageValidator extends TwoFactorCodeValidator
|
||||||
{
|
{
|
||||||
@ -51,20 +50,21 @@ class TwoFactorTextMessageValidator extends TwoFactorCodeValidator
|
|||||||
*/
|
*/
|
||||||
public function validate()
|
public function validate()
|
||||||
{
|
{
|
||||||
if(is_null($this->code) || $this->code == '' )
|
if (is_null($this->code) || $this->code == '') {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
$smsCodeTime = new \DateTime(Yii::$app->session->get("sms_code_time"));
|
$smsCodeTime = new \DateTime(Yii::$app->session->get("sms_code_time"));
|
||||||
$currentTime = new \DateTime('now');
|
$currentTime = new \DateTime('now');
|
||||||
$interval = $currentTime->getTimestamp()-$smsCodeTime->getTimestamp();
|
$interval = $currentTime->getTimestamp() - $smsCodeTime->getTimestamp();
|
||||||
$module = Yii::$app->getModule('user');
|
$module = Yii::$app->getModule('user');
|
||||||
$validators = $module->twoFactorAuthenticationValidators;
|
$validators = $module->twoFactorAuthenticationValidators;
|
||||||
$codeDurationTime = ArrayHelper::getValue($validators,$this->type.'.codeDurationTime', 300);
|
$codeDurationTime = ArrayHelper::getValue($validators, $this->type.'.codeDurationTime', 300);
|
||||||
|
|
||||||
if($interval > $codeDurationTime ){
|
if ($interval > $codeDurationTime) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$smsCode = Yii::$app->session->get("sms_code");
|
$smsCode = Yii::$app->session->get("sms_code");
|
||||||
return $this->code==$smsCode;
|
return $this->code == $smsCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -77,8 +77,9 @@ class TwoFactorTextMessageValidator extends TwoFactorCodeValidator
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
|
||||||
*
|
*
|
||||||
|
* @param mixed $codeDurationTime
|
||||||
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getUnsuccessMessage($codeDurationTime)
|
public function getUnsuccessMessage($codeDurationTime)
|
||||||
{
|
{
|
||||||
@ -86,21 +87,22 @@ class TwoFactorTextMessageValidator extends TwoFactorCodeValidator
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
|
||||||
*
|
*
|
||||||
|
* @param mixed $codeDurationTime
|
||||||
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getUnsuccessLoginMessage($codeDurationTime)
|
public function getUnsuccessLoginMessage($codeDurationTime)
|
||||||
{
|
{
|
||||||
return Yii::t('usuario', 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please click on \'Cancel\' and repeat the login request.', [$codeDurationTime]);
|
return Yii::t('usuario', 'Please, enter the right code. The code is valid for {0} seconds. If you want to get a new code, please click on \'Cancel\' and repeat the login request.', [$codeDurationTime]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function generateCode()
|
public function generateCode()
|
||||||
{
|
{
|
||||||
$object = $this->make(TwoFactorSmsCodeGeneratorService::class,[$this->user]);
|
$object = $this->make(TwoFactorSmsCodeGeneratorService::class, [$this->user]);
|
||||||
return $object->run();
|
return $object->run();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -69,6 +69,7 @@ class SessionStatusWidget extends Widget
|
|||||||
* Returns available auth items to be attached to the user.
|
* Returns available auth items to be attached to the user.
|
||||||
*
|
*
|
||||||
* @param int|null type of auth items or null to return all
|
* @param int|null type of auth items or null to return all
|
||||||
|
* @param null|mixed $type
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user