<?php
declare(strict_types=1);
namespace App\Controller\Website;
use App\Helper\Partner\PartnerHelper;
use App\Helper\SuluHelper;
use Croisiland\CommonBundle\Partner\AuthenticateForm\PartnerAuthenticateFormProviderInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
class PartnerAuthController extends AbstractController
{
public function __construct(
private readonly PartnerHelper $partnerHelper,
private readonly SuluHelper $suluHelper,
private readonly PartnerAuthenticateFormProviderInterface $authenticateFormProvider,
) {}
public function authForm(Request $request, SessionInterface $session): Response
{
$partner = $this->partnerHelper->getCurrentPartner();
if ($partner === null) {
throw $this->createNotFoundException('Partenaire non trouvé.');
}
if ($this->authenticateFormProvider->needExternalFormAuthentification($partner)) {
return $this->redirect(
$this->authenticateFormProvider->getExternalFormAuthentificationUrl($partner)
);
}
$form = $this->authenticateFormProvider->getForm($partner, null, null, true);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$session->set($this->partnerHelper->getPartnerSessionKey($partner), true);
// TODO redirect to referer using SULU tools
return $this->redirect(
$this->suluHelper->getContentRootPath()
);
}
return $this->render('partner/auth_form.html.twig', [
'form' => $form->createView(),
]);
}
public function logout(SessionInterface $session): Response
{
$partner = $this->partnerHelper->getCurrentPartner();
if ($partner === null) {
return $this->redirect(
$this->suluHelper->getContentRootPath()
);
}
$session->remove($this->partnerHelper->getPartnerSessionKey($partner));
return $this->redirectToRoute('website_partner_auth.login');
}
}