attributes->get('_route'); } public function authenticate(Request $request): Passport { $client = $this->clientRegistry->getClient('openstreetmap'); $accessToken = $this->fetchAccessToken($client); $session = $request->getSession(); $session->set('access_token', $accessToken); return new SelfValidatingPassport( new UserBadge($accessToken->getToken(), function () use ($accessToken, $client) { $resourceOwner = $client->fetchUserFromToken($accessToken); $existingUser = $this->entityManager->getRepository(User::class)->findOneBy(['osmId' => $resourceOwner->getId()]); if ($existingUser) { return $existingUser; } $user = new User(); $user->setOsmId($resourceOwner->getId()); $user->setUsername($resourceOwner->getDisplayName()); $this->entityManager->persist($user); $this->entityManager->flush(); return $user; }) ); } public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response { return null; } public function onAuthenticationFailure(Request $request, AuthenticationException $exception): ?Response { return null; } public function start(Request $request, ?AuthenticationException $authException = null): Response { $session = $request->getSession(); if ($session->has('referer')) { return new RedirectResponse($session->get('referer')); } else { return new RedirectResponse($this->router->generate('app_osm_request')); } } }