mirror of
https://github.com/elyby/accounts.git
synced 2025-05-31 14:11:46 +05:30
Все действия, связанные с аккаунтами, теперь вызываются через url `/api/v1/accounts/<id>/<action>`. Добавлена вменяемая система разграничения прав на основе RBAC. Теперь oAuth2 токены генерируются как случайная строка в 40 символов длинной, а не UUID. Исправлен баг с неправильным временем жизни токена в ответе успешного запроса аутентификации. Теперь все unit тесты можно успешно прогнать без наличия интернета.
53 lines
1.4 KiB
PHP
53 lines
1.4 KiB
PHP
<?php
|
|
namespace api\modules\accounts\models;
|
|
|
|
use api\components\User\Component;
|
|
use api\exceptions\ThisShouldNotHappenException;
|
|
use api\validators\PasswordRequiredValidator;
|
|
use api\validators\TotpValidator;
|
|
use common\helpers\Error as E;
|
|
use Yii;
|
|
|
|
class EnableTwoFactorAuthForm extends AccountActionForm {
|
|
|
|
public $totp;
|
|
|
|
public $password;
|
|
|
|
public function rules(): array {
|
|
return [
|
|
['account', 'validateOtpDisabled'],
|
|
['totp', 'required', 'message' => E::TOTP_REQUIRED],
|
|
['totp', TotpValidator::class, 'account' => $this->getAccount()],
|
|
['password', PasswordRequiredValidator::class, 'account' => $this->getAccount()],
|
|
];
|
|
}
|
|
|
|
public function performAction(): bool {
|
|
if (!$this->validate()) {
|
|
return false;
|
|
}
|
|
|
|
$transaction = Yii::$app->db->beginTransaction();
|
|
|
|
$account = $this->getAccount();
|
|
$account->is_otp_enabled = true;
|
|
if (!$account->save()) {
|
|
throw new ThisShouldNotHappenException('Cannot enable otp for account');
|
|
}
|
|
|
|
Yii::$app->user->terminateSessions($account, Component::KEEP_CURRENT_SESSION);
|
|
|
|
$transaction->commit();
|
|
|
|
return true;
|
|
}
|
|
|
|
public function validateOtpDisabled($attribute): void {
|
|
if ($this->getAccount()->is_otp_enabled) {
|
|
$this->addError($attribute, E::OTP_ALREADY_ENABLED);
|
|
}
|
|
}
|
|
|
|
}
|