Skip to content

Commit b7a8fad

Browse files
author
Joan He
committed
Merge remote-tracking branch 'trigger/MC-15006' into pr
2 parents 7fca666 + ec05346 commit b7a8fad

File tree

2 files changed

+58
-17
lines changed

2 files changed

+58
-17
lines changed

setup/src/Magento/Setup/Controller/Session.php

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
*/
66
namespace Magento\Setup\Controller;
77

8+
/**
9+
* Sets up session for setup/index.php/session/prolong or redirects to error page
10+
*/
811
class Session extends \Zend\Mvc\Controller\AbstractActionController
912
{
1013
/**
@@ -52,23 +55,28 @@ public function prolongAction()
5255
try {
5356
if ($this->serviceManager->get(\Magento\Framework\App\DeploymentConfig::class)->isAvailable()) {
5457
$objectManager = $this->objectManagerProvider->get();
55-
/** @var \Magento\Framework\App\State $adminAppState */
56-
$adminAppState = $objectManager->get(\Magento\Framework\App\State::class);
57-
$adminAppState->setAreaCode(\Magento\Framework\App\Area::AREA_ADMINHTML);
58-
$sessionConfig = $objectManager->get(\Magento\Backend\Model\Session\AdminConfig::class);
59-
/** @var \Magento\Backend\Model\Url $backendUrl */
60-
$backendUrl = $objectManager->get(\Magento\Backend\Model\Url::class);
61-
$urlPath = parse_url($backendUrl->getBaseUrl(), PHP_URL_PATH);
62-
$cookiePath = $urlPath . 'setup';
63-
$sessionConfig->setCookiePath($cookiePath);
6458
/* @var \Magento\Backend\Model\Auth\Session $session */
65-
$session = $objectManager->create(
66-
\Magento\Backend\Model\Auth\Session::class,
67-
[
68-
'sessionConfig' => $sessionConfig,
69-
'appState' => $adminAppState
70-
]
71-
);
59+
$session = $objectManager->get(\Magento\Backend\Model\Auth\Session::class);
60+
// check if session was already set in \Magento\Setup\Mvc\Bootstrap\InitParamListener::authPreDispatch
61+
if (!$session->isSessionExists()) {
62+
/** @var \Magento\Framework\App\State $adminAppState */
63+
$adminAppState = $objectManager->get(\Magento\Framework\App\State::class);
64+
$adminAppState->setAreaCode(\Magento\Framework\App\Area::AREA_ADMINHTML);
65+
$sessionConfig = $objectManager->get(\Magento\Backend\Model\Session\AdminConfig::class);
66+
/** @var \Magento\Backend\Model\Url $backendUrl */
67+
$backendUrl = $objectManager->get(\Magento\Backend\Model\Url::class);
68+
$urlPath = parse_url($backendUrl->getBaseUrl(), PHP_URL_PATH);
69+
$cookiePath = $urlPath . 'setup';
70+
$sessionConfig->setCookiePath($cookiePath);
71+
/* @var \Magento\Backend\Model\Auth\Session $session */
72+
$session = $objectManager->create(
73+
\Magento\Backend\Model\Auth\Session::class,
74+
[
75+
'sessionConfig' => $sessionConfig,
76+
'appState' => $adminAppState
77+
]
78+
);
79+
}
7280
$session->prolong();
7381
return new \Zend\View\Model\JsonModel(['success' => true]);
7482
}
@@ -78,6 +86,8 @@ public function prolongAction()
7886
}
7987

8088
/**
89+
* Unlogin action, return 401 error page
90+
*
8191
* @return \Zend\View\Model\ViewModel|\Zend\Http\Response
8292
*/
8393
public function unloginAction()

setup/src/Magento/Setup/Test/Unit/Controller/SessionTest.php

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ public function testUnloginAction()
4848
$this->createPartialMock(\Magento\Framework\App\DeploymentConfig::class, ['isAvailable']);
4949
$deployConfigMock->expects($this->once())->method('isAvailable')->will($this->returnValue(true));
5050

51+
$sessionMock = $this->createPartialMock(
52+
\Magento\Backend\Model\Auth\Session::class,
53+
['prolong', 'isSessionExists']
54+
);
55+
$sessionMock->expects($this->once())->method('isSessionExists')->will($this->returnValue(false));
56+
5157
$stateMock = $this->createPartialMock(\Magento\Framework\App\State::class, ['setAreaCode']);
5258
$stateMock->expects($this->once())->method('setAreaCode');
5359

@@ -57,6 +63,7 @@ public function testUnloginAction()
5763
$urlMock = $this->createMock(\Magento\Backend\Model\Url::class);
5864

5965
$returnValueMap = [
66+
[\Magento\Backend\Model\Auth\Session::class, $sessionMock],
6067
[\Magento\Framework\App\State::class, $stateMock],
6168
[\Magento\Backend\Model\Session\AdminConfig::class, $sessionConfigMock],
6269
[\Magento\Backend\Model\Url::class, $urlMock]
@@ -68,7 +75,6 @@ public function testUnloginAction()
6875
->method('get')
6976
->will($this->returnValueMap($returnValueMap));
7077

71-
$sessionMock = $this->createPartialMock(\Magento\Backend\Model\Auth\Session::class, ['prolong']);
7278
$this->objectManager->expects($this->once())
7379
->method('create')
7480
->will($this->returnValue($sessionMock));
@@ -87,4 +93,29 @@ public function testIndexAction()
8793
$viewModel = $controller->unloginAction();
8894
$this->assertInstanceOf(\Zend\View\Model\ViewModel::class, $viewModel);
8995
}
96+
97+
/**
98+
* @covers \Magento\Setup\Controller\SystemConfig::prolongAction
99+
*/
100+
public function testProlongActionWithExistingSession()
101+
{
102+
$this->objectManagerProvider->expects($this->once())->method('get')->will(
103+
$this->returnValue($this->objectManager)
104+
);
105+
$deployConfigMock =
106+
$this->createPartialMock(\Magento\Framework\App\DeploymentConfig::class, ['isAvailable']);
107+
$deployConfigMock->expects($this->once())->method('isAvailable')->will($this->returnValue(true));
108+
$sessionMock = $this->createPartialMock(
109+
\Magento\Backend\Model\Auth\Session::class,
110+
['prolong', 'isSessionExists']
111+
);
112+
$sessionMock->expects($this->once())->method('isSessionExists')->will($this->returnValue(true));
113+
114+
$this->serviceManager->expects($this->once())->method('get')->will($this->returnValue($deployConfigMock));
115+
$this->objectManager->expects($this->once())
116+
->method('get')
117+
->will($this->returnValue($sessionMock));
118+
$controller = new Session($this->serviceManager, $this->objectManagerProvider);
119+
$this->assertEquals(new \Zend\View\Model\JsonModel(['success' => true]), $controller->prolongAction());
120+
}
90121
}

0 commit comments

Comments
 (0)