mirror of
https://github.com/elyby/accounts.git
synced 2024-12-02 03:31:05 +05:30
Добавлен функционал очистки устаревших MinecraftAccessKey
This commit is contained in:
parent
d114424906
commit
ec0b25e88d
@ -31,11 +31,11 @@ class MinecraftAccessKey extends ActiveRecord {
|
|||||||
|
|
||||||
const LIFETIME = 172800; // Ключ актуален в течение 2 дней
|
const LIFETIME = 172800; // Ключ актуален в течение 2 дней
|
||||||
|
|
||||||
public static function tableName() {
|
public static function tableName(): string {
|
||||||
return '{{%minecraft_access_keys}}';
|
return '{{%minecraft_access_keys}}';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function behaviors() {
|
public function behaviors(): array {
|
||||||
return [
|
return [
|
||||||
[
|
[
|
||||||
'class' => TimestampBehavior::class,
|
'class' => TimestampBehavior::class,
|
||||||
@ -49,11 +49,11 @@ class MinecraftAccessKey extends ActiveRecord {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAccount() : ActiveQuery {
|
public function getAccount(): ActiveQuery {
|
||||||
return $this->hasOne(Account::class, ['id' => 'account_id']);
|
return $this->hasOne(Account::class, ['id' => 'account_id']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isExpired() : bool {
|
public function isExpired(): bool {
|
||||||
return time() > $this->updated_at + self::LIFETIME;
|
return time() > $this->updated_at + self::LIFETIME;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
namespace console\controllers;
|
namespace console\controllers;
|
||||||
|
|
||||||
use common\models\EmailActivation;
|
use common\models\EmailActivation;
|
||||||
|
use common\models\MinecraftAccessKey;
|
||||||
use yii\console\Controller;
|
use yii\console\Controller;
|
||||||
|
|
||||||
class CleanupController extends Controller {
|
class CleanupController extends Controller {
|
||||||
@ -26,6 +27,19 @@ class CleanupController extends Controller {
|
|||||||
return self::EXIT_CODE_NORMAL;
|
return self::EXIT_CODE_NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function actionMinecraftSessions() {
|
||||||
|
/** @var \yii\db\BatchQueryResult|MinecraftAccessKey[] $expiredMinecraftSessions */
|
||||||
|
$expiredMinecraftSessions = MinecraftAccessKey::find()
|
||||||
|
->andWhere(['<', 'updated_at', time() - 1209600]) // 2 weeks
|
||||||
|
->each();
|
||||||
|
|
||||||
|
foreach ($expiredMinecraftSessions as $minecraftSession) {
|
||||||
|
$minecraftSession->delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::EXIT_CODE_NORMAL;
|
||||||
|
}
|
||||||
|
|
||||||
private function getEmailActivationsDurationsMap(): array {
|
private function getEmailActivationsDurationsMap(): array {
|
||||||
$durationsMap = [];
|
$durationsMap = [];
|
||||||
foreach (EmailActivation::getClassMap() as $typeId => $className) {
|
foreach (EmailActivation::getClassMap() as $typeId => $className) {
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
# https://crontab.guru/every-day
|
# https://crontab.guru/every-day
|
||||||
0 0 * * * root /usr/local/bin/php /var/www/html/yii cleanup/email-keys >/dev/null 2>&1
|
0 0 * * * root /usr/local/bin/php /var/www/html/yii cleanup/email-keys >/dev/null 2>&1
|
||||||
|
0 1 * * * root /usr/local/bin/php /var/www/html/yii cleanup/minecraft-sessions >/dev/null 2>&1
|
||||||
|
@ -2,8 +2,10 @@
|
|||||||
namespace codeception\console\unit\controllers;
|
namespace codeception\console\unit\controllers;
|
||||||
|
|
||||||
use common\models\EmailActivation;
|
use common\models\EmailActivation;
|
||||||
|
use common\models\MinecraftAccessKey;
|
||||||
use console\controllers\CleanupController;
|
use console\controllers\CleanupController;
|
||||||
use tests\codeception\common\fixtures\EmailActivationFixture;
|
use tests\codeception\common\fixtures\EmailActivationFixture;
|
||||||
|
use tests\codeception\common\fixtures\MinecraftAccessKeyFixture;
|
||||||
use tests\codeception\console\unit\TestCase;
|
use tests\codeception\console\unit\TestCase;
|
||||||
use Yii;
|
use Yii;
|
||||||
|
|
||||||
@ -12,17 +14,28 @@ class CleanupControllerTest extends TestCase {
|
|||||||
public function _fixtures() {
|
public function _fixtures() {
|
||||||
return [
|
return [
|
||||||
'emailActivations' => EmailActivationFixture::class,
|
'emailActivations' => EmailActivationFixture::class,
|
||||||
|
'minecraftSessions' => MinecraftAccessKeyFixture::class
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testActionAccessTokens() {
|
public function testActionEmailKeys() {
|
||||||
/** @var EmailActivation $expiredConfirmation */
|
/** @var EmailActivation $expiredConfirmation */
|
||||||
$expiredConfirmation = $this->tester->grabFixture('emailActivations', 'deeplyExpiredConfirmation');
|
$expiredConfirmation = $this->tester->grabFixture('emailActivations', 'deeplyExpiredConfirmation');
|
||||||
|
|
||||||
$controller = new CleanupController('cleanup', Yii::$app);
|
$controller = new CleanupController('cleanup', Yii::$app);
|
||||||
$this->assertEquals(0, $controller->actionEmailKeys());
|
$this->assertEquals(0, $controller->actionEmailKeys());
|
||||||
|
|
||||||
$this->tester->cantSeeRecord(EmailActivation::className(), ['key' => $expiredConfirmation->key]);
|
$this->tester->cantSeeRecord(EmailActivation::class, ['key' => $expiredConfirmation->key]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testActionMinecraftSessions() {
|
||||||
|
/** @var MinecraftAccessKey $expiredSession */
|
||||||
|
$expiredSession = $this->tester->grabFixture('minecraftSessions', 'expired-token');
|
||||||
|
|
||||||
|
$controller = new CleanupController('cleanup', Yii::$app);
|
||||||
|
$this->assertEquals(0, $controller->actionMinecraftSessions());
|
||||||
|
|
||||||
|
$this->tester->cantSeeRecord(MinecraftAccessKey::class, ['access_token' => $expiredSession->access_token]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user