From a8db1654ca6dcbb65c3795299320e711770d2093 Mon Sep 17 00:00:00 2001 From: Cristian Scheid Date: Thu, 30 Apr 2026 15:03:23 -0300 Subject: [PATCH] fix(slave-controller): add brute force protection and avoid saving token on debug log Signed-off-by: Cristian Scheid --- lib/Controller/SlaveController.php | 58 +++++++++++++++--------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/lib/Controller/SlaveController.php b/lib/Controller/SlaveController.php index 4deafc2b..cfb8792e 100644 --- a/lib/Controller/SlaveController.php +++ b/lib/Controller/SlaveController.php @@ -20,6 +20,11 @@ use OCA\GlobalSiteSelector\Vendor\Firebase\JWT\JWT; use OCA\GlobalSiteSelector\Vendor\Firebase\JWT\Key; use OCP\AppFramework\Http; +use OCP\AppFramework\Http\Attribute\BruteForceProtection; +use OCP\AppFramework\Http\Attribute\NoAdminRequired; +use OCP\AppFramework\Http\Attribute\NoCSRFRequired; +use OCP\AppFramework\Http\Attribute\PublicPage; +use OCP\AppFramework\Http\Attribute\UseSession; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\RedirectResponse; use OCP\AppFramework\OCSController; @@ -60,15 +65,10 @@ public function __construct( parent::__construct($appName, $request); } - /** - * @PublicPage - * @NoCSRFRequired - * @UseSession - * - * @param string $jwt - * - * @return RedirectResponse - */ + #[PublicPage] + #[NoCSRFRequired] + #[UseSession] + #[BruteForceProtection(action: 'autoLogin')] public function autoLogin(string $jwt): RedirectResponse { $this->logger->debug('autologin incoming request with ' . $jwt); @@ -79,11 +79,10 @@ public function autoLogin(string $jwt): RedirectResponse { return new RedirectResponse(''); } - if ($this->gss->isMaster()) { - return new RedirectResponse($masterUrl); - } - if ($jwt === '') { - return new RedirectResponse($masterUrl); + if ($this->gss->isMaster() || $jwt === '') { + $response = new RedirectResponse($masterUrl); + $response->throttle(); + return $response; } try { @@ -129,12 +128,14 @@ public function autoLogin(string $jwt): RedirectResponse { } } catch (ExpiredException $e) { $this->logger->info('token expired'); - - return new RedirectResponse($masterUrl); + $response = new RedirectResponse($masterUrl); + $response->throttle(); + return $response; } catch (\Exception $e) { $this->logger->warning('issue during login process', ['exception' => $e]); - - return new RedirectResponse($masterUrl); + $response = new RedirectResponse($masterUrl); + $response->throttle(); + return $response; } $this->logger->debug('all good. creating session'); @@ -149,17 +150,14 @@ public function autoLogin(string $jwt): RedirectResponse { return new RedirectResponse($home); } - /** - * Create app token - * - * @PublicPage - * @NoAdminRequired - * - * @return DataResponse - */ - public function createAppToken($jwt) { + #[PublicPage] + #[NoAdminRequired] + #[BruteForceProtection(action: 'createAppToken')] + public function createAppToken($jwt): DataResponse { if ($this->gss->getMode() === 'master' || empty($jwt)) { - return new DataResponse([], Http::STATUS_BAD_REQUEST); + $response = new DataResponse([], Http::STATUS_BAD_REQUEST); + $response->throttle(); + return $response; } try { @@ -184,7 +182,9 @@ public function createAppToken($jwt) { $this->logger->info('issue while token creation', ['exception' => $e]); } - return new DataResponse([], Http::STATUS_BAD_REQUEST); + $response = new DataResponse([], Http::STATUS_BAD_REQUEST); + $response->throttle(); + return $response; } /**