Skip to content

Commit d19f1e8

Browse files
authored
Merge pull request #11 from pdsinterop/fix/unique-tokens
make sure the token code is not in use
2 parents 071fb61 + 56f7754 commit d19f1e8

2 files changed

Lines changed: 21 additions & 6 deletions

File tree

lib/User.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,18 @@
77
class User {
88
private static function generateTokenCode() {
99
$digits = 6;
10+
11+
self::cleanupTokens();
12+
$existingTokens = self::getExistingVerifyTokens();
13+
1014
$code = random_int(0,1000000);
1115
$code = str_pad($code, $digits, '0', STR_PAD_LEFT);
16+
17+
while (in_array($code, $existingTokens)) { // make sure we have no collissions;
18+
$code = random_int(0,1000000);
19+
$code = str_pad($code, $digits, '0', STR_PAD_LEFT);
20+
}
21+
1222
return $code;
1323
}
1424

@@ -331,4 +341,14 @@ public static function cleanupTokens() {
331341
':now' => $now->getTimestamp()
332342
]);
333343
}
344+
345+
public static function getExistingVerifyTokens() {
346+
Db::connect();
347+
$query = Db::$pdo->prepare(
348+
'SELECT code FROM verify'
349+
);
350+
$query->execute();
351+
$existingTokens = $query->fetchAll();
352+
return $existingTokens;
353+
}
334354
}

tests/phpunit/UserTest.php

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -333,16 +333,11 @@ public function testCleanup() {
333333
"hello" => "world",
334334
"expires" => time() - 10
335335
]);
336-
$token2 = User::saveVerifyToken("verify", [
337-
"hello" => "world",
338-
"expires" => time() - 10
339-
]);
340336
$query = Db::$pdo->prepare('SELECT count(*) AS count FROM verify');
341337
$query->execute();
342338
$result = $query->fetchAll();
343339
$beforeCleanup = $result[0]['count'];
344-
$this->assertEquals(2, $beforeCleanup);
345-
340+
$this->assertEquals(1, $beforeCleanup);
346341
User::cleanupTokens();
347342
$query = Db::$pdo->prepare('SELECT count(*) AS count FROM verify');
348343
$query->execute();

0 commit comments

Comments
 (0)