src/Controller/DefaultController.php line 19

Open in your IDE?
  1. <?php
  2. /**
  3.  * This file is part of the Pimcore X Installation by
  4.  * ercas GmbH & CO. KG <https://www.ercasdieagentur.de>
  5.  *
  6.  *  @license GPLv3
  7.  */
  8. namespace App\Controller;
  9. use App\mvk\Model\DataObject\AbstractUser;
  10. use Pimcore\Controller\FrontendController;
  11. use Pimcore\Model\Document;
  12. use Pimcore\Model\WebsiteSetting;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\HttpFoundation\Request;
  15. class DefaultController extends FrontendController
  16. {
  17.     public function damageAction(Request $request)
  18.     {
  19.         return $this->render('layout/damage-declaration.html.twig', []);
  20.     }
  21.     public function defaultAction(Request $request)
  22.     {
  23.         $user $this->getUser();
  24.         $documentId $this->document->getId();
  25.         $excludedPaths $this->getWebSettingValueMultiple('2FA_ignoreDocument');
  26.         // Check if the user has access to the page
  27.         $access $this->checkPagePermissions();
  28.         if (!$access) {
  29.             $accessDeniedDocument $this->getAccessDeniedDocument();
  30.             $baseUrl '';
  31.             return new RedirectResponse($baseUrl.$accessDeniedDocument->getFullPath());
  32.         }
  33.         // Skip 2FA for vema users
  34.         if ($this->checkUrlRegex($request->getPathInfo()) && $user && $user instanceof AbstractUser && $user->getActive() && $documentId!=$this->getWebSettingValue('2FA_infoPageDocument') && $documentId!=$this->getWebSettingValue('2FA_vmVerification') && $documentId!=$this->getWebSettingValue('2FA_activationDocument') && !in_array($documentId$excludedPaths)) {
  35.             if (method_exists($user'getSkipTwoFactorAuthExtra') && $user->getSkipTwoFactorAuthExtra()) {
  36.                 return $this->render('html/02_body/02_main/main.html.twig', []);
  37.             }
  38.         }
  39.         // Check if the user needs to be redirected to the 2FA activation or info page
  40.         if ($this->checkUrlRegex($request->getPathInfo()) && $user && $user instanceof AbstractUser && !$user->getTwoFactorAuth() && !$user->getSkipTwoFactorAuth()  && $user->getActive() && $documentId!=$this->getWebSettingValue('2FA_infoPageDocument') && $documentId!=$this->getWebSettingValue('2FA_vmVerification') && $documentId!=$this->getWebSettingValue('2FA_activationDocument') && !in_array($documentId$excludedPaths)) {
  41.             $targetDocumentId $user->getTwoFactorRequested() ? $this->getWebSettingValue('2FA_infoPageDocument') : $this->getWebSettingValue('2FA_activationRequiredDocument');
  42.             $targetDocument Document::getById($targetDocumentId);
  43.             return new RedirectResponse($targetDocument->getFullPath());
  44.         }
  45.         return $this->render('html/02_body/02_main/main.html.twig', []);
  46.     }
  47.     public function angularAction(Request $request)
  48.     {
  49.         $access$this->checkPagePermissions();
  50.         if (!$access) {
  51.             $accessDeniedDocument $this->getAccessDeniedDocument();
  52.             $baseUrl '';
  53.             return new RedirectResponse($baseUrl.$accessDeniedDocument->getFullPath());
  54.         }
  55.         return $this->render('html/02_body/angular.html.twig', []);
  56.     }
  57.     public function mailAction(Request $request)
  58.     {
  59.         return $this->render('mail/mail.html.twig', []);
  60.     }
  61.     public function mailActionCustom(Request $request)
  62.     {
  63.         return $this->render('mail/custom-mail.html.twig', ['params'=>null]);
  64.     }
  65.     private function checkPagePermissions()
  66.     {
  67.         $permission$this->document->getProperty('pagePermissions');
  68.         if ($permission && !$this->editmode) {
  69.             return  $this->isGranted($permission);
  70.         }
  71.         return true;
  72.     }
  73.     private function checkUrlRegex($url)
  74.     {
  75.         $patterns 'admin|authentication|zwei-faktor|2fa_activation|2fa_qrcode_generate|2fa_code_verify';
  76.         $regex '/' $patterns'/';
  77.         if (preg_match($regex$url)) {
  78.             return false ;
  79.         } else {
  80.             return true;
  81.         }
  82.     }
  83.     private function getWebSettingValue($name)
  84.     {
  85.         $document \Pimcore\Model\WebsiteSetting::getByName($namenullnull);
  86.         $document $document $document->getData() : null ;
  87.         return $document $document->getId() : null;
  88.     }
  89.     private function getWebSettingValueMultiple($name)
  90.     {
  91.         $accessibleDocuments=[];
  92.         $websiteSettingList = new WebsiteSetting\Listing();
  93.         $websiteSettingList->setCondition(sprintf('%s = ? ''name'), $name);
  94.         foreach ($websiteSettingList->load() as $key => $websiteSetting) {
  95.             $websiteSettingData=WebsiteSetting::getById($websiteSetting->getId());
  96.             $accessibleDocument $websiteSettingData $websiteSettingData->getData() : null ;
  97.             if ($accessibleDocument && $websiteSettingData->getType()=='document' && $websiteSettingData->getData()!='') {
  98.                 array_push($accessibleDocuments$accessibleDocument->getId());
  99.             }
  100.         }
  101.         return $accessibleDocuments;
  102.     }
  103.     private function getAccessDeniedDocument()
  104.     {
  105.         if ($this->document->hasProperty('accessDeniedPage')) {
  106.             $accessDeniedDocId=$this->document->getProperty('accessDeniedPage')->getId();
  107.         } else {
  108.             $accessDeniedDocId=1;
  109.         }
  110.         return  Document::getById($accessDeniedDocId);
  111.     }
  112. }