mirror of
https://github.com/elyby/accounts.git
synced 2024-11-30 10:42:16 +05:30
Форма восстановления пароля больше не требует решения totp
This commit is contained in:
parent
37c72ac1cd
commit
18364c625f
@ -3,7 +3,6 @@ namespace api\models\authentication;
|
|||||||
|
|
||||||
use api\components\ReCaptcha\Validator as ReCaptchaValidator;
|
use api\components\ReCaptcha\Validator as ReCaptchaValidator;
|
||||||
use api\models\base\ApiForm;
|
use api\models\base\ApiForm;
|
||||||
use api\validators\TotpValidator;
|
|
||||||
use common\emails\EmailHelper;
|
use common\emails\EmailHelper;
|
||||||
use common\helpers\Error as E;
|
use common\helpers\Error as E;
|
||||||
use api\traits\AccountFinder;
|
use api\traits\AccountFinder;
|
||||||
@ -20,17 +19,11 @@ class ForgotPasswordForm extends ApiForm {
|
|||||||
|
|
||||||
public $login;
|
public $login;
|
||||||
|
|
||||||
public $totp;
|
|
||||||
|
|
||||||
public function rules() {
|
public function rules() {
|
||||||
return [
|
return [
|
||||||
['captcha', ReCaptchaValidator::class],
|
['captcha', ReCaptchaValidator::class],
|
||||||
['login', 'required', 'message' => E::LOGIN_REQUIRED],
|
['login', 'required', 'message' => E::LOGIN_REQUIRED],
|
||||||
['login', 'validateLogin'],
|
['login', 'validateLogin'],
|
||||||
['totp', 'required', 'when' => function(self $model) {
|
|
||||||
return !$this->hasErrors() && $model->getAccount()->is_otp_enabled;
|
|
||||||
}, 'message' => E::TOTP_REQUIRED],
|
|
||||||
['totp', 'validateTotp'],
|
|
||||||
['login', 'validateActivity'],
|
['login', 'validateActivity'],
|
||||||
['login', 'validateFrequency'],
|
['login', 'validateFrequency'],
|
||||||
];
|
];
|
||||||
@ -44,21 +37,6 @@ class ForgotPasswordForm extends ApiForm {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function validateTotp($attribute) {
|
|
||||||
if ($this->hasErrors()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$account = $this->getAccount();
|
|
||||||
if (!$account->is_otp_enabled) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$validator = new TotpValidator(['account' => $account]);
|
|
||||||
$validator->window = 1;
|
|
||||||
$validator->validateAttribute($this, $attribute);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function validateActivity($attribute) {
|
public function validateActivity($attribute) {
|
||||||
if (!$this->hasErrors()) {
|
if (!$this->hasErrors()) {
|
||||||
$account = $this->getAccount();
|
$account = $this->getAccount();
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace codeception\api\functional;
|
namespace codeception\api\functional;
|
||||||
|
|
||||||
use OTPHP\TOTP;
|
|
||||||
use tests\codeception\api\_pages\AuthenticationRoute;
|
use tests\codeception\api\_pages\AuthenticationRoute;
|
||||||
use tests\codeception\api\FunctionalTester;
|
use tests\codeception\api\FunctionalTester;
|
||||||
|
|
||||||
@ -34,30 +33,6 @@ class ForgotPasswordCest {
|
|||||||
'login' => 'error.login_not_exist',
|
'login' => 'error.login_not_exist',
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->route->forgotPassword('AccountWithEnabledOtp');
|
|
||||||
$I->canSeeResponseContainsJson([
|
|
||||||
'success' => false,
|
|
||||||
'errors' => [
|
|
||||||
'totp' => 'error.totp_required',
|
|
||||||
],
|
|
||||||
]);
|
|
||||||
|
|
||||||
$this->route->forgotPassword('AccountWithEnabledOtp');
|
|
||||||
$I->canSeeResponseContainsJson([
|
|
||||||
'success' => false,
|
|
||||||
'errors' => [
|
|
||||||
'totp' => 'error.totp_required',
|
|
||||||
],
|
|
||||||
]);
|
|
||||||
|
|
||||||
$this->route->forgotPassword('AccountWithEnabledOtp', '123456');
|
|
||||||
$I->canSeeResponseContainsJson([
|
|
||||||
'success' => false,
|
|
||||||
'errors' => [
|
|
||||||
'totp' => 'error.totp_incorrect',
|
|
||||||
],
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testForgotPasswordByEmail(FunctionalTester $I) {
|
public function testForgotPasswordByEmail(FunctionalTester $I) {
|
||||||
@ -72,13 +47,6 @@ class ForgotPasswordCest {
|
|||||||
$this->assertSuccessResponse($I, true);
|
$this->assertSuccessResponse($I, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testForgotPasswordByAccountWithOtp(FunctionalTester $I) {
|
|
||||||
$I->wantTo('create new password recover request by passing username and otp totp');
|
|
||||||
$totp = TOTP::create('BBBB');
|
|
||||||
$this->route->forgotPassword('AccountWithEnabledOtp', $totp->now());
|
|
||||||
$this->assertSuccessResponse($I, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testDataForFrequencyError(FunctionalTester $I) {
|
public function testDataForFrequencyError(FunctionalTester $I) {
|
||||||
$I->wantTo('get info about time to repeat recover password request');
|
$I->wantTo('get info about time to repeat recover password request');
|
||||||
$this->route->forgotPassword('Notch');
|
$this->route->forgotPassword('Notch');
|
||||||
|
@ -6,7 +6,6 @@ use api\models\authentication\ForgotPasswordForm;
|
|||||||
use Codeception\Specify;
|
use Codeception\Specify;
|
||||||
use common\models\EmailActivation;
|
use common\models\EmailActivation;
|
||||||
use GuzzleHttp\ClientInterface;
|
use GuzzleHttp\ClientInterface;
|
||||||
use OTPHP\TOTP;
|
|
||||||
use tests\codeception\api\unit\TestCase;
|
use tests\codeception\api\unit\TestCase;
|
||||||
use tests\codeception\common\fixtures\AccountFixture;
|
use tests\codeception\common\fixtures\AccountFixture;
|
||||||
use tests\codeception\common\fixtures\EmailActivationFixture;
|
use tests\codeception\common\fixtures\EmailActivationFixture;
|
||||||
@ -41,21 +40,6 @@ class ForgotPasswordFormTest extends TestCase {
|
|||||||
$this->assertEmpty($model->getErrors('login'), 'empty errors if login is exists');
|
$this->assertEmpty($model->getErrors('login'), 'empty errors if login is exists');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testValidateTotp() {
|
|
||||||
$model = new ForgotPasswordForm();
|
|
||||||
$model->login = 'AccountWithEnabledOtp';
|
|
||||||
$model->totp = '123456';
|
|
||||||
$model->validateTotp('totp');
|
|
||||||
$this->assertEquals(['error.totp_incorrect'], $model->getErrors('totp'));
|
|
||||||
|
|
||||||
$totp = TOTP::create('BBBB');
|
|
||||||
$model = new ForgotPasswordForm();
|
|
||||||
$model->login = 'AccountWithEnabledOtp';
|
|
||||||
$model->totp = $totp->now();
|
|
||||||
$model->validateTotp('totp');
|
|
||||||
$this->assertEmpty($model->getErrors('totp'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testValidateActivity() {
|
public function testValidateActivity() {
|
||||||
$model = new ForgotPasswordForm([
|
$model = new ForgotPasswordForm([
|
||||||
'login' => $this->tester->grabFixture('accounts', 'not-activated-account')['username'],
|
'login' => $this->tester->grabFixture('accounts', 'not-activated-account')['username'],
|
||||||
|
Loading…
Reference in New Issue
Block a user