|
10 | 10 | use OC\Authentication\TwoFactorAuth\Manager; |
11 | 11 | use OC_User; |
12 | 12 | use OCP\AppFramework\Controller; |
| 13 | +use OCP\AppFramework\Http\Attribute\BruteForceProtection; |
13 | 14 | use OCP\AppFramework\Http\Attribute\FrontpageRoute; |
14 | 15 | use OCP\AppFramework\Http\Attribute\NoAdminRequired; |
15 | 16 | use OCP\AppFramework\Http\Attribute\NoCSRFRequired; |
@@ -161,6 +162,7 @@ public function showChallenge($challengeProviderId, $redirect_url) { |
161 | 162 | #[NoCSRFRequired] |
162 | 163 | #[UseSession] |
163 | 164 | #[FrontpageRoute(verb: 'POST', url: '/login/challenge/{challengeProviderId}')] |
| 165 | + #[BruteForceProtection(action: 'solveChallenge')] |
164 | 166 | public function solveChallenge($challengeProviderId, $challenge, $redirect_url = null) { |
165 | 167 | $user = $this->userSession->getUser(); |
166 | 168 | $provider = $this->twoFactorManager->getProvider($user, $challengeProviderId); |
@@ -188,10 +190,12 @@ public function solveChallenge($challengeProviderId, $challenge, $redirect_url = |
188 | 190 | $uid = $user->getUID(); |
189 | 191 | $this->logger->warning("Two-factor challenge failed: $uid (Remote IP: $ip)"); |
190 | 192 | $this->session->set('two_factor_auth_error', true); |
191 | | - return new RedirectResponse($this->urlGenerator->linkToRoute('core.TwoFactorChallenge.showChallenge', [ |
| 193 | + $response = new RedirectResponse($this->urlGenerator->linkToRoute('core.TwoFactorChallenge.showChallenge', [ |
192 | 194 | 'challengeProviderId' => $provider->getId(), |
193 | 195 | 'redirect_url' => $redirect_url, |
194 | 196 | ])); |
| 197 | + $response->throttle(['user' => $uid, 'provider' => $challengeProviderId]); |
| 198 | + return $response; |
195 | 199 | } |
196 | 200 |
|
197 | 201 | #[NoAdminRequired] |
|
0 commit comments