<?php declare(strict_types=1);
namespace WabsAuth\Subscriber;
use Shopware\Storefront\Page\GenericPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\Session;
use WabsAuth\Helper\AuthHelper;
use WabsAuth\Helper\DebugHelper;
class LoginSubscriber implements EventSubscriberInterface
{
/**
* @var Session
*/
private $session;
/**
* @var AuthHelper
*/
private $authHelper;
/**
* @var DebugHelper
*/
private $logger;
/**
* @var RequestStack
*/
private $requestStack;
/**
* LoginSubscriber constructor.
* @param Session $session
* @param AuthHelper $authHelper
* @param RequestStack $requestStack
* @param DebugHelper $logger
*/
public function __construct(
Session $session,
AuthHelper $authHelper,
RequestStack $requestStack,
DebugHelper $logger
) {
$this->session = $session;
$this->authHelper = $authHelper;
$this->logger = $logger;
$this->requestStack = $requestStack;
}
public static function getSubscribedEvents()
{
return [
// NestedEvent::class => [
// SalesChannelContextResolvedEvent::class => [
// PageLoadedEvent::class => [
// StorefrontRenderEvent::class => [
GenericPageLoadedEvent::class => [
['addOAuthURL'],
['checkIntranetParameter'],
['loadCustomerGroup']
],
];
}
/**
* Adds the customer group to the customer and adds the customer back to the context to use in twig.
*
* @param GenericPageLoadedEvent $event
*/
public function loadCustomerGroup(GenericPageLoadedEvent $event): void
{
// Check if we have a logged in customer
$customer = $event->getSalesChannelContext()->getCustomer();
if ($customer === null) {
return;
}
// Customer Group is not loaded by default, so we add it here
$customer = $this->authHelper->loadCustomerGroupToCustomer($customer, $event->getSalesChannelContext());
if ($customer === null) {
return;
}
// Assign the customer to the customer in the context
$event->getContext()->assign(['customer' => $customer]);
}
public function addOAuthURL(GenericPageLoadedEvent $event): void
{
}
public function checkIntranetParameter(GenericPageLoadedEvent $event)
{
$hamParameter = $event->getRequest()->query->get('ham', null);
if(!$hamParameter) {
return;
}
$this->session->set('oauth_redirect_to', $event->getRequest()->getPathInfo());
$this->session->set('oauth_auto_group', 'Hauptamtlicher');
// Redirect Customer directly to the login oAuth page
$provider = $this->authHelper->getProvider();
$url = $provider->getAuthorizationUrl();
$this->session->set('oauthState', $provider->getState());
$response = new RedirectResponse($url);
$response->send();
}
}