diff options
author | Julius Härtl <jus@bitgrid.net> | 2024-07-17 08:49:21 +0200 |
---|---|---|
committer | Julius Härtl <jus@bitgrid.net> | 2024-07-17 08:49:21 +0200 |
commit | 6da47e2b1fb33af7ff1b7247eb082ece565216f6 (patch) | |
tree | 216459174e096153e90f2b4a44a998129c5e8955 | |
parent | 4362ed53614c900c53986b694ea3eea3799ab9c1 (diff) | |
download | nextcloud-server-rfc/global-rate-limit.tar.gz nextcloud-server-rfc/global-rate-limit.zip |
feat: Add global rate limiting configrfc/global-rate-limit
Signed-off-by: Julius Härtl <jus@bitgrid.net>
-rw-r--r-- | lib/private/AppFramework/DependencyInjection/DIContainer.php | 3 | ||||
-rw-r--r-- | lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php | 21 |
2 files changed, 23 insertions, 1 deletions
diff --git a/lib/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php index 4add17396b0..33b50d78c86 100644 --- a/lib/private/AppFramework/DependencyInjection/DIContainer.php +++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php @@ -277,7 +277,8 @@ class DIContainer extends SimpleContainer implements IAppContainer { $c->get(IUserSession::class), $c->get(IControllerMethodReflector::class), $c->get(OC\Security\RateLimiting\Limiter::class), - $c->get(ISession::class) + $c->get(ISession::class), + $c->get(IConfig::class) ) ); $dispatcher->registerMiddleware( diff --git a/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php b/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php index d593bf5019f..57037aa4328 100644 --- a/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php +++ b/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php @@ -19,6 +19,7 @@ use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\Response; use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Middleware; +use OCP\IConfig; use OCP\IRequest; use OCP\ISession; use OCP\IUserSession; @@ -52,6 +53,7 @@ class RateLimitingMiddleware extends Middleware { protected ControllerMethodReflector $reflector, protected Limiter $limiter, protected ISession $session, + protected IConfig $config, ) { } @@ -93,7 +95,26 @@ class RateLimitingMiddleware extends Middleware { $rateLimit->getPeriod(), $this->request->getRemoteAddress() ); + return; } + + $globalLimit = $this->config->getSystemValueInt('global-rate-limit.limit', 10); + $globalPeriod = $this->config->getSystemValueInt('global-rate-limit.period', 1); + + if ($globalLimit > 0 && $globalPeriod > 0) { + $this->userSession->isLoggedIn() ? $this->limiter->registerUserRequest( + $rateLimitIdentifier, + $globalLimit, + $globalPeriod, + $this->userSession->getUser() + ) : $this->limiter->registerAnonRequest( + $rateLimitIdentifier, + $globalLimit, + $globalPeriod, + $this->request->getRemoteAddress() + ); + } + } /** |