<?php
|
|
|
|
namespace App\Controller;
|
|
|
|
use KnpU\OAuth2ClientBundle\Client\ClientRegistry;
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
use Symfony\Bundle\SecurityBundle\Security;
|
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\Routing\Attribute\Route;
|
|
|
|
class HomeController extends AbstractController
|
|
{
|
|
// Page d’accueil du site
|
|
#[Route('/', name: 'app_home')]
|
|
public function index(): Response
|
|
{
|
|
return $this->render('home/index.html.twig', [
|
|
]);
|
|
}
|
|
|
|
// Page d’erreur
|
|
public function error(Request $request, $exception, $logger = null): Response
|
|
{
|
|
$this->addFlash('danger', $exception->getMessage()); // . ' ' . $exception->getFile() . ':' . $exception->getLine());
|
|
|
|
// Si le referer est renseigné on renvoie vers celui-ci où le message d’erreur sera affiché
|
|
if ($request->headers->has('Referer')) {
|
|
return $this->redirect($request->headers->get('Referer'));
|
|
}
|
|
|
|
return $this->render('home/error.html.twig', [
|
|
]);
|
|
}
|
|
|
|
// L’oauth OSM commence ici
|
|
#[Route('/osm/request', name: 'app_osm_request')]
|
|
public function osmRequest(Request $request, ClientRegistry $clientRegistry): Response
|
|
{
|
|
// Se souvient d’où l’on vient pour pouvoir y retourner après la connexion
|
|
if ($request->headers->has('Referer')) {
|
|
$session = $request->getSession();
|
|
$session->set('referer', $request->headers->get('Referer'));
|
|
}
|
|
|
|
return $clientRegistry
|
|
->getClient('openstreetmap') // cf `config/packages/knpu_oauth2_client.yaml`
|
|
->redirect([
|
|
'read_prefs', // TODO est-ce qu’on a même besoin de ça ?
|
|
]);
|
|
}
|
|
|
|
// L’oauth OSM aboutit ici
|
|
#[Route('/osm/callback', name: 'app_osm_callback')]
|
|
public function osmCallback(Request $request, ClientRegistry $clientRegistry): Response
|
|
{
|
|
$client = $clientRegistry->getClient('openstreetmap');
|
|
|
|
if ($request->query->has('error')) {
|
|
$this->addFlash('danger', sprintf(
|
|
'Échec de l’authentification (%s)',
|
|
$request->query->has('error_description') ? $request->query->get('error_description') : $request->query->get('error')
|
|
));
|
|
} else {
|
|
$this->addFlash('success', 'Authentification OSM réussie !');
|
|
}
|
|
|
|
$session = $request->getSession();
|
|
|
|
return $session->has('referer') ? new RedirectResponse($session->get('referer'), Response::HTTP_TEMPORARY_REDIRECT) : $this->redirectToRoute('app_home');
|
|
}
|
|
|
|
// La déconnexion passe par là mais c’est pas lié à l’oauth
|
|
#[Route('/osm/logout', name: 'app_osm_logout')]
|
|
public function osmLogout(Request $request, Security $security): Response
|
|
{
|
|
return $security->logout();
|
|
}
|
|
}
|