From 09ec907a7ebe187809b872ee694d8a053cfdcde1 Mon Sep 17 00:00:00 2001 From: Nyholm Date: Wed, 29 Jan 2020 10:07:13 +0100 Subject: [PATCH] [Messenger] Add TLS option to Redis transport's DSN --- .../Messenger/Bridge/Redis/CHANGELOG.md | 1 + .../Redis/Tests/Transport/ConnectionTest.php | 24 ++++++++++++++++++- .../Bridge/Redis/Transport/Connection.php | 9 +++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Messenger/Bridge/Redis/CHANGELOG.md b/src/Symfony/Component/Messenger/Bridge/Redis/CHANGELOG.md index 4ebe7649279c..237daa930a73 100644 --- a/src/Symfony/Component/Messenger/Bridge/Redis/CHANGELOG.md +++ b/src/Symfony/Component/Messenger/Bridge/Redis/CHANGELOG.md @@ -5,3 +5,4 @@ CHANGELOG ----- * Introduced the Redis bridge. + * Added TLS option in the DSN. Example: `redis://127.0.0.1?tls=1` diff --git a/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php b/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php index fd7ab71df861..51ed800b62b5 100644 --- a/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php +++ b/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php @@ -12,8 +12,8 @@ namespace Symfony\Component\Messenger\Bridge\Redis\Tests\Transport; use PHPUnit\Framework\TestCase; -use Symfony\Component\Messenger\Exception\TransportException; use Symfony\Component\Messenger\Bridge\Redis\Transport\Connection; +use Symfony\Component\Messenger\Exception\TransportException; /** * @requires extension redis >= 4.3.0 @@ -73,6 +73,28 @@ public function testFromDsnWithOptions() ); } + public function testFromDsnWithTls() + { + $redis = $this->createMock(\Redis::class); + $redis->expects($this->once()) + ->method('connect') + ->with('tls://127.0.0.1', 6379) + ->willReturn(null); + + Connection::fromDsn('redis://127.0.0.1?tls=1', [], $redis); + } + + public function testFromDsnWithTlsOption() + { + $redis = $this->createMock(\Redis::class); + $redis->expects($this->once()) + ->method('connect') + ->with('tls://127.0.0.1', 6379) + ->willReturn(null); + + Connection::fromDsn('redis://127.0.0.1', ['tls' => true], $redis); + } + public function testFromDsnWithQueryOptions() { $this->assertEquals( diff --git a/src/Symfony/Component/Messenger/Bridge/Redis/Transport/Connection.php b/src/Symfony/Component/Messenger/Bridge/Redis/Transport/Connection.php index d73dc5259ae6..f51b37a6dad3 100644 --- a/src/Symfony/Component/Messenger/Bridge/Redis/Transport/Connection.php +++ b/src/Symfony/Component/Messenger/Bridge/Redis/Transport/Connection.php @@ -104,6 +104,12 @@ public static function fromDsn(string $dsn, array $redisOptions = [], \Redis $re unset($redisOptions['dbindex']); } + $tls = false; + if (\array_key_exists('tls', $redisOptions)) { + $tls = filter_var($redisOptions['tls'], FILTER_VALIDATE_BOOLEAN); + unset($redisOptions['tls']); + } + $configuration = [ 'stream' => $redisOptions['stream'] ?? null, 'group' => $redisOptions['group'] ?? null, @@ -125,6 +131,9 @@ public static function fromDsn(string $dsn, array $redisOptions = [], \Redis $re $configuration['stream'] = $pathParts[1] ?? $configuration['stream']; $configuration['group'] = $pathParts[2] ?? $configuration['group']; $configuration['consumer'] = $pathParts[3] ?? $configuration['consumer']; + if ($tls) { + $connectionCredentials['host'] = 'tls://'.$connectionCredentials['host']; + } } else { $connectionCredentials = [ 'host' => $parsedUrl['path'],