<?php
namespace App\Controller\Services;
use Symfony\Component\HttpClient\HttpClient;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use KnpU\OAuth2ClientBundle\Client\ClientRegistry;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
use Symfony\Component\Routing\RouterInterface;
#[Route(host: "serviceslenord.spontaneit.fr")]
//#[Route(host: "services.lenord.fr")]
class KeycloakController extends AbstractController
{
/**
* Link to this controller to start the "connect" process
*
* @Route("/connect/oauth", name="connect_keycloak")
*/
public function connectAction(ClientRegistry $clientRegistry, Request $request, RouterInterface $router)
{
$session = $request->getSession();
$referer = $request->headers->get('referer');
$session->set('path', $referer);
if ($session->get('path') == null) {
/*$baseUrl = $request->getSchemeAndHttpHost();
$referer = str_replace($baseUrl, '', $referer);
$refererRouteName = $router->match($referer)['_route'];
$session->set('path', urlencode($this->generateUrl($refererRouteName, [], UrlGeneratorInterface::ABSOLUTE_URL)));
*/
//$session->set('path', $refererRouteName);
}
//dd($session);
/** @var KeycloakClient $client */
$client = $clientRegistry->getClient('keycloak');
return $client->redirect(['openid email profile roles']);
}
/**
* @Route("/connect/oauth/check", name="connect_auth_check")
*/
public function connectCheckAction()
{
}
/**
* @Route("/oauth/logout/check", name="oauth_logout_check")
*/
public function logoutCheckAction(Request $request): RedirectResponse
{
$session = $request->getSession();
$session->remove('unauthentified');
return $this->redirectToRoute('app_logout');
}
/**
* @Route("/oauth/logout", name="oauth_logout")
*/
public function logout(ClientRegistry $clientRegistry, Request $request ): RedirectResponse
{
$keycloakBaseUrl = $_ENV['KEYCLOAK_BASE'];
$clientid = $_ENV['KEYCLOAK_CLIENTID'];
$redirectAfterLogout = urlencode($this->generateUrl('oauth_logout_check', [], UrlGeneratorInterface::ABSOLUTE_URL));
$logoutUrl = "{$keycloakBaseUrl}/protocol/openid-connect/logout?client_id={$clientid}&post_logout_redirect_uri={$redirectAfterLogout}";
return new RedirectResponse($logoutUrl);
}
/**
* Link to this controller to start the "connect" process
*
* @Route("/connect/oauth/silent", name="connect_silently_keycloak")
*/
public function connectSilentlyAction(ClientRegistry $clientRegistry)
{
/** @var KeycloakClient $client */
$client = $clientRegistry->getClient('keycloak');
return $client->redirect(['openid email profile roles'], ['prompt' => 'none']);
}
}