Skip to content

Commit

Permalink
Clean expired sessions in Cleaner job
Browse files Browse the repository at this point in the history
  • Loading branch information
marienfressinaud committed May 3, 2021
1 parent 0a6652f commit dd624e4
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 2 deletions.
2 changes: 2 additions & 0 deletions src/jobs/scheduled/Cleaner.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ public function perform()
$cache->clean();

models\FetchLog::daoCall('deleteOlderThan', \Minz\Time::ago(7, 'days'));
models\Token::daoCall('deleteExpired');
models\Session::daoCall('deleteExpired');

if (\Minz\Configuration::$application['demo']) {
// with these two delete, the other tables should be deleted in cascade
Expand Down
16 changes: 16 additions & 0 deletions src/models/dao/Session.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,20 @@ public function __construct()
$properties = array_keys(\flusio\models\Session::PROPERTIES);
parent::__construct('sessions', 'id', $properties);
}

/**
* Delete sessions that have expired (no token).
*
* @return boolean True on success
*/
public function deleteExpired()
{
$sql = <<<SQL
DELETE FROM sessions
WHERE token IS NULL
SQL;

$statement = $this->prepare($sql);
return $statement->execute();
}
}
18 changes: 18 additions & 0 deletions src/models/dao/Token.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,22 @@ public function __construct()
$properties = array_keys(\flusio\models\Token::PROPERTIES);
parent::__construct('tokens', 'token', $properties);
}

/**
* Delete tokens that have expired.
*
* @return boolean True on success
*/
public function deleteExpired()
{
$sql = <<<SQL
DELETE FROM tokens
WHERE expired_at <= ?
SQL;

$statement = $this->prepare($sql);
return $statement->execute([
\Minz\Time::now()->format(\Minz\Model::DATETIME_FORMAT),
]);
}
}
48 changes: 46 additions & 2 deletions tests/jobs/scheduled/CleanerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,11 +93,51 @@ public function testPerformKeepsFreshFetchLogs()
$this->assertTrue(models\FetchLog::exists($fetch_log_id));
}

public function testPerformDeletesExpiredSession()
{
$cleaner_job = new Cleaner();
$days = $this->fake('numberBetween', 0, 9000);
$expired_at = \Minz\Time::ago($days, 'days');
$token = $this->create('token', [
'expired_at' => $expired_at->format(\Minz\Model::DATETIME_FORMAT),
]);
$session_id = $this->create('session', [
'token' => $token,
]);

$cleaner_job->perform();

$this->assertFalse(models\Session::exists($session_id));
$this->assertFalse(models\Token::exists($token));
}

public function testPerformKeepsCurrentSession()
{
$cleaner_job = new Cleaner();
$days = $this->fake('numberBetween', 1, 9000);
$expired_at = \Minz\Time::fromNow($days, 'days');
$token = $this->create('token', [
'expired_at' => $expired_at->format(\Minz\Model::DATETIME_FORMAT),
]);
$session_id = $this->create('session', [
'token' => $token,
]);

$cleaner_job->perform();

$this->assertTrue(models\Session::exists($session_id));
$this->assertTrue(models\Token::exists($token));
}

public function testPerformDeletesDataIfDemoIsEnabled()
{
\Minz\Configuration::$application['demo'] = true;
$cleaner_job = new Cleaner();
$token = $this->create('token');
$days = $this->fake('numberBetween', 1, 9000);
$expired_at = \Minz\Time::fromNow($days, 'days');
$token = $this->create('token', [
'expired_at' => $expired_at->format(\Minz\Model::DATETIME_FORMAT),
]);
$user_id = $this->create('user', [
'validation_token' => $token,
]);
Expand Down Expand Up @@ -130,7 +170,11 @@ public function testPerformKeepsDataIfDemoIsDisabled()
{
\Minz\Configuration::$application['demo'] = false;
$cleaner_job = new Cleaner();
$token = $this->create('token');
$days = $this->fake('numberBetween', 1, 9000);
$expired_at = \Minz\Time::fromNow($days, 'days');
$token = $this->create('token', [
'expired_at' => $expired_at->format(\Minz\Model::DATETIME_FORMAT),
]);
$user_id = $this->create('user', [
'validation_token' => $token,
]);
Expand Down

0 comments on commit dd624e4

Please sign in to comment.