PHP-CS-Fixer run

This commit is contained in:
Lorenzo Milesi
2022-08-15 08:16:03 +02:00
parent 7fb900dfe1
commit ca84ceca4b
26 changed files with 233 additions and 234 deletions

View File

@ -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();
} }
); );
@ -166,37 +166,39 @@ 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
$di->set( $di->set(
@ -208,11 +210,6 @@ class Bootstrap implements BootstrapInterface
] ]
); );
} }
} catch (Exception $e) { } catch (Exception $e) {
die($e); die($e);
} }

View File

@ -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)
{ {

View File

@ -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
{ {
@ -121,12 +121,12 @@ class SecurityController extends Controller
} }
/** /**
* @var LoginForm $form * @var LoginForm $form
*/ */
$form = $this->make(LoginForm::class); $form = $this->make(LoginForm::class);
/** /**
* @var FormEvent $event * @var FormEvent $event
*/ */
$event = $this->make(FormEvent::class, [$form]); $event = $this->make(FormEvent::class, [$form]);
@ -144,7 +144,7 @@ class SecurityController extends Controller
if ($form->load(Yii::$app->request->post())) { if ($form->load(Yii::$app->request->post())) {
if ($this->module->enableTwoFactorAuthentication && $form->validate()) { if ($this->module->enableTwoFactorAuthentication && $form->validate()) {
$user = $form->getUser(); $user = $form->getUser();
if ($user->auth_tf_enabled) { if ($user->auth_tf_enabled) {
Yii::$app->session->set('credentials', ['login' => $form->login, 'pwd' => $form->password]); Yii::$app->session->set('credentials', ['login' => $form->login, 'pwd' => $form->password]);
return $this->redirect(['confirm']); return $this->redirect(['confirm']);
@ -162,7 +162,7 @@ class SecurityController extends Controller
return $this->goBack(); return $this->goBack();
} }
$this->trigger(FormEvent::EVENT_FAILED_LOGIN, $event); $this->trigger(FormEvent::EVENT_FAILED_LOGIN, $event);
} }
return $this->render( return $this->render(
@ -186,7 +186,7 @@ class SecurityController extends Controller
$credentials = Yii::$app->session->get('credentials'); $credentials = Yii::$app->session->get('credentials');
/** /**
* @var LoginForm $form * @var LoginForm $form
*/ */
$form = $this->make(LoginForm::class); $form = $this->make(LoginForm::class);
$form->login = $credentials['login']; $form->login = $credentials['login'];
@ -194,7 +194,7 @@ class SecurityController extends Controller
$form->setScenario('2fa'); $form->setScenario('2fa');
/** /**
* @var FormEvent $event * @var FormEvent $event
*/ */
$event = $this->make(FormEvent::class, [$form]); $event = $this->make(FormEvent::class, [$form]);
@ -216,26 +216,24 @@ 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(
'confirm', 'confirm',
[ [
@ -273,5 +271,4 @@ class SecurityController extends Controller
$this->make(SocialNetworkAccountConnectService::class, [$this, $client])->run(); $this->make(SocialNetworkAccountConnectService::class, [$this, $client])->run();
} }
} }

View File

@ -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.'),
];
}
} }

View File

@ -115,7 +115,7 @@ class MailFactory
} }
/** /**
* @param User $user * @param User $user
* @param String $code * @param String $code
* *
* @throws InvalidConfigException * @throws InvalidConfigException
@ -126,7 +126,7 @@ class MailFactory
/** @var Module $module */ /** @var Module $module */
$module = Yii::$app->getModule('user'); $module = Yii::$app->getModule('user');
$to = $user->email; $to = $user->email;
$from = $module->mailParams['fromEmail']; $from = $module->mailParams['fromEmail'];
$subject = $module->mailParams['twoFactorMailSubject']; $subject = $module->mailParams['twoFactorMailSubject'];
$params = [ $params = [

View File

@ -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,11 +39,11 @@ 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);
} }
} }

View File

@ -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) {

View File

@ -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}}';

View File

@ -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());
} }
/** /**

View File

@ -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

View File

@ -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
{ {

View File

@ -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

View File

@ -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
{ {

View File

@ -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));

View File

@ -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;

View File

@ -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

View File

@ -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)
{ {

View File

@ -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;

View File

@ -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

View File

@ -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)

View File

@ -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 // put key in session
Yii::$app->session->set("email_code_time", date('Y-m-d H:i:s')); Yii::$app->session->set("email_code_time", date('Y-m-d H:i:s'));
Yii::$app->session->set("email_code", $code); Yii::$app->session->set("email_code", $code);
}
return $code; return $code;
} }
} }

View File

@ -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;

View File

@ -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();
} }
} }

View File

@ -13,16 +13,15 @@ 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
{ {
use ContainerAwareTrait; use ContainerAwareTrait;
protected $user; protected $user;
protected $code; protected $code;
protected $cycles; protected $cycles;
@ -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();
} }
} }

View File

@ -13,16 +13,15 @@ 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
{ {
use ContainerAwareTrait; use ContainerAwareTrait;
protected $user; protected $user;
protected $code; protected $code;
protected $cycles; protected $cycles;
@ -38,7 +37,7 @@ class TwoFactorTextMessageValidator extends TwoFactorCodeValidator
public function __construct(User $user, $code, $cycles = 0) public function __construct(User $user, $code, $cycles = 0)
{ {
$this->user = $user; $this->user = $user;
$this->code = $code; $this->code = $code;
$this->cycles = $cycles; $this->cycles = $cycles;
$this->type = 'sms'; $this->type = 'sms';
@ -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();
} }
} }

View File

@ -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
*/ */