app/Plugin/SSRecaptchaV342/Event.php line 65

Open in your IDE?
  1. <?php
  2. namespace Plugin\SSRecaptchaV342;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Eccube\Event\TemplateEvent;
  5. use Plugin\SSRecaptchaV342\Repository\ConfigRepository;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use ReCaptcha\ReCaptcha;
  10. use Symfony\Component\Routing\RouterInterface;
  11. class Event implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var Config
  15.      */
  16.     private $Config;
  17.     /**
  18.      * @var RouterInterface
  19.      */
  20.     private $router;
  21.     public function __construct(ConfigRepository $configRepositoryRouterInterface $router)
  22.     {
  23.         $this->Config $configRepository->get();
  24.         $this->router $router;
  25.     }
  26.     /**
  27.      * @return array
  28.      */
  29.     public static function getSubscribedEvents()
  30.     {
  31.         return [
  32.             'Mypage/login.twig' => 'onRenderMypageLogin',
  33.             'Shopping/login.twig' => 'onRenderShoppingLogin',
  34.             'Entry/index.twig' => 'onRenderEntryIndex',
  35.             'Mypage/change.twig' => 'onRenderMypageChange',
  36.             'Forgot/index.twig' => 'onRenderForgotIndex',
  37.             'Contact/index.twig' => 'onRenderContactIndex',
  38.             'Shopping/index.twig' => 'onRenderShoppingIndex',
  39.             'Shopping/nonmember.twig' => 'onRenderShoppingNonmember',
  40.             KernelEvents::REQUEST => ['onRequest'9]
  41.         ];
  42.     }
  43.     /**
  44.      * @param TemplateEvent $event
  45.      */
  46.     public function onRenderMypageLogin(TemplateEvent $event)
  47.     {
  48.         if(is_null($this->Config) || !$this->Config->getIsLogin()) return;
  49.         $parameters $event->getParameters();
  50.         $event->setParameter('site_key',$this->Config->getSiteKey());
  51.         $event->setParameter('is_hide_badge',!$this->Config->getIsBadge());
  52.         $event->addSnippet('@SSRecaptchaV342/Mypage/login.twig');
  53.     }
  54.     /**
  55.      * @param TemplateEvent $event
  56.      */
  57.     public function onRenderShoppingLogin(TemplateEvent $event)
  58.     {
  59.         if(is_null($this->Config) || !$this->Config->getIsLogin()) return;
  60.         $parameters $event->getParameters();
  61.         $event->setParameter('site_key',$this->Config->getSiteKey());
  62.         $event->setParameter('is_hide_badge',!$this->Config->getIsBadge());
  63.         $event->addSnippet('@SSRecaptchaV342/Shopping/login.twig');
  64.     }
  65.     /**
  66.      * @param TemplateEvent $event
  67.      */
  68.     public function onRenderEntryIndex(TemplateEvent $event)
  69.     {
  70.         if(is_null($this->Config) || !$this->Config->getIsEntryCustomer()) return;
  71.         $parameters $event->getParameters();
  72.         $event->setParameter('site_key',$this->Config->getSiteKey());
  73.         $event->setParameter('is_hide_badge',!$this->Config->getIsBadge());
  74.         $event->addSnippet('@SSRecaptchaV342/Entry/index.twig');
  75.     }
  76.     /**
  77.      * @param TemplateEvent $event
  78.      */
  79.     public function onRenderMypageChange(TemplateEvent $event)
  80.     {
  81.         if(is_null($this->Config) || !$this->Config->getIsChangeCustomer()) return;
  82.         $parameters $event->getParameters();
  83.         $event->setParameter('site_key',$this->Config->getSiteKey());
  84.         $event->setParameter('is_hide_badge',!$this->Config->getIsBadge());
  85.         $event->addSnippet('@SSRecaptchaV342/Mypage/change.twig');
  86.     }
  87.     /**
  88.      * @param TemplateEvent $event
  89.      */
  90.     public function onRenderForgotIndex(TemplateEvent $event)
  91.     {
  92.         if(is_null($this->Config) || !$this->Config->getIsForgot()) return;
  93.         $parameters $event->getParameters();
  94.         $event->setParameter('site_key',$this->Config->getSiteKey());
  95.         $event->setParameter('is_hide_badge',!$this->Config->getIsBadge());
  96.         $event->addSnippet('@SSRecaptchaV342/Forgot/index.twig');
  97.     }
  98.     /**
  99.      * @param TemplateEvent $event
  100.      */
  101.     public function onRenderContactIndex(TemplateEvent $event)
  102.     {
  103.         if(is_null($this->Config) || !$this->Config->getIsContact()) return;
  104.         $parameters $event->getParameters();
  105.         $event->setParameter('site_key',$this->Config->getSiteKey());
  106.         $event->setParameter('is_hide_badge',!$this->Config->getIsBadge());
  107.         $event->addSnippet('@SSRecaptchaV342/Contact/index.twig');
  108.     }
  109.     /**
  110.      * @param TemplateEvent $event
  111.      */
  112.     public function onRenderShoppingIndex(TemplateEvent $event)
  113.     {
  114.         if(is_null($this->Config) || !$this->Config->getIsShopping()) return;
  115.         $parameters $event->getParameters();
  116.         $event->setParameter('site_key',$this->Config->getSiteKey());
  117.         $event->setParameter('is_hide_badge',!$this->Config->getIsBadge());
  118.         $event->addSnippet('@SSRecaptchaV342/Shopping/index.twig');
  119.     }
  120.     /**
  121.      * @param TemplateEvent $event
  122.      */
  123.     public function onRenderShoppingNonmember(TemplateEvent $event)
  124.     {
  125.         if(is_null($this->Config) || !$this->Config->getIsShoppingNonmember()) return;
  126.         $parameters $event->getParameters();
  127.         $event->setParameter('site_key',$this->Config->getSiteKey());
  128.         $event->setParameter('is_hide_badge',!$this->Config->getIsBadge());
  129.         $event->addSnippet('@SSRecaptchaV342/Shopping/nonmember.twig');
  130.     }
  131.     public function onRequest(RequestEvent $event)
  132.     {
  133.         if(is_null($this->Config)) return;
  134.         $pageName $event->getRequest()->attributes->get('_route');
  135.         $action '';
  136.         $response null;
  137.         $isMode false;
  138.         if($event->getRequest()->getMethod() !== 'POST') return;
  139.         switch($pageName){
  140.             case 'mypage_login':
  141.             case 'shopping_login':
  142.                 $action 'login';
  143.                 if(!$this->Config->getIsLogin()) return;
  144.                 break;
  145.             case 'entry':
  146.                 $action 'entry';
  147.                 if(!$this->Config->getIsEntryCustomer()) return;
  148.                 $isMode true;
  149.                 break;
  150.             case 'mypage_change':
  151.                 $action 'mypage_change';
  152.                 if(!$this->Config->getIsChangeCustomer()) return;
  153.                 break;
  154.             case 'forgot':
  155.                 $action 'forgot';
  156.                 if(!$this->Config->getIsForgot()) return;
  157.                 break;
  158.             case 'contact':
  159.                 $action 'contact';
  160.                 if(!$this->Config->getIsContact()) return;
  161.                 $isMode true;
  162.                 break;
  163.             case 'shopping_confirm':
  164.                 $action 'shopping';
  165.                 $response = new RedirectResponse($this->router->generate('shopping'));
  166.                 if(!$this->Config->getIsShopping()) return;
  167.                 $isMode true;
  168.                 break;
  169.             case 'shopping_nonmember':
  170.                 $action 'shopping_nonmember';
  171.                 if(!$this->Config->getIsShoppingNonmember()) return;
  172.                 break;
  173.             default:
  174.                 return;
  175.         }
  176.         $flashBag $event->getRequest()->getSession()->getFlashBag();
  177.         $token $event->getRequest()->get('ss_recaptcha_v342_token');
  178.         if(!empty($token)){
  179.             $recaptcha = new ReCaptcha($this->Config->getSecKey());
  180.             $res $recaptcha
  181.                 ->setExpectedHostname($event->getRequest()->server->get('SERVER_NAME'))
  182.                 ->setExpectedAction($action)
  183.                 ->setScoreThreshold($this->Config->getScore())
  184.                 ->verify($token$event->getRequest()->server->get('REMOTE_ADDR'))
  185.             ;
  186.             if(!$res->isSuccess()){
  187.                 $errors $res->getErrorCodes();
  188.                 $flashBag->add(
  189.                     'ss_recaptcha_v342_error',
  190.                     'ロボットからのアクセスの可能性がある為、処理を中断しました。'
  191.                 );
  192.                 if(is_null($response)) $response = new RedirectResponse($event->getRequest()->getRequestUri());
  193.                 $event->setResponse($response);
  194.             }
  195.         }
  196.         elseif($isMode && !empty($event->getRequest()->get('mode')) && $event->getRequest()->get('mode') !== 'confirm') return;
  197.         else{
  198.             $flashBag->add(
  199.                 'ss_recaptcha_v342_error',
  200.                 'reCAPTCHAの検証が出来なかった為、処理を中断しました。'
  201.             );
  202.             if(is_null($response)) $response = new RedirectResponse($event->getRequest()->getRequestUri());
  203.             $event->setResponse($response);
  204.         }
  205.         if($event->getRequest()->request->has('ss_recaptcha_v342_token')) $event->getRequest()->request->remove('ss_recaptcha_v342_token');
  206.     }
  207. }