src/Controller/Website/AbstractWebsiteController.php line 747

Open in your IDE?
  1. <?php
  2. namespace EADPlataforma\Controller\Website;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController as Controller;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\RequestStack;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  10. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  11. use Symfony\Component\Serializer\Serializer;
  12. use EADPlataforma\Services\GeneralService;
  13. use EADPlataforma\Entity\ConfigurationIp;
  14. use EADPlataforma\Entity\User;
  15. use EADPlataforma\Enum\UserEnum;
  16. use EADPlataforma\Enum\ClientEnum;
  17. use EADPlataforma\Enum\ConfigurationIpEnum;
  18. use EADPlataforma\Enum\ServicesEnum;
  19. use EADPlataforma\Enum\ErrorEnum;
  20. abstract class AbstractWebsiteController extends Controller {
  21.     /**
  22.      * @var GeneralService
  23.      */
  24.     protected $generalService;
  25.     /**
  26.      * @var \MemcacheService
  27.      */
  28.     protected $memcacheService;
  29.     /**
  30.      * @var SchoolEntityManager
  31.      */
  32.     protected $em;
  33.     /**
  34.      * @var SchoolEntityManagerRead
  35.      */
  36.     protected $emRead;
  37.     /**
  38.      * @var EadminEntityManager
  39.      */
  40.     protected $emEadmin;
  41.     /**
  42.      * @var User $user
  43.      */
  44.     protected $user;
  45.     /**
  46.      * @var FileService $fileService
  47.      */
  48.     protected $fileService;
  49.     /**
  50.      * @var LogService $userLogService
  51.      */
  52.     protected $userLogService;
  53.     /**
  54.      * @var ConfigurationService
  55.      */
  56.     protected $configuration;
  57.     /**
  58.      * @var SessionInterface
  59.      */
  60.     protected $sessionSym;
  61.     /**
  62.      * @var EntityUtil $entityUtil
  63.      */
  64.     protected $entityUtil;
  65.     /**
  66.      * @var StringUtil $stringUtil
  67.      */
  68.     protected $stringUtil;
  69.     /**
  70.      * @var UserPermissionUtil $userPermissionUtil
  71.      */
  72.     protected $userPermissionUtil;
  73.     /**
  74.      * @var RequestUtil $requestUtil
  75.      */
  76.     protected $requestUtil;
  77.     /**
  78.      * @var \Client
  79.      */
  80.     protected $client;
  81.     /**
  82.      * @var \ClientConfiguration
  83.      */
  84.     protected $clientConfig;
  85.     /**
  86.      * @var string
  87.      */
  88.     protected $domain;
  89.     /**
  90.      * @var string
  91.      */
  92.     protected $eadDomain;
  93.     /**
  94.      * @var array
  95.      */
  96.     protected $data = [];
  97.     /**
  98.      * @var string
  99.      */
  100.     public $adminLink;
  101.     /**
  102.      * Constructor
  103.      *
  104.      * @param GeneralService $generalService
  105.      * @param RequestStack $requestStack
  106.      */
  107.     public function __construct(GeneralService $generalServiceRequestStack $requestStack){
  108.         $this->generalService $generalService;
  109.         $this->em $this->generalService->getService('SchoolEntityManager');
  110.         $this->emRead $this->generalService->getService('SchoolEntityManagerRead');
  111.         $this->emEadmin $this->generalService->getService('EadminEntityManager');
  112.         
  113.         $this->fileService $this->generalService->getService('FileService');
  114.         $this->userLogService $this->generalService->getService('LogService');
  115.         $this->memcacheService $this->generalService->getService('MemcacheService');
  116.         $this->userPermissionUtil $this->generalService->getUtil('UserPermissionUtil');
  117.         $databaseManagerService $this->generalService->getService('DatabaseManagerService');
  118.         $databaseManagerService->executeMigrations();
  119.         $request $requestStack->getCurrentRequest();
  120.         $this->user $this->generalService->getService('UserSessionService')->getUser();
  121.         $this->configuration $this->generalService->getService('ConfigurationService');
  122.         $this->sessionSym $this->configuration->getSessionSym();
  123.         $this->entityUtil $this->generalService->getUtil('EntityUtil');
  124.         $this->stringUtil $this->generalService->getUtil('StringUtil');
  125.         $this->requestUtil $this->generalService->getUtil('RequestUtil');
  126.         $this->client $this->configuration->getClient();
  127.         $this->clientConfig $this->configuration->getClientConfiguration();
  128.         if($this->client){
  129.             $this->domain $this->configuration->getActiveDomain(true);
  130.             $this->eadDomain $this->client->getDomainPrimary();
  131.             $this->adminLink $this->configuration->getAdminLink();
  132.         }
  133.         if(!$this->generalService->isSandbox()){
  134.             //$this->executeCron($request);
  135.         }
  136.         if($this->configuration->checkModuleIsAbleOnPlan('ipFunction')){
  137.             $this->checkConfigurationIp($request);
  138.         }
  139.         $this->checkPlatformStatus($request);
  140.         $this->checkRedirectDomain($request);
  141.         if($this->isPlatformActive()){
  142.             $this->checkIsRestricted($request);
  143.            $this->checkUserIsComplete($request);
  144.         }
  145.     }
  146.     public function executeCron(Request $request)
  147.     {
  148.         return;
  149.         /*$platformStatus = $this->clientConfig->getPlatformStatus();
  150.         $suspended = ClientEnum::PLATFORM_STATUS_SUSPENDED;
  151.         $canceled = ClientEnum::PLATFORM_STATUS_CANCELED;
  152.         
  153.         if($platformStatus == $suspended || $platformStatus == $canceled){
  154.             return;
  155.         }
  156.         if(
  157.             stristr($request->getPathInfo(), '/general/')
  158.         ){
  159.             return;
  160.         }
  161.         $today = date('Y-m-d H:i:s');
  162.         $lastExecutionDay = $this->configuration->get('cron_date');
  163.         $cronUrl = "https://{$this->eadDomain}/general/{$this->clientConfig->getToken()}";
  164.         if(!empty($lastExecutionDay)){
  165.             $todaySeconds = strtotime($today);
  166.             $lastExecutionSeconds = strtotime($lastExecutionDay);
  167.             $diff = $todaySeconds - $lastExecutionSeconds;
  168.             $diffHours = round($diff / 60 / 60);
  169.             
  170.             if($diffHours >= 24){
  171.                 $sqsService = $this->generalService->getService('Aws\\AwsSqs');
  172.                 $sqsService->sendMessageCron($cronUrl);
  173.                 sleep(5);
  174.             }
  175.         }else{
  176.             $hour = rand(7,9);
  177.             $min = rand(10,59);
  178.             $date = date('Y-m-d');
  179.             $this->configuration->set('cron_date', "{$date} 0{$hour}:{$min}:00", false);
  180.         }*/
  181.     }
  182.     public function checkConfigurationIp(Request $request)
  183.     {
  184.         $info $this->generalService->getServiceAccess(ServicesEnum::LOGIN);
  185.         if(!in_array($request->getClientIp(), $info->validIps)){
  186.             $configuration $this->generalService->getService('ConfigurationService');
  187.             
  188.             $configurationIpRepository $this->em->getRepository(ConfigurationIp::class);
  189.             $configurationIp $configurationIpRepository->findOneBy([
  190.                 "ip" => $request->getClientIp(),
  191.                 "deleted" => ConfigurationIpEnum::ITEM_NO_DELETED 
  192.             ]);
  193.             $countWhitelist $configurationIpRepository->count([
  194.                 "type" => ConfigurationIpEnum::WHITE_LIST,
  195.                 "deleted" => ConfigurationIpEnum::ITEM_NO_DELETED 
  196.             ]);
  197.             if($configurationIp){
  198.                 if($configurationIp->getType() == ConfigurationIpEnum::BLACK_LIST){
  199.                     $response = new Response(''Response::HTTP_UNAUTHORIZED);
  200.                     $response->send();
  201.                     exit;
  202.                 }
  203.             }elseif(!empty($countWhitelist)){
  204.                 $response = new Response(''Response::HTTP_UNAUTHORIZED);
  205.                 $response->send();
  206.                 exit;
  207.             }
  208.         }
  209.     }
  210.     public function checkRedirectDomain(Request $request)
  211.     {
  212.         $info $this->generalService->getServiceAccess(ServicesEnum::LOGIN);
  213.         if(in_array($request->getClientIp(), $info->validIps)){
  214.             return;
  215.         }
  216.         if($this->configuration->isLocal()){
  217.             return;
  218.         }
  219.         $ignoreRoutes = [
  220.             "genereateAdminSSO",
  221.             "loginEadminSSO",
  222.             "sendCron",
  223.             "manifest",
  224.             "sitemap",
  225.             "cronGeneral",
  226.             "callbackVimeo",
  227.             "getTokenAccessRd",
  228.             "executeCalculateAnticipation",
  229.             "getEADCheckoutFee",
  230.             "deleteNfeEADCheckout",
  231.             "executeCronListEmail",
  232.             "executeCronUserSubscription",
  233.             "sendWebhookQueue",
  234.             "deleteTrashAll",
  235.             "processDataEadCheckout",
  236.             "processDataEadCheckoutBar",
  237.             "processDataPagSeguro",
  238.             "processDataPagSeguroBar",
  239.             "processDataHotmart",
  240.             "processDataHotmartBar",
  241.             "processDataPayPal",
  242.             "processDataPayPalBar",
  243.             "processDataEduzz",
  244.             "processDataEduzzBar",
  245.             "processDataProvi",
  246.             "processDataProviBar",
  247.             "processDataBraip",
  248.             "processDataBraipBar",
  249.             "processDataMonetizze",
  250.             "processDataMonetizzeBar",
  251.             "processDataKiwify",
  252.             "processDataKiwifyBar",
  253.             "processDataDigitalManagerGuru",
  254.             "processDataDigitalManagerGuruBar",
  255.             "processDataAppMax",
  256.             "processDataAppMaxBar",
  257.             "processDataDoppus",
  258.             "processDataDoppusBar",
  259.             "processDataTicto",
  260.             "processDataTictoBar",
  261.             "processDataMercadoPago",
  262.             "processDataMercadoPagoBar",
  263.             "processDataAbmex",
  264.             "processDataAbmexBar",
  265.             "processDataPerfectPay",
  266.             "processDataPerfectPayBar",
  267.             "processDataEvermart",
  268.             "processDataEvermartBar",
  269.             "processDataHeroSpark",
  270.             "processDataHeroSparkBar",
  271.             "processDataYampi",
  272.             "processDataYampiBar",
  273.             "processDataCartPanda",
  274.             "processDataCartPandaBar",
  275.             "processDataKirvano",
  276.             "processDataKirvanoBar",
  277.             "callbackRdStation",
  278.             "callbackRdStationBar",
  279.             "callbackBling",
  280.             "callbackBlingBar",
  281.             "callbackDinamize",
  282.             "callbackDinamizeBar",
  283.             "cartCheckoutCharge",
  284.             "getRoutesToFileImport",
  285.             "getRoutesToExport",
  286.             "exportCertificate",
  287.             "exportTestimonial",
  288.             "exportEnrollment",
  289.             "exportExamUser",
  290.             "exportExamUserReport",
  291.             "exportLessonLog",
  292.             "exportNewsLetter",
  293.             "exportProductCharge",
  294.             "exportTransaction",
  295.             "exportTransactionItem",
  296.             "exportUser",
  297.             "exportUserSubscription",
  298.             "exportWhishList",
  299.             "exportLessonPresence",
  300.             "exportQuestions",
  301.             "exportProductOpportunity",
  302.             "fileGetUpload",
  303.             "exportLessonSupport",
  304.             "getClientInfo",
  305.             "downgradeToFree",
  306.             "upgradeReceivers",
  307.             "removeClientCustomDomain",
  308.             "getInfo",
  309.             "getInfoCourse",
  310.             "sendAuthenticationEmail"
  311.         ];
  312.         if(in_array($request->get('_route'), $ignoreRoutes)){
  313.             return;
  314.         }
  315.         $gKeyV3 $this->configuration->get('recaptcha_key_v3');
  316.         $gSecretV3 $this->configuration->get('recaptcha_secret_v3');
  317.         $domainPrimary $this->client->getDomainPrimary();
  318.         $domainSecondary $this->client->getDomainSecondary();
  319.         if(
  320.             empty($gKeyV3) || 
  321.             empty($gSecretV3) || 
  322.             !$this->configuration->checkModuleIsAbleOnPlan('domainFunction')
  323.         ){
  324.             if($request->getHost() == $domainSecondary && !empty($domainSecondary)){
  325.                 $url "https://{$domainPrimary}{$request->getPathInfo()}";
  326.                 $redirectResponse = new RedirectResponse($url302);
  327.                 $redirectResponse->send();
  328.                 exit;
  329.             }
  330.         }
  331.         if($this->clientConfig->getRedirect() == ClientEnum::YES){
  332.             if(empty($gKeyV3) || empty($gSecretV3)){
  333.                 return;
  334.             }
  335.             if($request->getHost() == $this->client->getDomainPrimary()){
  336.                 if(!empty($domainSecondary)){
  337.                     $url "https://{$domainSecondary}{$request->getPathInfo()}";
  338.                     $redirectResponse = new RedirectResponse($url301);
  339.                     $redirectResponse->send();
  340.                     exit;
  341.                 }
  342.             }
  343.         }
  344.     }
  345.     public function checkIsRestricted(Request $request)
  346.     {
  347.         if(!$this->user){
  348.             $ignoreRoutes = [
  349.                 "genereateAdminSSO",
  350.                 "loginEadminSSO",
  351.                 "sendCron",
  352.                 "notFound",
  353.                 "manifest",
  354.                 "sitemap",
  355.                 "authLogin",
  356.                 "authMFA",
  357.                 "sendEmailAuthentication",
  358.                 "updateUserNotification",
  359.                 "sendEmailRecoverPassword",
  360.                 "resetPassword",
  361.                 "login",
  362.                 "loginPost",
  363.                 "loginFast",
  364.                 "loginApi",
  365.                 "loginConfirm",
  366.                 "loginAuthentication",
  367.                 "recoverPassword",
  368.                 "changePasswordPost",
  369.                 "resetPasswordPost",
  370.                 "userLogoff",
  371.                 "logoff ",
  372.                 "getChargePage",
  373.                 "cartCheckoutCharge",
  374.                 "cronGeneral",
  375.                 "callbackVimeo",
  376.                 "getTokenAccessRd",
  377.                 "executeCalculateAnticipation",
  378.                 "getEADCheckoutFee",
  379.                 "deleteNfeEADCheckout",
  380.                 "executeCronListEmail",
  381.                 "executeCronUserSubscription",
  382.                 "sendWebhookQueue",
  383.                 "deleteTrashAll",
  384.                 "processDataEadCheckout",
  385.                 "processDataEadCheckoutBar",
  386.                 "processDataPagSeguro",
  387.                 "processDataPagSeguroBar",
  388.                 "processDataHotmart",
  389.                 "processDataHotmartBar",
  390.                 "processDataPayPal",
  391.                 "processDataPayPalBar",
  392.                 "processDataEduzz",
  393.                 "processDataEduzzBar",
  394.                 "processDataProvi",
  395.                 "processDataProviBar",
  396.                 "processDataBraip",
  397.                 "processDataBraipBar",
  398.                 "processDataMonetizze",
  399.                 "processDataMonetizzeBar",
  400.                 "processDataKiwify",
  401.                 "processDataKiwifyBar",
  402.                 "processDataDigitalManagerGuru",
  403.                 "processDataDigitalManagerGuruBar",
  404.                 "processDataAppMax",
  405.                 "processDataAppMaxBar",
  406.                 "processDataDoppus",
  407.                 "processDataDoppusBar",
  408.                 "processDataTicto",
  409.                 "processDataTictoBar",
  410.                 "processDataMercadoPago",
  411.                 "processDataMercadoPagoBar",
  412.                 "processDataAbmex",
  413.                 "processDataAbmexBar",
  414.                 "processDataPerfectPay",
  415.                 "processDataPerfectPayBar",
  416.                 "processDataEvermart",
  417.                 "processDataEvermartBar",
  418.                 "processDataHeroSpark",
  419.                 "processDataHeroSparkBar",
  420.                 "processDataYampi",
  421.                 "processDataYampiBar",
  422.                 "processDataCartPanda",
  423.                 "processDataCartPandaBar",
  424.                 "processDataKirvano",
  425.                 "processDataKirvanoBar",
  426.                 "callbackRdStation",
  427.                 "callbackRdStationBar",
  428.                 "callbackBling",
  429.                 "callbackBlingBar",
  430.                 "callbackDinamize",
  431.                 "callbackDinamizeBar",
  432.                 "certificateSearchPage",
  433.                 "certificatePage",
  434.                 "stopNotification",
  435.                 "updateUserNotification",
  436.                 "fileGetUpload",
  437.                 "getClientInfo",
  438.                 "downgradeToFree",
  439.                 "upgradeReceivers",
  440.                 "removeClientCustomDomain",
  441.                 "downloadCertificate",
  442.                 "viewCertificate",
  443.                 "getInfo",
  444.                 "getInfoCourse",
  445.                 "sendAuthenticationEmail"
  446.             ];
  447.             $platformType $this->client->getPlatformType();
  448.             if($platformType == ClientEnum::PLATFORM_TYPE_RESTRICTED){
  449.                 if(in_array($request->get('_route'), $ignoreRoutes)){
  450.                     return;
  451.                 }
  452.                 $this->checkUserSession($request);
  453.                 return;
  454.             }
  455.         }
  456.         return;
  457.     }
  458.     public function isPlatformActive()
  459.     {
  460.         $platformStatus $this->clientConfig->getPlatformStatus();
  461.         if($platformStatus == ClientEnum::PLATFORM_STATUS_FREEZED && $this->user){
  462.             return $this->userPermissionUtil->canAccessAdm();
  463.         }
  464.         return ($platformStatus == ClientEnum::PLATFORM_STATUS_ACTIVED);
  465.     }
  466.     public function checkPlatformStatus(Request $request){
  467.         if($this->isPlatformActive()){
  468.             return;
  469.         }
  470.         $platformStatus $this->clientConfig->getPlatformStatus();
  471.         $ignoreRoutes = [
  472.             "genereateAdminSSO",
  473.             "loginEadminSSO",
  474.             "sendCron",
  475.             "home",
  476.             "getClientInfo",
  477.             "downgradeToFree",
  478.             "upgradeReceivers",
  479.             "removeClientCustomDomain",
  480.             "fileGetUpload",
  481.             "getInfo",
  482.             "getInfoCourse"
  483.         ];
  484.         if($platformStatus == ClientEnum::PLATFORM_STATUS_FREEZED){
  485.             if($this->user){
  486.                 return;
  487.             }
  488.             $ignoreRoutes[] = "authLogin";
  489.             $ignoreRoutes[] = "authMFA";
  490.             $ignoreRoutes[] = "sendEmailAuthentication";
  491.             $ignoreRoutes[] = "updateUserNotification";
  492.             $ignoreRoutes[] = "sendEmailRecoverPassword";
  493.             $ignoreRoutes[] = "resetPassword";
  494.             $ignoreRoutes[] = "login";
  495.             $ignoreRoutes[] = "loginPost";
  496.             $ignoreRoutes[] = "loginFast";
  497.             $ignoreRoutes[] = "loginApi";
  498.             $ignoreRoutes[] = "loginConfirm";
  499.             $ignoreRoutes[] = "loginAuthentication";
  500.             $ignoreRoutes[] = "recoverPassword";
  501.             $ignoreRoutes[] = "changePasswordPost";
  502.             $ignoreRoutes[] = "resetPasswordPost";
  503.             $ignoreRoutes[] = "userLogoff";
  504.             $ignoreRoutes[] = "logoff";
  505.             $ignoreRoutes[] = "cronGeneral";
  506.             $ignoreRoutes[] = "callbackVimeo";
  507.             $ignoreRoutes[] = "getTokenAccessRd";
  508.             $ignoreRoutes[] = "executeCalculateAnticipation";
  509.             $ignoreRoutes[] = "getEADCheckoutFee";
  510.             $ignoreRoutes[] = "deleteNfeEADCheckout";
  511.             $ignoreRoutes[] = "executeCronListEmail";
  512.             $ignoreRoutes[] = "executeCronUserSubscription";
  513.             $ignoreRoutes[] = "sendWebhookQueue";
  514.             $ignoreRoutes[] = "deleteTrashAll";
  515.             $ignoreRoutes[] = "processDataEadCheckout";
  516.             $ignoreRoutes[] = "processDataEadCheckoutBar";
  517.             $ignoreRoutes[] = "processDataPagSeguro";
  518.             $ignoreRoutes[] = "processDataPagSeguroBar";
  519.             $ignoreRoutes[] = "processDataHotmart";
  520.             $ignoreRoutes[] = "processDataHotmartBar";
  521.             $ignoreRoutes[] = "processDataPayPal";
  522.             $ignoreRoutes[] = "processDataPayPalBar";
  523.             $ignoreRoutes[] = "processDataEduzz";
  524.             $ignoreRoutes[] = "processDataEduzzBar";
  525.             $ignoreRoutes[] = "processDataProvi";
  526.             $ignoreRoutes[] = "processDataProviBar";
  527.             $ignoreRoutes[] = "processDataBraip";
  528.             $ignoreRoutes[] = "processDataBraipBar";
  529.             $ignoreRoutes[] = "processDataMonetizze";
  530.             $ignoreRoutes[] = "processDataMonetizzeBar";
  531.             $ignoreRoutes[] = "processDataKiwify";
  532.             $ignoreRoutes[] = "processDataKiwifyBar";
  533.             $ignoreRoutes[] = "processDataDigitalManagerGuru";
  534.             $ignoreRoutes[] = "processDataDigitalManagerGuruBar";
  535.             $ignoreRoutes[] = "processDataAppMax";
  536.             $ignoreRoutes[] = "processDataAppMaxBar";
  537.             $ignoreRoutes[] = "processDataDoppus";
  538.             $ignoreRoutes[] = "processDataDoppusBar";
  539.             $ignoreRoutes[] = "processDataTicto";
  540.             $ignoreRoutes[] = "processDataTictoBar";
  541.             $ignoreRoutes[] = "processDataMercadoPago";
  542.             $ignoreRoutes[] = "processDataMercadoPagoBar";
  543.             $ignoreRoutes[] = "processDataAbmex";
  544.             $ignoreRoutes[] = "processDataAbmexBar";
  545.             $ignoreRoutes[] = "processDataPerfectPay";
  546.             $ignoreRoutes[] = "processDataPerfectPayBar";
  547.             $ignoreRoutes[] = "processDataEvermart";
  548.             $ignoreRoutes[] = "processDataEvermartBar";
  549.             $ignoreRoutes[] = "processDataHeroSpark";
  550.             $ignoreRoutes[] = "processDataHeroSparkBar";
  551.             $ignoreRoutes[] = "processDataYampi";
  552.             $ignoreRoutes[] = "processDataYampiBar";
  553.             $ignoreRoutes[] = "processDataCartPanda";
  554.             $ignoreRoutes[] = "processDataCartPandaBar";
  555.             $ignoreRoutes[] = "processDataKirvano";
  556.             $ignoreRoutes[] = "processDataKirvanoBar";
  557.             $ignoreRoutes[] = "callbackRdStation";
  558.             $ignoreRoutes[] = "callbackRdStationBar";
  559.             $ignoreRoutes[] = "callbackBling";
  560.             $ignoreRoutes[] = "callbackBlingBar";
  561.             $ignoreRoutes[] = "callbackDinamize";
  562.             $ignoreRoutes[] = "callbackDinamizeBar";
  563.             $ignoreRoutes[] = "certificateSearchPage";
  564.             $ignoreRoutes[] = "certificatePage";
  565.             $ignoreRoutes[] = "stopNotification";
  566.             $ignoreRoutes[] = "updateUserNotification";
  567.             $ignoreRoutes[] = "sendAuthenticationEmail";
  568.         }
  569.         if(in_array($request->get('_route'), $ignoreRoutes)){
  570.             return;
  571.         }
  572.         $url $this->generalService->generateUrl('home');
  573.         $redirectResponse = new RedirectResponse($url);
  574.         $redirectResponse->headers->set('Content-Type''text/html');
  575.         $redirectResponse->send();
  576.         exit;
  577.     }
  578.     public function checkUserIsComplete(Request $request)
  579.     {
  580.         if($this->user){
  581.             $userRepository $this->em->getRepository(User::class);
  582.             if(!$userRepository->checkUserIsComplete($this->user)){
  583.                 $ignoreRoutes = [
  584.                     "genereateAdminSSO",
  585.                     "loginEadminSSO",
  586.                     "sendCron",
  587.                     "userProfile"
  588.                     "logoff",
  589.                     "userLogoff",
  590.                     "getChargePage",
  591.                     "getCartItemsMenu",
  592.                     "cartInitiateCheckout",
  593.                     "checkoutOldCart",
  594.                     "checkoutNewCart",
  595.                     "checkoutCartWithCoupon",
  596.                     "checkoutClean",
  597.                     "cartIndividual",
  598.                     "cartAdd",
  599.                     "cartAddSuggestion",
  600.                     "cartCreateEnroll",
  601.                     "cartCheckoutPlanTrial",
  602.                     "addProductWhishlist",
  603.                     "applyCartCoupon",
  604.                     "cart",
  605.                     "getUserValidCarts",
  606.                     "cartChangeStatus",
  607.                     "cartCheckoutPaypal",
  608.                     "cartCheckoutPagseguro",
  609.                     "cartCheckoutMercadopago",
  610.                     "cartCheckoutCharge",
  611.                     "cartCheckoutDefault",
  612.                     "cartCheckoutCustom",
  613.                     "cartOneClickBuy",
  614.                     "cartCheckoutNewTry",
  615.                     "cartConclusion",
  616.                     "cartConclusionCheckStatus",
  617.                     "cartCouponRemove",
  618.                     "cartDelete",
  619.                     "countProductCouponByProductOffers",
  620.                     "listCouponByProductOffers",
  621.                     "testGeoSelectCep",
  622.                     "loginConfirm",
  623.                     "stopNotification",
  624.                     "updateUserNotification",
  625.                     "fileGetUpload",
  626.                     "getClientInfo",
  627.                     "downgradeToFree",
  628.                     "upgradeReceivers",
  629.                     "removeClientCustomDomain",
  630.                     "getInfo",
  631.                     "getInfoCourse"
  632.                 ];
  633.                 if(!in_array($request->get('_route'), $ignoreRoutes)){
  634.                     $url $this->generalService->generateUrl('userProfile');
  635.                     $redirectResponse = new RedirectResponse($url);
  636.                     $redirectResponse->headers->set('Content-Type''text/html');
  637.                     $redirectResponse->send();
  638.                     exit;
  639.                 }
  640.             }
  641.         }
  642.     }
  643.     public function checkUserSession(Request $request)
  644.     {
  645.         if(!$this->user){
  646.             $hash base64_encode($request->getUri());
  647.             $url $this->generalService->generateUrl('login', [ "hash" => $hash ]);
  648.             $redirectResponse = new RedirectResponse($url);
  649.             $redirectResponse->headers->set('Content-Type''text/html');
  650.             $redirectResponse->send();
  651.             exit;
  652.         }
  653.     }
  654.     public function jsonSerializer($arraySerilize) {
  655.         $encoders = [new JsonEncoder()];
  656.         $normalizers = [new ObjectNormalizer()];
  657.         $serializer = new Serializer($normalizers$encoders);
  658.         return $serializer->serialize($arraySerilize'json', [
  659.             'circular_reference_handler' => function ($object) {
  660.                 return $object->getId();
  661.             }
  662.         ]);
  663.     }
  664.     public function renderEAD($templateName$module "website")
  665.     {
  666.         //$this->data = $this->stringUtil->convertToUtf8($this->data);
  667.     
  668.         $pixelService $this->generalService->getService('Marketing\\PixelService');
  669.         $pixelService->sendConversion('PageView');
  670.          $this->data['nonceHash'] = bin2hex(random_bytes(16));
  671.         $allowSrc = [
  672.             "https://fonts.googleapis.com",
  673.             "https://cdnjs.cloudflare.com",
  674.             "https://cdn.eadplataforma.app",
  675.             "https://kit.fontawesome.com",
  676.             "https://www.googletagmanager.com",
  677.             "https://cdn.tailwindcss.com",
  678.             "https://player.sambatech.com.br",
  679.             "http://player.sambatech.com.br",
  680.             "https://player.pandavideo.com.br",
  681.             "https://fonts.gstatic.com",
  682.             "https://static.hotjar.com",
  683.             "https://player.vdocipher.com",
  684.             "https://www.google.com",
  685.             "http://testeeadpublic.s3.us-east-2.amazonaws.com",
  686.             "wss://metrics.eadplataforma.app",
  687.             "https://metrics.eadplataforma.app",
  688.             "https://www.google-analytics.com",
  689.             "https://analytics.google.com",
  690.             "http://livestream.com",
  691.             "'nonce-{$this->data['nonceHash']}'"
  692.         ];
  693.         $allowSrc implode(' '$allowSrc);
  694.         $optionsSrc = [
  695.             "default-src 'self'",
  696.             "script-src 'self' {$allowSrc}",
  697.             "object-src 'none'",
  698.             "style-src 'self' {$allowSrc}",
  699.             "font-src 'self' {$allowSrc}",
  700.             "img-src 'self' data: {$allowSrc}",
  701.             "connect-src 'self' {$allowSrc}",
  702.             "media-src 'self' {$allowSrc}",
  703.             "frame-src 'self' {$allowSrc}",
  704.             "report-uri /report/csp",
  705.         ];
  706.         $optionsSrc implode('; '$optionsSrc);
  707.             
  708.         $response $this->render("{$module}/{$templateName}"$this->data);
  709.         
  710.         //$response->headers->set("Content-Security-Policy", $optionsSrc);
  711.         return $response;
  712.     }
  713.     
  714.     public function eadResponse($data, ?int $errorCode ErrorEnum::SUCCESS,
  715.                                 ?bool $serializer true, ?bool $useHttpStatus false){
  716.         $response = [ "data" => $data"error" => !empty($errorCode) ? $errorCode false ];
  717.         
  718.         //$response = $this->stringUtil->convertToUtf8($response);
  719.         if($serializer){
  720.             $response $this->jsonSerializer($response);
  721.         }else{
  722.             $response json_encode($response);
  723.         }
  724.         $httpStatus 200;
  725.         if($useHttpStatus && $errorCode && isset(ErrorEnum::HTTP_STATUS[$errorCode])){
  726.             $httpStatus ErrorEnum::HTTP_STATUS[$errorCode];
  727.         }
  728.         return new JsonResponse($response$httpStatus, [], true);
  729.     }
  730.     public function validateEntity($entityObj$groups = []){
  731.         return $this->entityUtil->setEntity($entityObj)->validateEntity($groups);
  732.     }
  733.     public function createCaptchaKey(Request $request)
  734.     {
  735.         $preKey md5("captcha");
  736.         $value md5($this->client->getDomainPrimary().date('Y-m-d H:i:s').$request->getClientIp());
  737.         $key "{$preKey}_{$value}";
  738.         $data $this->stringUtil->randomText(6);
  739.         $this->memcacheService->saveData($key$data60 60 24);
  740.         return $key;
  741.     }
  742.     public function isValidCaptcha(Request $request)
  743.     {
  744.         $this->requestUtil->setRequest($request)->setData();
  745.         $gRecaptchaResponse $this->requestUtil->getField('g-recaptcha-response');
  746.         $eCaptchaPost $this->requestUtil->getField('e-captcha');
  747.         $keyCaptcha $this->requestUtil->getField('keyCaptcha');
  748.         $gSecretKey $this->configuration->get('recaptcha_secret_v2');
  749.         $gSecretKeyV3 $this->configuration->get('recaptcha_secret_v3');
  750.         $configDefault $this->configuration->getDefaultRecaptcha();
  751.         $host $request->getHost();
  752.         if(
  753.             !empty($gSecretKey) || 
  754.             !empty($gSecretKeyV3) || 
  755.             stristr($host".eadplataforma.app")
  756.         ){
  757.             if(!empty($gRecaptchaResponse)){
  758.                 $ip $request->getClientIp();
  759.                 $secret $configDefault->defaultRecaptchaSecretV3;
  760.                 if(!stristr($host".eadplataforma.app")){
  761.                     if(!empty($gSecretKeyV3)){
  762.                         $secret $gSecretKeyV3;
  763.                     }else if(!empty($gSecretKey)){
  764.                         $secret $gSecretKey;
  765.                     }
  766.                 }
  767.                 $dataUrl = [
  768.                     "secret" => $secret,
  769.                     "response" => $gRecaptchaResponse,
  770.                     "remoteip" => $ip,
  771.                 ];
  772.                 $dataUrl http_build_query($dataUrl);
  773.                 $url "https://www.google.com/recaptcha/api/siteverify?{$dataUrl}";
  774.                 $return file_get_contents($url);
  775.                 $return json_decode($return);
  776.                 if(!$return->success){
  777.                     return false;
  778.                 }
  779.                 if(isset($return->score)){
  780.                     if($return->score <= 0.7){
  781.                         return false;
  782.                     }
  783.                     return true;
  784.                 }
  785.                 return false;
  786.             }
  787.             return false;
  788.         }
  789.         return true;
  790.         
  791.         if(!empty($this->memcacheService->getData($keyCaptcha))){
  792.             return ($eCaptchaPost == $this->memcacheService->getData($keyCaptcha));
  793.         }else{
  794.             $this->memcacheService->deleteData($keyCaptcha);
  795.         }
  796.         return false;
  797.     }
  798. }