diff --git a/api/modules/accounts/controllers/DefaultController.php b/api/modules/accounts/controllers/DefaultController.php index cc7bcb9..b9ac258 100644 --- a/api/modules/accounts/controllers/DefaultController.php +++ b/api/modules/accounts/controllers/DefaultController.php @@ -15,9 +15,9 @@ use yii\web\NotFoundHttpException; class DefaultController extends Controller { public function behaviors(): array { - $paramsCallback = function() { - $id = Yii::$app->request->get('id'); - if ($id === null) { + $paramsCallback = function(): array { + $id = (int)Yii::$app->request->get('id'); + if ($id === 0) { $identity = Yii::$app->user->getIdentity(); if ($identity !== null) { $account = $identity->getAccount(); @@ -132,7 +132,7 @@ class DefaultController extends Controller { return (new TwoFactorAuthInfo($this->findAccount($id)))->getCredentials(); } - public function bindActionParams($action, $params) { + public function bindActionParams($action, $params): array { if (!isset($params['id'])) { /** @noinspection NullPointerExceptionInspection */ $account = Yii::$app->user->getIdentity()->getAccount(); @@ -145,7 +145,13 @@ class DefaultController extends Controller { } private function findAccount(int $id): Account { - $account = Account::findOne($id); + if ($id === 0) { + /** @noinspection NullPointerExceptionInspection */ + $account = Yii::$app->user->getIdentity()->getAccount(); + } else { + $account = Account::findOne($id); + } + if ($account === null) { throw new NotFoundHttpException(); } diff --git a/tests/codeception/api/functional/accounts/GetCest.php b/tests/codeception/api/functional/accounts/GetCest.php index 4dfaaeb..c68e1e1 100644 --- a/tests/codeception/api/functional/accounts/GetCest.php +++ b/tests/codeception/api/functional/accounts/GetCest.php @@ -36,6 +36,28 @@ class GetCest { $I->canSeeResponseJsonMatchesJsonPath('$.passwordChangedAt'); } + public function testGetInfoAboutCurrentUser(FunctionalTester $I) { + $I->wantTo('get info about user with 0 id, e.g. current'); + $I->amAuthenticated(); + + $this->route->get(0); + $I->canSeeResponseCodeIs(200); + $I->canSeeResponseIsJson(); + $I->canSeeResponseContainsJson([ + 'id' => 1, + 'uuid' => 'df936908-b2e1-544d-96f8-2977ec213022', + 'username' => 'Admin', + 'isOtpEnabled' => false, + 'email' => 'admin@ely.by', + 'lang' => 'en', + 'isActive' => true, + 'hasMojangUsernameCollision' => false, + 'shouldAcceptRules' => false, + 'elyProfileLink' => 'http://ely.by/u1', + ]); + $I->canSeeResponseJsonMatchesJsonPath('$.passwordChangedAt'); + } + public function testGetWithNotAcceptedLatestRules(FunctionalTester $I) { $accountId = $I->amAuthenticated('Veleyaba');