<?php
namespace Claromentis\Core\Security;

$GLOBALS["__65da1b1ec2d" . "6653e8a0ab784" . "8e536215"] = (@$GLOBALS["__65da1b1ec2d6653e8a0" . "ab7848e536215"] ?: array()) + array("_7f628626" . "dd1d55c71" . "b1fc0932f" . "fd1d2c" => base64_decode("aXNfY" . "XJyYX" . "k="), "_d5e3acfe493fa2111d22dfb9" . "3da33d87" => base64_decode("X1" . "8="), "_858e845b028b701406de2d127009c" . "941" => base64_decode("cGFuZWxfY29kZQ=" . "="), "_0521fbd3" . "b745045e7" . "644213cbe" . "d21a21" => base64_decode("c2VjdXJpdHkuZXh0" . "cmE="), "_4dc7dd1d92608d7c4edca7d" . "abd0206ce" => base64_decode("b25LZXJ" . "uZWxGaW" . "5pc2hSZ" . "XF1ZXN0"), "_fdd27966" . "7944aa31b" . "47cee7c44" . "88495f" => base64_decode("JywgYnV" . "0IGl0J3" . "Mgbm90I" . "GdpdmVu"), "_c7a35cdd86375" . "3e83240fbb3e73" . "2a6b7" => base64_decode("bm9" . "uZQ" . "=="), "_965e72db2455ea9" . "116779414f062746" . "a" => base64_decode("WW91IG5lZWQgdG8gY2hhbmdlIHlvdXIgcGFzc3" . "dvcmQ="), "_8059e2bace3311190" . "b0a85f8709f7a6a" => base64_decode("YWRtaW4" . "="), "_6a11dd42eb3818b" . "d9995b593e850c7e" . "a" => base64_decode("Rm9yY2VkIHBhc3N3b3JkIGNoYW5" . "nZQ=="), "_7adf80c15f537637512f7766d5fa0b2" . "f" => base64_decode("c2VjdXJpdHkubW9kZQ=" . "="), "_77649368bc53" . "2d9bc06ddad8a" . "50096a2" => base64_decode("QXBwbGljYXRpb24gcmVxdWlyZXMgYWRtaW4gYWNjZXNzLCBidXQgZG9lc24ndCBzcGVjaW" . "Z5IHBhbmVsIGNvZGU="), "_5ce040ae4c22329c2682c368b68b" . "3611" => base64_decode("UmVxdWVzdGVkIGFjY2Vz" . "cyAn"), "_24e0e36600d6af7" . "7406a44bb618a625" . "3" => base64_decode("dXNlcg" . "=="), "_cc6b63c64f" . "d515a5b0110" . "d3b97a814eb" => base64_decode("QXV0aGVudGljYXRpb24gcmVxd" . "WlyZWQ="), "_5269083028d2f37" . "d24843e7b56f8002" . "5" => base64_decode("c2VjdXJpdHkucmVzdHJpY3R" . "pb24="), "_14feb7309" . "9827a30c31" . "c0b996c13f" . "13c" => base64_decode("b25LZXJuZW" . "xSZXF1ZXN0"), "_6f8bc3b51b049d89dacde439831" . "39a56" => base64_decode("X3J" . "vdX" . "Rl"));
use Claromentis\Core\Admin\CurrentPanel;
use Claromentis\Core\Event\EventSubscriberInterface;
use Claromentis\Core\Security\Exception\AccessDeniedException;
use Claromentis\Core\Security\Exception\AdminAccessDeniedException;
use Claromentis\Core\Security\Exception\AuthenticationException;
use Claromentis\Core\Security\Exception\BadCredentialsException;
use Claromentis\Core\Security\Exception\ForcedPasswordChangeException;
use Claromentis\Core\Security\Exception\InvalidConfigException;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Routing\RouteCollection;






