mirror of
https://github.com/elyby/accounts.git
synced 2025-05-31 14:11:46 +05:30
Merge branch 'develop' into sentry
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
namespace api\controllers;
|
||||
|
||||
use api\filters\NginxCache;
|
||||
use Yii;
|
||||
use yii\helpers\ArrayHelper;
|
||||
|
||||
@@ -11,6 +12,12 @@ class OptionsController extends Controller {
|
||||
'authenticator' => [
|
||||
'except' => ['index'],
|
||||
],
|
||||
'nginxCache' => [
|
||||
'class' => NginxCache::class,
|
||||
'rules' => [
|
||||
'index' => 3600, // 1h
|
||||
],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
|
35
api/filters/NginxCache.php
Normal file
35
api/filters/NginxCache.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
namespace api\filters;
|
||||
|
||||
use Yii;
|
||||
use yii\base\ActionFilter;
|
||||
|
||||
class NginxCache extends ActionFilter {
|
||||
|
||||
/**
|
||||
* @var array|callable массив или callback, содержащий пары роут -> сколько кэшировать.
|
||||
*
|
||||
* Период можно задавать 2-умя путями:
|
||||
* - если значение начинается с префикса @, оно задаёт абсолютное время в unix timestamp,
|
||||
* до которого ответ может быть закэширован.
|
||||
* - в ином случае значение интерпретируется как количество секунд, на которое необходимо
|
||||
* закэшировать ответ
|
||||
*/
|
||||
public $rules;
|
||||
|
||||
public function afterAction($action, $result) {
|
||||
$rule = $this->rules[$action->id] ?? null;
|
||||
if ($rule !== null) {
|
||||
if (is_callable($rule)) {
|
||||
$cacheTime = $rule($action);
|
||||
} else {
|
||||
$cacheTime = $rule;
|
||||
}
|
||||
|
||||
Yii::$app->response->headers->set('X-Accel-Expires', $cacheTime);
|
||||
}
|
||||
|
||||
return parent::afterAction($action, $result);
|
||||
}
|
||||
|
||||
}
|
@@ -28,15 +28,19 @@ class ChangeUsernameForm extends ApiForm {
|
||||
];
|
||||
}
|
||||
|
||||
public function change() {
|
||||
public function change() : bool {
|
||||
if (!$this->validate()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$transaction = Yii::$app->db->beginTransaction();
|
||||
$account = $this->getAccount();
|
||||
$oldNickname = $account->username;
|
||||
if ($this->username === $account->username) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$transaction = Yii::$app->db->beginTransaction();
|
||||
try {
|
||||
$oldNickname = $account->username;
|
||||
$account->username = $this->username;
|
||||
if (!$account->save()) {
|
||||
throw new ErrorException('Cannot save account model with new username');
|
||||
|
Reference in New Issue
Block a user