[ 'class' => AccessControl::class, 'rules' => [ [ 'actions' => ['current', 'accept-rules'], 'allow' => true, 'roles' => ['@'], ], [ 'class' => ActiveUserRule::class, 'actions' => [ 'change-password', 'change-username', 'change-email-initialize', 'change-email-submit-new-email', 'change-email-confirm-new-email', 'change-lang', ], ], ], ], ]); } public function verbs() { return [ 'current' => ['GET'], 'change-password' => ['POST'], 'change-username' => ['POST'], 'change-email-initialize' => ['POST'], 'change-email-submit-new-email' => ['POST'], 'change-email-confirm-new-email' => ['POST'], 'change-lang' => ['POST'], 'accept-rules' => ['POST'], ]; } public function actionCurrent() { $account = Yii::$app->user->identity; return [ 'id' => $account->id, 'uuid' => $account->uuid, 'username' => $account->username, 'email' => $account->email, 'lang' => $account->lang, 'isActive' => $account->status === Account::STATUS_ACTIVE, 'passwordChangedAt' => $account->password_changed_at, 'hasMojangUsernameCollision' => $account->hasMojangUsernameCollision(), 'shouldAcceptRules' => !$account->isAgreedWithActualRules(), 'isOtpEnabled' => (bool)$account->is_otp_enabled, ]; } public function actionChangePassword() { $account = Yii::$app->user->identity; $model = new ChangePasswordForm($account); $model->load(Yii::$app->request->post()); if (!$model->changePassword()) { return [ 'success' => false, 'errors' => $model->getFirstErrors(), ]; } return [ 'success' => true, ]; } public function actionChangeUsername() { $model = new ChangeUsernameForm(); $model->load(Yii::$app->request->post()); if (!$model->change()) { return [ 'success' => false, 'errors' => $model->getFirstErrors(), ]; } return [ 'success' => true, ]; } public function actionChangeEmailInitialize() { $account = Yii::$app->user->identity; $model = new InitStateForm($account); $model->load(Yii::$app->request->post()); if (!$model->sendCurrentEmailConfirmation()) { $data = [ 'success' => false, 'errors' => $model->getFirstErrors(), ]; if (ArrayHelper::getValue($data['errors'], 'email') === E::RECENTLY_SENT_MESSAGE) { $emailActivation = $model->getEmailActivation(); $data['data'] = [ 'canRepeatIn' => $emailActivation->canRepeatIn(), 'repeatFrequency' => $emailActivation->repeatTimeout, ]; } return $data; } return [ 'success' => true, ]; } public function actionChangeEmailSubmitNewEmail() { $account = Yii::$app->user->identity; $model = new NewEmailForm($account); $model->load(Yii::$app->request->post()); if (!$model->sendNewEmailConfirmation()) { return [ 'success' => false, 'errors' => $model->getFirstErrors(), ]; } return [ 'success' => true, ]; } public function actionChangeEmailConfirmNewEmail() { $account = Yii::$app->user->identity; $model = new ConfirmNewEmailForm($account); $model->load(Yii::$app->request->post()); if (!$model->changeEmail()) { return [ 'success' => false, 'errors' => $model->getFirstErrors(), ]; } return [ 'success' => true, 'data' => [ 'email' => $account->email, ], ]; } public function actionChangeLang() { $account = Yii::$app->user->identity; $model = new ChangeLanguageForm($account); $model->load(Yii::$app->request->post()); if (!$model->applyLanguage()) { return [ 'success' => false, 'errors' => $model->getFirstErrors(), ]; } return [ 'success' => true, ]; } public function actionAcceptRules() { $account = Yii::$app->user->identity; $model = new AcceptRulesForm($account); $model->load(Yii::$app->request->post()); if (!$model->agreeWithLatestRules()) { return [ 'success' => false, 'errors' => $model->getFirstErrors(), ]; } return [ 'success' => true, ]; } }