class Firewall implements EventSubscriberInterface
{
    protected $routes;
    protected $auth_mode_manager;
    protected $context;
    protected $dispatcher;
    protected $logger;
    protected $exception_listeners;
    public function __construct(RouteCollection $_6c20f4873f12c6bcced6c1dda9a06b86, AuthenticationModeManager $_f6b575597c272e12f16dc922e604c11d, SessionSecurityContext $context, EventDispatcherInterface $_b497ce6f2af10f67516aed0ecf34d8cf, LoggerInterface $logger = null, CurrentPanel $_777fee2a9f69c8905bdc4ffffa7d93cf = null)
    {
        $this->routes = $_6c20f4873f12c6bcced6c1dda9a06b86;
        $this->auth_mode_manager = $_f6b575597c272e12f16dc922e604c11d;
        $this->context = $context;
        $this->dispatcher = $_b497ce6f2af10f67516aed0ecf34d8cf;
        $this->logger = $logger;
        $this->current_panel = $_777fee2a9f69c8905bdc4ffffa7d93cf;
        $this->exception_listeners = new \SplObjectStorage();
    }
    
    
    
    
    public static function getSubscribedEvents()
    {
        return array(KernelEvents::REQUEST => array($GLOBALS["__65da1b1ec2d665" . "3e8a0ab7848e5362" . "15"]["_14feb73099827a30c31c0b996" . "c13f13c"], 8), KernelEvents::FINISH_REQUEST => $GLOBALS["__65da1b1ec2d6653e8a0ab7848e53" . "6215"]["_4dc7dd1d92608d7c4edca7da" . "bd0206ce"]);
    }
    public function onKernelFinishRequest(FinishRequestEvent $event)
    {
        $request = $event->getRequest();
        
        
        if (isset($this->exception_listeners[$request])) {
            
            
            $_ee62014f4ef50dbe8eb79b2406d87bc7 = $this->exception_listeners[$request];
            $_ee62014f4ef50dbe8eb79b2406d87bc7->unregister($this->dispatcher);
            unset($this->exception_listeners[$request]);
        }
    }
    
    
    
    
    
    
    
    
    
