Session.php 3.69 KB
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\Setup\Controller;

/**
 * Sets up session for setup/index.php/session/prolong or redirects to error page
 */
class Session extends \Zend\Mvc\Controller\AbstractActionController
{
    /**
     * @var \Zend\ServiceManager\ServiceManager
     */
    private $serviceManager;

    /**
     * @var \Magento\Setup\Model\ObjectManagerProvider $objectManagerProvider
     */
    private $objectManagerProvider;

    /**
     * @param \Zend\ServiceManager\ServiceManager $serviceManager
     * @param \Magento\Setup\Model\ObjectManagerProvider $objectManagerProvider
     */
    public function __construct(
        \Zend\ServiceManager\ServiceManager $serviceManager,
        \Magento\Setup\Model\ObjectManagerProvider $objectManagerProvider
    ) {
        $this->serviceManager = $serviceManager;
        $this->objectManagerProvider = $objectManagerProvider;
    }

    /**
     * No index action, return 404 error page
     *
     * @return \Zend\View\Model\ViewModel|\Zend\Http\Response
     */
    public function indexAction()
    {
        $view = new \Zend\View\Model\ViewModel();
        $view->setTemplate('/error/404.phtml');
        $this->getResponse()->setStatusCode(\Zend\Http\Response::STATUS_CODE_404);
        return $view;
    }

    /**
     * Prolong session
     *
     * @return string
     */
    public function prolongAction()
    {
        try {
            if ($this->serviceManager->get(\Magento\Framework\App\DeploymentConfig::class)->isAvailable()) {
                $objectManager = $this->objectManagerProvider->get();
                /* @var \Magento\Backend\Model\Auth\Session $session */
                $session = $objectManager->get(\Magento\Backend\Model\Auth\Session::class);
                // check if session was already set in \Magento\Setup\Mvc\Bootstrap\InitParamListener::authPreDispatch
                if (!$session->isSessionExists()) {
                    /** @var \Magento\Framework\App\State $adminAppState */
                    $adminAppState = $objectManager->get(\Magento\Framework\App\State::class);
                    $adminAppState->setAreaCode(\Magento\Framework\App\Area::AREA_ADMINHTML);
                    $sessionConfig = $objectManager->get(\Magento\Backend\Model\Session\AdminConfig::class);
                    /** @var \Magento\Backend\Model\Url $backendUrl */
                    $backendUrl = $objectManager->get(\Magento\Backend\Model\Url::class);
                    $urlPath = parse_url($backendUrl->getBaseUrl(), PHP_URL_PATH);
                    $cookiePath = $urlPath . 'setup';
                    $sessionConfig->setCookiePath($cookiePath);
                    /* @var \Magento\Backend\Model\Auth\Session $session */
                    $session = $objectManager->create(
                        \Magento\Backend\Model\Auth\Session::class,
                        [
                            'sessionConfig' => $sessionConfig,
                            'appState' => $adminAppState
                        ]
                    );
                }
                $session->prolong();
                return new \Zend\View\Model\JsonModel(['success' => true]);
            }
        } catch (\Exception $e) {
        }
        return new \Zend\View\Model\JsonModel(['success' => false]);
    }

    /**
     * Unlogin action, return 401 error page
     *
     * @return \Zend\View\Model\ViewModel|\Zend\Http\Response
     */
    public function unloginAction()
    {
        $view = new \Zend\View\Model\ViewModel();
        $view->setTemplate('/error/401.phtml');
        $this->getResponse()->setStatusCode(\Zend\Http\Response::STATUS_CODE_401);
        return $view;
    }
}