Skip to content

Commit 3fcfb37

Browse files
committed
Merge branch '6.4' into 7.1
* 6.4: Update deprecations baseline [Mailer][MailJet] Fix parameters for TrackClicks and TrackOpens [Doctrine][Messenger] Oracle sequences are suffixed with `_seq` drop existing schema if tests create it explicitly synchronize line numbers in deprecations baseline [HttpClient] Fix class requirement message Add integration test for RememberMe with pg connection fix: DoctrineTokenProvider not oracle compatible
2 parents 25b4084 + 402d583 commit 3fcfb37

File tree

3 files changed

+62
-5
lines changed

3 files changed

+62
-5
lines changed

Security/RememberMe/DoctrineTokenProvider.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,16 @@ public function __construct(
4848

4949
public function loadTokenBySeries(string $series): PersistentTokenInterface
5050
{
51-
// the alias for lastUsed works around case insensitivity in PostgreSQL
52-
$sql = 'SELECT class, username, value, lastUsed AS last_used FROM rememberme_token WHERE series=:series';
51+
$sql = 'SELECT class, username, value, lastUsed FROM rememberme_token WHERE series=:series';
5352
$paramValues = ['series' => $series];
5453
$paramTypes = ['series' => ParameterType::STRING];
5554
$stmt = $this->conn->executeQuery($sql, $paramValues, $paramTypes);
56-
$row = $stmt->fetchAssociative() ?: throw new TokenNotFoundException('No token found.');
5755

58-
return new PersistentToken($row['class'], $row['username'], $series, $row['value'], new \DateTimeImmutable($row['last_used']));
56+
// fetching numeric because column name casing depends on platform, eg. Oracle converts all not quoted names to uppercase
57+
$row = $stmt->fetchNumeric() ?: throw new TokenNotFoundException('No token found.');
58+
59+
[$class, $username, $value, $last_used] = $row;
60+
return new PersistentToken($class, $username, $series, $value, new \DateTimeImmutable($last_used));
5961
}
6062

6163
public function deleteTokenBySeries(string $series): void
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?php
2+
3+
namespace Symfony\Bridge\Doctrine\Tests\Security\RememberMe;
4+
5+
use Doctrine\DBAL\Configuration;
6+
use Doctrine\DBAL\DriverManager;
7+
use Doctrine\DBAL\Schema\DefaultSchemaManagerFactory;
8+
use Doctrine\ORM\ORMSetup;
9+
use Symfony\Bridge\Doctrine\Security\RememberMe\DoctrineTokenProvider;
10+
11+
/**
12+
* @requires extension pdo_pgsql
13+
* @group integration
14+
*/
15+
class DoctrineTokenProviderPostgresTest extends DoctrineTokenProviderTest
16+
{
17+
public static function setUpBeforeClass(): void
18+
{
19+
if (!getenv('POSTGRES_HOST')) {
20+
self::markTestSkipped('Missing POSTGRES_HOST env variable');
21+
}
22+
}
23+
24+
protected function bootstrapProvider()
25+
{
26+
$config = class_exists(ORMSetup::class) ? ORMSetup::createConfiguration(true) : new Configuration();
27+
if (class_exists(DefaultSchemaManagerFactory::class)) {
28+
$config->setSchemaManagerFactory(new DefaultSchemaManagerFactory());
29+
}
30+
31+
$connection = DriverManager::getConnection([
32+
'driver' => 'pdo_pgsql',
33+
'host' => getenv('POSTGRES_HOST'),
34+
'user' => 'postgres',
35+
'password' => 'password',
36+
], $config);
37+
$connection->{method_exists($connection, 'executeStatement') ? 'executeStatement' : 'executeUpdate'}(<<<'SQL'
38+
DROP TABLE IF EXISTS rememberme_token;
39+
SQL
40+
);
41+
42+
$connection->{method_exists($connection, 'executeStatement') ? 'executeStatement' : 'executeUpdate'}(<<<'SQL'
43+
CREATE TABLE rememberme_token (
44+
series CHAR(88) UNIQUE PRIMARY KEY NOT NULL,
45+
value VARCHAR(88) NOT NULL, -- CHAR(88) adds spaces at the end
46+
lastUsed TIMESTAMP NOT NULL,
47+
class VARCHAR(100) NOT NULL,
48+
username VARCHAR(200) NOT NULL
49+
);
50+
SQL
51+
);
52+
53+
return new DoctrineTokenProvider($connection);
54+
}
55+
}

Tests/Security/RememberMe/DoctrineTokenProviderTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* file that was distributed with this source code.
1010
*/
1111

12-
namespace Security\RememberMe;
12+
namespace Symfony\Bridge\Doctrine\Tests\Security\RememberMe;
1313

1414
use Doctrine\DBAL\DriverManager;
1515
use Doctrine\DBAL\Schema\DefaultSchemaManagerFactory;

0 commit comments

Comments
 (0)