1919use Psr \Log \LogLevel ;
2020use Symfony \Component \DependencyInjection \Attribute \Autowire ;
2121use Symfony \Component \HttpFoundation \Exception \BadRequestException ;
22+ use Symfony \Component \HttpFoundation \RedirectResponse ;
2223use Symfony \Component \HttpFoundation \Request ;
2324use Symfony \Component \HttpFoundation \Response ;
2425use 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 /**
0 commit comments