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 тесты можно успешно прогнать без наличия интернета.
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						||
namespace console\controllers;
 | 
						||
 | 
						||
use common\models\EmailActivation;
 | 
						||
use yii\console\Controller;
 | 
						||
 | 
						||
class CleanupController extends Controller {
 | 
						||
 | 
						||
    public function actionEmailKeys() {
 | 
						||
        $query = EmailActivation::find();
 | 
						||
        $conditions = ['OR'];
 | 
						||
        foreach ($this->getEmailActivationsDurationsMap() as $typeId => $expiration) {
 | 
						||
            $conditions[] = [
 | 
						||
                'AND',
 | 
						||
                ['type' => $typeId],
 | 
						||
                ['<', 'created_at', time() - $expiration],
 | 
						||
            ];
 | 
						||
        }
 | 
						||
 | 
						||
        /** @var \yii\db\BatchQueryResult|EmailActivation[] $expiredEmails */
 | 
						||
        $expiredEmails = $query->andWhere($conditions)->each();
 | 
						||
        foreach ($expiredEmails as $email) {
 | 
						||
            $email->delete();
 | 
						||
        }
 | 
						||
 | 
						||
        return self::EXIT_CODE_NORMAL;
 | 
						||
    }
 | 
						||
 | 
						||
    private function getEmailActivationsDurationsMap(): array {
 | 
						||
        $durationsMap = [];
 | 
						||
        foreach (EmailActivation::getClassMap() as $typeId => $className) {
 | 
						||
            /** @var EmailActivation $object */
 | 
						||
            $object = new $className;
 | 
						||
            /** @var \common\behaviors\EmailActivationExpirationBehavior $behavior */
 | 
						||
            $behavior = $object->getBehavior('expirationBehavior');
 | 
						||
            $expiration = $behavior->expirationTimeout ?? 1123200; // 13d по умолчанию
 | 
						||
            // Приращаем 1 день, чтобы пользователи ещё могли получать сообщения об истечении кода активации
 | 
						||
            /** @noinspection SummerTimeUnsafeTimeManipulationInspection */
 | 
						||
            $durationsMap[$typeId] = $expiration + 86400;
 | 
						||
        }
 | 
						||
 | 
						||
        return $durationsMap;
 | 
						||
    }
 | 
						||
 | 
						||
}
 |