Skip to content

Commit c3e2ad4

Browse files
committed
5124: Handled destination parameter in URL
1 parent 6cea4ea commit c3e2ad4

File tree

2 files changed

+32
-9
lines changed

2 files changed

+32
-9
lines changed

web/profiles/custom/os2loop/modules/os2loop_cura_login/src/Controller/Os2loopCuraLoginController.php

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Psr\Log\LogLevel;
2020
use Symfony\Component\DependencyInjection\Attribute\Autowire;
2121
use Symfony\Component\HttpFoundation\Exception\BadRequestException;
22+
use Symfony\Component\HttpFoundation\RedirectResponse;
2223
use Symfony\Component\HttpFoundation\Request;
2324
use Symfony\Component\HttpFoundation\Response;
2425
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
@@ -116,8 +117,8 @@ public function start(Request $request, ?string $jwt): Response {
116117
}
117118

118119
return Request::METHOD_POST === $request->getMethod()
119-
? $this->createAuthenticateResponse($user)
120-
: $this->authenticateUser($user);
120+
? $this->createAuthenticateResponse($user, $request)
121+
: $this->authenticateUser($user, $request);
121122
}
122123
catch (\Exception $exception) {
123124
$this->error('start: @message', ['@message' => $exception->getMessage(), $exception]);
@@ -146,7 +147,7 @@ public function authenticate(Request $request, string $jwt): Response {
146147
throw new BadRequestHttpException();
147148
}
148149

149-
return $this->authenticateUser($user);
150+
return $this->authenticateUser($user, $request);
150151
}
151152
catch (\Exception $exception) {
152153
$this->error('authenticate: @message', ['@message' => $exception->getMessage(), $exception]);
@@ -157,7 +158,7 @@ public function authenticate(Request $request, string $jwt): Response {
157158
/**
158159
* Create authenticate response.
159160
*/
160-
private function createAuthenticateResponse(UserInterface $user): Response {
161+
private function createAuthenticateResponse(UserInterface $user, Request $request): Response {
161162
// https://github.com/firebase/php-jwt?tab=readme-ov-file#example
162163
$payload = [
163164
// Issued at.
@@ -168,22 +169,37 @@ private function createAuthenticateResponse(UserInterface $user): Response {
168169
];
169170
$jwt = $this->encodeJwt($payload);
170171

171-
$url = Url::fromRoute('os2loop_cura_login.authenticate', [
172+
$routeParameters = [
172173
'jwt' => $jwt,
173-
])->setAbsolute()->toString(TRUE)->getGeneratedUrl();
174+
];
175+
if ($destination = $request->query->get('destination')) {
176+
$routeParameters['destination'] = $destination;
177+
}
178+
179+
$url = Url::fromRoute('os2loop_cura_login.authenticate', $routeParameters)
180+
->setAbsolute()->toString(TRUE)->getGeneratedUrl();
174181

175182
return new Response($url);
176183
}
177184

178185
/**
179186
* Authenticate user.
180187
*/
181-
private function authenticateUser($user): Response {
182-
user_login_finalize($user);
188+
private function authenticateUser($user, Request $request): Response {
189+
$this->userHelper->authenticateUser($user);
183190

184191
$this->messenger()->addStatus($this->t('Welcome Cura user @user.', ['@user' => $user->getDisplayName()]));
192+
$url = Url::fromRoute('<front>');
193+
if ($destination = $request->query->get('destination')) {
194+
try {
195+
$url = Url::fromUserInput($destination);
196+
}
197+
catch (\Exception) {
198+
// Ignore any exceptions.
199+
}
200+
}
185201

186-
return $this->redirect('<front>');
202+
return new RedirectResponse($url->setAbsolute()->toString());
187203
}
188204

189205
/**

web/profiles/custom/os2loop/modules/os2loop_cura_login/src/UserHelper.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,11 @@ public function loadUser(string $username) : ?UserInterface {
6363
return reset($users) ?: NULL;
6464
}
6565

66+
/**
67+
* Authenticate user.
68+
*/
69+
public function authenticateUser($user) {
70+
user_login_finalize($user);
71+
}
72+
6673
}

0 commit comments

Comments
 (0)