|
|
|
@ -3,9 +3,11 @@ |
|
|
|
|
declare(strict_types=1); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @copyright Copyright (c) 2023 Joas Schilling <coding@schilljs.com> |
|
|
|
|
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> |
|
|
|
|
* |
|
|
|
|
* @author Christoph Wurst <christoph@winzerhof-wurst.at> |
|
|
|
|
* @author Joas Schilling <coding@schilljs.com> |
|
|
|
|
* @author Lukas Reschke <lukas@statuscode.ch> |
|
|
|
|
* @author Morris Jobke <hey@morrisjobke.de> |
|
|
|
|
* @author Roeland Jago Douma <roeland@famdouma.nl> |
|
|
|
@ -31,6 +33,7 @@ namespace OC\Security\RateLimiting\Backend; |
|
|
|
|
use OCP\AppFramework\Utility\ITimeFactory; |
|
|
|
|
use OCP\ICache; |
|
|
|
|
use OCP\ICacheFactory; |
|
|
|
|
use OCP\IConfig; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Class MemoryCacheBackend uses the configured distributed memory cache for storing |
|
|
|
@ -39,17 +42,18 @@ use OCP\ICacheFactory; |
|
|
|
|
* @package OC\Security\RateLimiting\Backend |
|
|
|
|
*/ |
|
|
|
|
class MemoryCacheBackend implements IBackend { |
|
|
|
|
/** @var IConfig */ |
|
|
|
|
private $config; |
|
|
|
|
/** @var ICache */ |
|
|
|
|
private $cache; |
|
|
|
|
/** @var ITimeFactory */ |
|
|
|
|
private $timeFactory; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param ICacheFactory $cacheFactory |
|
|
|
|
* @param ITimeFactory $timeFactory |
|
|
|
|
*/ |
|
|
|
|
public function __construct(ICacheFactory $cacheFactory, |
|
|
|
|
ITimeFactory $timeFactory) { |
|
|
|
|
public function __construct( |
|
|
|
|
IConfig $config, |
|
|
|
|
ICacheFactory $cacheFactory, |
|
|
|
|
ITimeFactory $timeFactory) { |
|
|
|
|
$this->config = $config; |
|
|
|
|
$this->cache = $cacheFactory->createDistributed(__CLASS__); |
|
|
|
|
$this->timeFactory = $timeFactory; |
|
|
|
|
} |
|
|
|
@ -121,6 +125,11 @@ class MemoryCacheBackend implements IBackend { |
|
|
|
|
|
|
|
|
|
// Store the new attempt |
|
|
|
|
$existingAttempts[] = (string)($currentTime + $period); |
|
|
|
|
|
|
|
|
|
if (!$this->config->getSystemValueBool('ratelimit.protection.enabled', true)) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$this->cache->set($identifier, json_encode($existingAttempts)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|