-
Notifications
You must be signed in to change notification settings - Fork 145
Expand file tree
/
Copy pathRememberModel.php
More file actions
108 lines (91 loc) · 2.77 KB
/
RememberModel.php
File metadata and controls
108 lines (91 loc) · 2.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
declare(strict_types=1);
/**
* This file is part of CodeIgniter Shield.
*
* (c) CodeIgniter Foundation <admin@codeigniter.com>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace CodeIgniter\Shield\Models;
use CodeIgniter\I18n\Time;
use CodeIgniter\Shield\Entities\User;
use Faker\Generator;
use stdClass;
class RememberModel extends BaseModel
{
protected $primaryKey = 'id';
protected $returnType = 'object';
protected $useSoftDeletes = false;
protected $allowedFields = [
'selector',
'hashedValidator',
'user_id',
'expires',
];
protected $useTimestamps = true;
protected function initialize(): void
{
parent::initialize();
$this->table = $this->tables['remember_tokens'];
}
public function fake(Generator &$faker): stdClass
{
return (object) [
'user_id' => 1,
'selector' => 'selector',
'hashedValidator' => 'validator',
'expires' => Time::parse('+1 day'),
];
}
/**
* Stores a remember-me token for the user.
*
* @TODO `string $expires` → `Time $expires`
*/
public function rememberUser(User $user, string $selector, string $hashedValidator, string $expires): void
{
$return = $this->insert([
'user_id' => $user->id,
'selector' => $selector,
'hashedValidator' => $hashedValidator,
'expires' => Time::parse($expires),
]);
$this->checkQueryReturn($return);
}
/**
* Returns the remember-me token info for a given selector.
*/
public function getRememberToken(string $selector): ?stdClass
{
return $this->where('selector', $selector)->get()->getRow(); // @phpstan-ignore-line
}
/**
* Updates the validator for a given selector.
*/
public function updateRememberValidator(stdClass $token): void
{
$return = $this->save($token);
$this->checkQueryReturn($return);
}
/**
* Removes all persistent login tokens (remember-me) for a single user
* across all devices they may have logged in with.
*/
public function purgeRememberTokens(User $user): void
{
$return = $this->where(['user_id' => $user->id])->delete();
$this->checkQueryReturn($return);
}
/**
* Purges the 'auth_remember_tokens' table of any records that are past
* their expiration date already.
*/
public function purgeOldRememberTokens(): void
{
$return = $this->where('expires <=', date('Y-m-d H:i:s'))
->delete();
$this->checkQueryReturn($return);
}
}