Files
kupshop/bundles/KupShop/AgeVerifyBundle/Controller/AgeVerifyController.php
2025-08-02 16:30:27 +02:00

133 lines
4.6 KiB
PHP

<?php
declare(strict_types=1);
namespace KupShop\AgeVerifyBundle\Controller;
use KupShop\AgeVerifyBundle\Utils\AgeVerifyUtil;
use KupShop\AgeVerifyBundle\Utils\BankIdUtil;
use KupShop\AgeVerifyBundle\Utils\VerifaceUtil;
use KupShop\AgeVerifyBundle\View\AdultoView;
use KupShop\AgeVerifyBundle\View\AgeVerifyView;
use KupShop\AgeVerifyBundle\View\PackageOrderView;
use KupShop\KupShopBundle\Context\UserContext;
use KupShop\KupShopBundle\Exception\RedirectException;
use KupShop\KupShopBundle\Routing\TranslatedRoute;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Service\Attribute\Required;
class AgeVerifyController extends \Symfony\Bundle\FrameworkBundle\Controller\AbstractController
{
#[Required]
public BankIdUtil $bankIdUtil;
#[Required]
public UserContext $userContext;
#[Required]
public AgeVerifyUtil $ageVerifyUtil;
#[TranslatedRoute(path: '/#account#/#age_verify_url:AgeVerify#', name: 'ageVerify')]
public function ageVerifyAction(AgeVerifyView $view)
{
return $view->getResponse();
}
#[TranslatedRoute(path: '/#account#/#age_verify_url:AgeVerify#/#bank_id_url:AgeVerify#', name: 'ageVerifyBankId')]
public function bankIdAction(Request $request)
{
$url = $this->bankIdUtil->getRedirectUrl();
return new RedirectResponse($url);
}
#[TranslatedRoute(path: '/#account#/#age_verify_url:AgeVerify#/#package_url:AgeVerify#', name: 'ageVerifyPackage')]
public function packageOrderAction(Request $request, PackageOrderView $view)
{
$userId = $this->userContext->getActiveId();
if ($this->ageVerifyUtil->isLegalAged($userId)) {
throw new RedirectException(path('ageVerify'));
}
if ($request->isMethod('POST')) {
if ($order = $view->submitForm()) {
return new RedirectResponse(path('kupshop_content_orders_order',
['id' => $order->id, 'cf' => $order->getSecurityCode(), 'status' => 1]));
}
}
return $view->getResponse();
}
#[TranslatedRoute(path: '/#account#/#age_verify_url:AgeVerify#/#adulto_url:AgeVerify#', name: 'ageVerifyAdulto')]
public function adultoOrderAction(Request $request, AdultoView $view): Response
{
$userId = $this->userContext->getActiveId();
if ($this->ageVerifyUtil->isLegalAged($userId)) {
throw new RedirectException(path('ageVerify'));
}
if ($request->isMethod('POST')) {
if ($errorMsg = $view->submitForm()['error'] ?? null) {
addUserMessage($errorMsg);
}
return new RedirectResponse(path('ageVerify'));
}
return $view->getResponse();
}
#[Route('/_bankid')]
public function webhookBankIdAction(Request $request)
{
$code = $request->get('code');
$this->bankIdUtil->fetchData($code);
return new RedirectResponse(path('ageVerify'));
}
#[TranslatedRoute(path: '/#age_verify_url:AgeVerify#/#veriface_url:AgeVerify#', name: 'ageVerifyVeriface')]
public function verifaceAction(VerifaceUtil $verifaceUtil, SessionInterface $session, Request $request)
{
if ($request->get('source') == 'cart') {
$session->set('redirectToCart', $request->headers->get('referer'));
}
return new RedirectResponse($verifaceUtil->getRedirectUrl());
}
#[Route('/_veriface')]
public function webhookVerifaceAction(VerifaceUtil $verifaceUtil, Request $request, SessionInterface $session)
{
$verifaceUtil->saveData($request->get('sessionId'));
if ($redirect = $session->remove('redirectToCart')) {
return new RedirectResponse($redirect);
}
return new RedirectResponse(path('ageVerify'));
}
#[Route('/_veriface_notification', methods: ['POST'])]
public function verifaceNotificationAction(VerifaceUtil $verifaceUtil, Request $request)
{
$data = json_decode($request->getContent() ?? '', true);
$sessionId = $data['sessionId'];
$email = $data['referenceId'];
// Řeším jen v případě, kdy je status konečný - https://docs.veriface.eu/sk/docs/verification-statuses
if (in_array($data['status'], ['VERIFIED', 'REFUSED', 'VERIFIED_WARNING', 'CANCELLED', 'VERIFIED_MANUAL', 'REFUSED_MANUAL', 'EXPIRED', 'ERROR'])) {
$verifaceUtil->saveData($sessionId, \User::createFromLogin($email));
}
return new Response('OK');
}
}