summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Wurst <christoph@winzerhof-wurst.at>2024-04-09 08:12:21 +0200
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>2024-04-23 07:37:08 +0000
commit76e4d54d3b0f6a4d35b0ef86df2e35029d31947b (patch)
tree0f6cc3b2d19d90c4879dae8f94ab963bda65ff28
parent7da3f878171fa38c1ec99ae9d0b60917dd19ae3e (diff)
fix(auth): Keep redirect URL during 2FA setup and challengebackport/44745/stable28
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at> [skip ci]
-rw-r--r--core/Controller/TwoFactorChallengeController.php3
-rw-r--r--core/Middleware/TwoFactorMiddleware.php6
-rw-r--r--core/templates/twofactorsetupselection.php1
-rw-r--r--tests/Core/Controller/TwoFactorChallengeControllerTest.php9
4 files changed, 14 insertions, 5 deletions
diff --git a/core/Controller/TwoFactorChallengeController.php b/core/Controller/TwoFactorChallengeController.php
index bc25121034b..bfb2c91ed6d 100644
--- a/core/Controller/TwoFactorChallengeController.php
+++ b/core/Controller/TwoFactorChallengeController.php
@@ -215,6 +215,7 @@ class TwoFactorChallengeController extends Controller {
$data = [
'providers' => $setupProviders,
'logout_url' => $this->getLogoutUrl(),
+ 'redirect_url' => $redirect_url,
];
return new StandaloneTemplateResponse($this->appName, 'twofactorsetupselection', $data, 'guest');
@@ -245,6 +246,7 @@ class TwoFactorChallengeController extends Controller {
$data = [
'provider' => $provider,
'logout_url' => $this->getLogoutUrl(),
+ 'redirect_url' => $redirect_url,
'template' => $tmpl->fetchPage(),
];
$response = new StandaloneTemplateResponse($this->appName, 'twofactorsetupchallenge', $data, 'guest');
@@ -262,6 +264,7 @@ class TwoFactorChallengeController extends Controller {
'core.TwoFactorChallenge.showChallenge',
[
'challengeProviderId' => $providerId,
+ 'redirect_url' => $redirect_url,
]
));
}
diff --git a/core/Middleware/TwoFactorMiddleware.php b/core/Middleware/TwoFactorMiddleware.php
index 4b5618eb23d..682df1312d6 100644
--- a/core/Middleware/TwoFactorMiddleware.php
+++ b/core/Middleware/TwoFactorMiddleware.php
@@ -134,8 +134,10 @@ class TwoFactorMiddleware extends Middleware {
public function afterException($controller, $methodName, Exception $exception) {
if ($exception instanceof TwoFactorAuthRequiredException) {
- $params = [];
- if (isset($this->request->server['REQUEST_URI'])) {
+ $params = [
+ 'redirect_url' => $this->request->getParam('redirect_url'),
+ ];
+ if (!isset($params['redirect_url']) && isset($this->request->server['REQUEST_URI'])) {
$params['redirect_url'] = $this->request->server['REQUEST_URI'];
}
return new RedirectResponse($this->urlGenerator->linkToRoute('core.TwoFactorChallenge.selectChallenge', $params));
diff --git a/core/templates/twofactorsetupselection.php b/core/templates/twofactorsetupselection.php
index 4ef19d86349..fb8db49cf17 100644
--- a/core/templates/twofactorsetupselection.php
+++ b/core/templates/twofactorsetupselection.php
@@ -33,6 +33,7 @@ declare(strict_types=1);
href="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.TwoFactorChallenge.setupProvider',
[
'providerId' => $provider->getId(),
+ 'redirect_url' => $_['redirect_url'],
]
)) ?>">
<?php
diff --git a/tests/Core/Controller/TwoFactorChallengeControllerTest.php b/tests/Core/Controller/TwoFactorChallengeControllerTest.php
index baf7feaa068..c937b925997 100644
--- a/tests/Core/Controller/TwoFactorChallengeControllerTest.php
+++ b/tests/Core/Controller/TwoFactorChallengeControllerTest.php
@@ -337,7 +337,7 @@ class TwoFactorChallengeControllerTest extends TestCase {
$this->assertEquals($expected, $this->controller->solveChallenge('myprovider', 'token', '/url'));
}
- public function testSetUpProviders() {
+ public function testSetUpProviders(): void {
$user = $this->createMock(IUser::class);
$this->userSession->expects($this->once())
->method('getUser')
@@ -357,6 +357,7 @@ class TwoFactorChallengeControllerTest extends TestCase {
$provider,
],
'logout_url' => 'logoutAttribute',
+ 'redirect_url' => null,
],
'guest'
);
@@ -392,7 +393,7 @@ class TwoFactorChallengeControllerTest extends TestCase {
$this->assertEquals($expected, $response);
}
- public function testSetUpProvider() {
+ public function testSetUpProvider(): void {
$user = $this->createMock(IUser::class);
$this->userSession->expects($this->once())
->method('getUser')
@@ -426,6 +427,7 @@ class TwoFactorChallengeControllerTest extends TestCase {
'provider' => $provider,
'logout_url' => 'logoutAttribute',
'template' => 'tmpl',
+ 'redirect_url' => null,
],
'guest'
);
@@ -435,13 +437,14 @@ class TwoFactorChallengeControllerTest extends TestCase {
$this->assertEquals($expected, $response);
}
- public function testConfirmProviderSetup() {
+ public function testConfirmProviderSetup(): void {
$this->urlGenerator->expects($this->once())
->method('linkToRoute')
->with(
'core.TwoFactorChallenge.showChallenge',
[
'challengeProviderId' => 'totp',
+ 'redirect_url' => null,
])
->willReturn('2fa/select/page');
$expected = new RedirectResponse('2fa/select/page');