From fa71a9a0ce0c2bf1384ff91b18accd95632735f9 Mon Sep 17 00:00:00 2001 From: Philipp Holzer Date: Sat, 20 Apr 2019 13:40:40 +0200 Subject: [PATCH] Improve redis configuration - basic authentication - switch database (0 - 15) --- src/Core/Cache/RedisCacheDriver.php | 16 +++++++++++++--- src/Factory/CacheDriverFactory.php | 6 ++++-- tests/src/Core/Cache/RedisCacheDriverTest.php | 10 ++++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/Core/Cache/RedisCacheDriver.php b/src/Core/Cache/RedisCacheDriver.php index 6559cf6a7..ea4eb4390 100644 --- a/src/Core/Cache/RedisCacheDriver.php +++ b/src/Core/Cache/RedisCacheDriver.php @@ -20,11 +20,13 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver private $redis; /** - * @param string $redis_host - * @param int $redis_port + * @param string $redis_host + * @param int $redis_port + * @param int $redis_db (Default = 0, maximum is 15) + * @param string? $redis_pw * @throws Exception */ - public function __construct($redis_host, $redis_port) + public function __construct($redis_host, $redis_port, $redis_db = 0, $redis_pw = null) { if (!class_exists('Redis', false)) { throw new Exception('Redis class isn\'t available'); @@ -35,6 +37,14 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver if (!$this->redis->connect($redis_host, $redis_port)) { throw new Exception('Expected Redis server at ' . $redis_host . ':' . $redis_port . ' isn\'t available'); } + + if (isset($redis_pw) && !$this->redis->auth($redis_pw)) { + throw new Exception('Cannot authenticate redis server at ' . $redis_host . ':' . $redis_port); + } + + if ($redis_db !== 0 && !$this->redis->select($redis_db)) { + throw new Exception('Cannot switch to redis db ' . $redis_db . ' at ' . $redis_host . ':' . $redis_port); + } } /** diff --git a/src/Factory/CacheDriverFactory.php b/src/Factory/CacheDriverFactory.php index 1008b6794..f802d73fa 100644 --- a/src/Factory/CacheDriverFactory.php +++ b/src/Factory/CacheDriverFactory.php @@ -2,9 +2,9 @@ namespace Friendica\Factory; +use Friendica\Core\Cache; use Friendica\Core\Cache\ICacheDriver; use Friendica\Core\Config; -use Friendica\Core\Cache; /** * Class CacheDriverFactory @@ -40,8 +40,10 @@ class CacheDriverFactory case 'redis': $redis_host = Config::get('system', 'redis_host'); $redis_port = Config::get('system', 'redis_port'); + $redis_pw = Config::get('system', 'redis_password'); + $redis_db = Config::get('system', 'redis_db', 0); - return new Cache\RedisCacheDriver($redis_host, $redis_port); + return new Cache\RedisCacheDriver($redis_host, $redis_port, $redis_db, $redis_pw); break; default: return new Cache\DatabaseCacheDriver(); diff --git a/tests/src/Core/Cache/RedisCacheDriverTest.php b/tests/src/Core/Cache/RedisCacheDriverTest.php index 80baa9f4b..6e11c3b8a 100644 --- a/tests/src/Core/Cache/RedisCacheDriverTest.php +++ b/tests/src/Core/Cache/RedisCacheDriverTest.php @@ -22,6 +22,16 @@ class RedisCacheDriverTest extends MemoryCacheTest ->with('system', 'redis_port') ->andReturn(null); + $this->configMock + ->shouldReceive('get') + ->with('system', 'redis_db') + ->andReturn(3); + + $this->configMock + ->shouldReceive('get') + ->with('system', 'redis_password') + ->andReturn(null); + $this->cache = CacheDriverFactory::create('redis'); return $this->cache; }