    protected function VerifyAccess(RequestEvent $event, $_601a171d59986f7c15972b586685671b, $_3de589dc8908aa0acc1d667051a758f3, $_4a033bdf0ce701c6255d5238633ab2d0)
    {
        $request = $event->getRequest();
        $_76b40b4ffb78489ccdf0fef0a81963f5 = $this->auth_mode_manager->GetExceptionListener($_601a171d59986f7c15972b586685671b);
        
        
        if (null !== $_76b40b4ffb78489ccdf0fef0a81963f5) {
            $this->exception_listeners[$request] = $_76b40b4ffb78489ccdf0fef0a81963f5;
            $_76b40b4ffb78489ccdf0fef0a81963f5->register($this->dispatcher);
        }
        if ($_3de589dc8908aa0acc1d667051a758f3 !== $GLOBALS["__65da1b1e" . "c2d6653e8a" . "0ab7848e53" . "6215"]["_c7a35cdd863753e83240" . "fbb3e732a6b7"]) {
            $_b911cc8a777886afea194de4534beffa = $this->auth_mode_manager->GetAuthenticators($_601a171d59986f7c15972b586685671b);
            foreach ($_b911cc8a777886afea194de4534beffa as $_bcd36e5a5ed036659bc02cdfe807a094) {
                $_bcd36e5a5ed036659bc02cdfe807a094->Handle($event, $this->context);
                if ($event->hasResponse()) {
                    return;
                }
            }
        }
        $_34142f0805685e788bb54a01fb3e222c = null;
        if ($_3de589dc8908aa0acc1d667051a758f3 === $GLOBALS["__65da1b1ec2d6653e8a0ab7848e53" . "6215"]["_8059e2b" . "ace33111" . "90b0a85f" . "8709f7a6" . "a"]) {
            if (!$GLOBALS["__65da1b1ec2d66" . "53e8a0ab7848e53" . "6215"]["_7f628626dd1d55c" . "71b1fc0932ffd1d2" . "c"]($_4a033bdf0ce701c6255d5238633ab2d0) || empty($_4a033bdf0ce701c6255d5238633ab2d0[$GLOBALS["__65da1b1" . "ec2d6653e" . "8a0ab7848" . "e536215"]["_858e845b028b" . "701406de2d127" . "009c941"]])) {
                throw new InvalidConfigException($GLOBALS["__65da1b1ec2d6653e8a0a" . "b7848e536215"]["_77649368bc532d9" . "bc06ddad8a50096a" . "2"]);
            }
            $_34142f0805685e788bb54a01fb3e222c = $_4a033bdf0ce701c6255d5238633ab2d0[$GLOBALS["__65da1b1e" . "c2d6653e8a" . "0ab7848e53" . "6215"]["_858e845b028b701406" . "de2d127009c941"]];
            $_3de589dc8908aa0acc1d667051a758f3 = $GLOBALS["__65da1b1ec2d665" . "3e8a0ab7848e5362" . "15"]["_24e0e36600d6af" . "77406a44bb618a6" . "253"];
        }
        if (!$this->context->IsGranted($_3de589dc8908aa0acc1d667051a758f3)) {
            if (null !== $this->logger) {
                $this->logger->error($GLOBALS["__65da1b1ec2d6653e8a0ab78" . "48e536215"]["_5ce040ae4c22329c2682c368b" . "68b3611"] . $_3de589dc8908aa0acc1d667051a758f3 . $GLOBALS["__65da1b1ec2d6653e8a0ab7848e536" . "215"]["_fdd27966794" . "4aa31b47cee7" . "c4488495f"], [$this->context]);
            }
            if (!$this->context->GetUserId()) {
                throw new AccessDeniedException($GLOBALS["__65da1b1ec2d6653e8a0ab7" . "848e536215"]["_cc6b63c64fd515a5b011" . "0d3b97a814eb"], 401);
            }
            throw new AccessDeniedException();
        }
        if ($_34142f0805685e788bb54a01fb3e222c !== null) {
            if (!$this->context->GetUserId()) {
                throw new AccessDeniedException($GLOBALS["__65da1b1ec2d6653e8a0ab784" . "8e536215"]["_cc6b63c64fd515a5b0110d3b97a81" . "4eb"], 401);
            }
            if (!\AdminPanel::UserHasAccess($_34142f0805685e788bb54a01fb3e222c, $this->context->GetId())) {
                throw new AdminAccessDeniedException($_34142f0805685e788bb54a01fb3e222c);
            }
            if ($this->current_panel !== null) {
                $this->current_panel->Set($_34142f0805685e788bb54a01fb3e222c);
            }
        }
        $this->CheckPasswordPolicy();
    }
    
    
    
    
    
    
    
    
    public function onKernelRequest(RequestEvent $event)
    {
        $request = $event->getRequest();
        $_d7cd24af9c1ec9e84b034650f4556bdc = $request->attributes->get($GLOBALS["__65da1b1ec" . "2d6653e8a0a" . "b7848e53621" . "5"]["_6f8bc3b" . "51b049d8" . "9dacde43" . "983139a5" . "6"]);
        if (!($_4c24595e81e7e67a084f4708169b7ec6 = $this->routes->get($_d7cd24af9c1ec9e84b034650f4556bdc))) {
            return;
        }
        
        
        $_601a171d59986f7c15972b586685671b = $_4c24595e81e7e67a084f4708169b7ec6->getOption($GLOBALS["__65da1b1ec2d6653e8a" . "0ab7848e536215"]["_7adf80c" . "15f53763" . "7512f776" . "6d5fa0b2" . "f"]);
        $_3de589dc8908aa0acc1d667051a758f3 = $_4c24595e81e7e67a084f4708169b7ec6->getOption($GLOBALS["__65da1b1ec2d665" . "3e8a0ab7848e5362" . "15"]["_5269083028d2f37d24843e7b56f800" . "25"]);
        $_4a033bdf0ce701c6255d5238633ab2d0 = $_4c24595e81e7e67a084f4708169b7ec6->getOption($GLOBALS["__65da1b1ec2d6653e8a0ab7848e536" . "215"]["_0521fbd3b745045e7644213cbed2" . "1a21"]);
        $request->attributes->set($GLOBALS["__65da1b1ec" . "2d6653e8a0a" . "b7848e53621" . "5"]["_7adf80c15f5" . "37637512f776" . "6d5fa0b2f"], $_601a171d59986f7c15972b586685671b);
        $request->attributes->set($GLOBALS["__65da1b1ec2d6653e8a0a" . "b7848e536215"]["_5269083028d2" . "f37d24843e7b5" . "6f80025"], $_3de589dc8908aa0acc1d667051a758f3);
        $request->attributes->set($GLOBALS["__65da1b1ec2d6653e8a0ab7848e53621" . "5"]["_0521fbd3b745045e76" . "44213cbed21a21"], $_4a033bdf0ce701c6255d5238633ab2d0);
        $this->VerifyAccess($event, $_601a171d59986f7c15972b586685671b, $_3de589dc8908aa0acc1d667051a758f3, $_4a033bdf0ce701c6255d5238633ab2d0);
    }
    
    
    
    
    protected function CheckPasswordPolicy()
    {
        
        
        
        try {
            StdAuthenticator::MODE_AJAX;
            
            
            AuthUserPasswordPolicy::Run();
        } catch (PageLoadHookRedirectException $_fe441aa3ef350bfb1a1a1ad8520dd530) {
            $this->logger->notice($GLOBALS["__65da1b1ec2d6653e8" . "a0ab7848e536215"]["_6a11dd4" . "2eb3818b" . "d9995b59" . "3e850c7e" . "a"], [$_fe441aa3ef350bfb1a1a1ad8520dd530]);
            throw new ForcedPasswordChangeException($GLOBALS["__65da1b1ec2d6" . "653e8a0ab7848e" . "536215"]["_d5e3acfe493fa21" . "11d22dfb93da33d8" . "7"]($GLOBALS["__65da1b1ec2d66" . "53e8a0ab7848e53" . "6215"]["_965e72db2455ea9116779414" . "f062746a"]));
        }
    }
}