133 lines
4.6 KiB
PHP
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');
|
|
}
|
|
}
|