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 /lib/private/AppFramework/Middleware | |
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>
Diffstat (limited to 'lib/private/AppFramework/Middleware')
-rw-r--r-- | lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php | 21 |
1 files changed, 21 insertions, 0 deletions
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() + ); + } + } /** |