Skip to content

Commit e518777

Browse files
Merge remote-tracking branch 'gl_adobe_ims/CABPI-503-phase2' into Arrows_IMS_17Mar23
2 parents 5efd10a + d931862 commit e518777

File tree

3 files changed

+156
-0
lines changed

3 files changed

+156
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\AdminAdobeIms\Plugin;
9+
10+
use Magento\AdminAdobeIms\Logger\AdminAdobeImsLogger;
11+
use Magento\AdobeImsApi\Api\IsTokenValidInterface;
12+
use Magento\Backend\Model\Auth;
13+
14+
/**
15+
* Validate ims access token
16+
*/
17+
class ValidateAccessTokenPlugin
18+
{
19+
/**
20+
* @var AdminAdobeImsLogger
21+
*/
22+
private AdminAdobeImsLogger $logger;
23+
24+
/**
25+
* @var IsTokenValidInterface
26+
*/
27+
private IsTokenValidInterface $isTokenValid;
28+
29+
/**
30+
* @param IsTokenValidInterface $isTokenValid
31+
* @param AdminAdobeImsLogger $logger
32+
*/
33+
public function __construct(
34+
IsTokenValidInterface $isTokenValid,
35+
AdminAdobeImsLogger $logger
36+
) {
37+
$this->isTokenValid = $isTokenValid;
38+
$this->logger = $logger;
39+
}
40+
41+
/**
42+
* Check if IMS access token is still valid
43+
*
44+
* @param Auth $subject
45+
* @param bool $result
46+
* @return bool
47+
* @throws \Magento\Framework\Exception\AuthorizationException
48+
*/
49+
public function afterIsLoggedIn(Auth $subject, bool $result): bool
50+
{
51+
$accessToken = $subject->getAuthStorage()->getAdobeAccessToken();
52+
if ($result && $accessToken) {
53+
if (!$this->isTokenValid->validateToken($accessToken)) {
54+
$subject->logout();
55+
$this->logger->error('Admin Access Token is not valid');
56+
return false;
57+
}
58+
}
59+
return $result;
60+
}
61+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\AdminAdobeIms\Test\Unit\Plugin;
9+
10+
use Magento\AdminAdobeIms\Logger\AdminAdobeImsLogger;
11+
use Magento\AdminAdobeIms\Model\Auth;
12+
use Magento\AdminAdobeIms\Plugin\ValidateAccessTokenPlugin;
13+
use Magento\AdobeImsApi\Api\IsTokenValidInterface;
14+
use Magento\Backend\Model\Auth\Session;
15+
use PHPUnit\Framework\TestCase;
16+
17+
class ValidateAccessTokenPluginTest extends TestCase
18+
{
19+
/**
20+
* @var ValidateAccessTokenPlugin
21+
*/
22+
private $plugin;
23+
24+
/**
25+
* @var IsTokenValidInterface
26+
*/
27+
private $isTokenValid;
28+
29+
/**
30+
* @var AdminAdobeImsLogger
31+
*/
32+
private $logger;
33+
34+
/**
35+
* @var Session
36+
*/
37+
protected $adminSession;
38+
39+
/**
40+
* @return void
41+
*/
42+
protected function setUp(): void
43+
{
44+
$this->isTokenValid = $this->createMock(IsTokenValidInterface::class);
45+
$this->logger = $this->createMock(AdminAdobeImsLogger::class);
46+
$this->adminSession = $this->getMockBuilder(Session::class)
47+
->disableOriginalConstructor()
48+
->setMethods(['getAdobeAccessToken'])
49+
->getMock();
50+
51+
$this->plugin = new ValidateAccessTokenPlugin(
52+
$this->isTokenValid,
53+
$this->logger
54+
);
55+
}
56+
57+
/**
58+
* Test plugin session logout when access token is expired
59+
*
60+
* @return void
61+
* @param array $responseData
62+
* @dataProvider responseDataProvider
63+
*/
64+
public function testPluginSessionLogoutWhenAccessTokenIsExpired($responseData): void
65+
{
66+
$subject = $this->createMock(Auth::class);
67+
68+
$this->adminSession->expects($this->any())
69+
->method('getAdobeAccessToken')
70+
->willReturn('test');
71+
72+
$subject->method('getAuthStorage')
73+
->willReturn($this->adminSession);
74+
75+
$this->isTokenValid
76+
->expects($this->once())
77+
->method('validateToken')
78+
->willReturn($responseData);
79+
80+
$this->assertEquals($responseData, $this->plugin->afterIsLoggedIn($subject, true));
81+
}
82+
83+
/**
84+
* @return array
85+
*/
86+
public function responseDataProvider(): array
87+
{
88+
return [
89+
[true],
90+
[false]
91+
];
92+
}
93+
}

AdminAdobeIms/etc/di.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@
6464
<type name="Magento\Backend\Model\Auth">
6565
<plugin name="disable_admin_login_auth"
6666
type="Magento\AdminAdobeIms\Plugin\DisableAdminLoginAuthPlugin"/>
67+
<plugin name="admin_ims_auth_validate_access_token"
68+
type="Magento\AdminAdobeIms\Plugin\ValidateAccessTokenPlugin"/>
6769
</type>
6870

6971
<type name="Magento\Integration\Model\AdminTokenService">

0 commit comments

Comments
 (0)