Skip to content

Commit 1c6faea

Browse files
author
Ji Lu
committed
MAGETWO-15665:Added validation for Developer Client Restriction field
1 parent 8b8cd0b commit 1c6faea

File tree

3 files changed

+199
-0
lines changed

3 files changed

+199
-0
lines changed

app/code/Magento/Backend/etc/adminhtml/system.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@
159159
<field id="allow_ips" translate="label comment" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
160160
<label>Allowed IPs (comma separated)</label>
161161
<comment>Leave empty for access from any location.</comment>
162+
<backend_model>Magento\Developer\Model\Config\Backend\AllowedIps</backend_model>
162163
</field>
163164
</group>
164165
<group id="debug" translate="label" type="text" sortOrder="20" showInDefault="0" showInWebsite="1" showInStore="1">
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Developer\Model\Config\Backend;
7+
8+
/**
9+
* Backend model for validating ip addresses entered in Developer Client Restrictions
10+
*
11+
* Class AllowedIps
12+
*/
13+
class AllowedIps extends \Magento\Framework\App\Config\Value
14+
{
15+
/**
16+
* @var \Magento\Framework\Message\ManagerInterface
17+
*/
18+
protected $messageManager;
19+
20+
/**
21+
* Constructor
22+
*
23+
* @param \Magento\Framework\Model\Context $context
24+
* @param \Magento\Framework\Registry $registry
25+
* @param \Magento\Framework\App\Config\ScopeConfigInterface $config
26+
* @param \Magento\Framework\Message\ManagerInterface $messageManager
27+
* @param \Magento\Framework\Model\Resource\AbstractResource $resource
28+
* @param \Magento\Framework\Data\Collection\Db $resourceCollection
29+
* @param array $data
30+
*/
31+
public function __construct(
32+
\Magento\Framework\Model\Context $context,
33+
\Magento\Framework\Registry $registry,
34+
\Magento\Framework\App\Config\ScopeConfigInterface $config,
35+
\Magento\Framework\Message\ManagerInterface $messageManager,
36+
\Magento\Framework\Model\Resource\AbstractResource $resource = null,
37+
\Magento\Framework\Data\Collection\Db $resourceCollection = null,
38+
array $data = []
39+
) {
40+
$this->messageManager = $messageManager;
41+
parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
42+
}
43+
44+
/**
45+
* Validate ip addresses before save
46+
*
47+
* @return $this
48+
*/
49+
public function beforeSave()
50+
{
51+
parent::beforeSave();
52+
$fieldSetData = $this->getFieldsetDataValue('allow_ips');
53+
$noticeMsg = '';
54+
$allowedIps = '';
55+
56+
if (empty($fieldSetData)) {
57+
return $this;
58+
}
59+
60+
$dataArray = preg_split('#\s*,\s*#', $fieldSetData, null, PREG_SPLIT_NO_EMPTY);
61+
foreach ($dataArray as $k => $data) {
62+
$data = trim(preg_replace('/\s+/','', $data));
63+
if ( !filter_var($data, FILTER_VALIDATE_IP) === false ) {
64+
$allowedIps .= (empty($allowedIps)) ? $data : "," . $data;
65+
} else {
66+
$noticeMsg .= (empty($noticeMsg)) ? $data : "," . $data;
67+
}
68+
}
69+
70+
if (!empty($noticeMsg))
71+
$this->messageManager->addNotice(
72+
__(
73+
'Invalid values ' . $noticeMsg . ' are not saved.'
74+
)
75+
);
76+
77+
$this->setValue($allowedIps);
78+
return $this;
79+
}
80+
}
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Developer\Test\Unit\Model\Config\Backend;
7+
8+
use Magento\Developer\Model\Config\Backend\AllowedIps;
9+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
10+
11+
/**
12+
* Class AllowedIpsTest
13+
*/
14+
class AllowedIpsTest extends \PHPUnit_Framework_TestCase
15+
{
16+
/**
17+
* @var ObjectManagerHelper
18+
*/
19+
protected $objectManagerHelper;
20+
21+
/**
22+
* @var \Magento\Developer\Model\Config\Backend\AllowedIps
23+
*/
24+
protected $model;
25+
26+
/**
27+
* @var \Magento\Framework\Model\Context|\PHPUnit_Framework_MockObject_MockObject
28+
*/
29+
protected $contextMock;
30+
31+
/**
32+
* @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
33+
*/
34+
protected $eventMangerMock;
35+
36+
protected function setUp()
37+
{
38+
$this->contextMock = $this->getMockBuilder('\Magento\Framework\Model\Context')
39+
->disableOriginalConstructor()
40+
->getMock();
41+
$eventMangerMock = $this->getMockBuilder('\Magento\Framework\Event\ManagerInterface')
42+
->disableOriginalConstructor()
43+
->getMock();
44+
$this->contextMock->expects($this->any())
45+
->method('getEventDispatcher')
46+
->willReturn($eventMangerMock);
47+
48+
$this->objectManagerHelper = new ObjectManagerHelper($this);
49+
50+
$this->model = $this->objectManagerHelper->getObject(
51+
'Magento\Developer\Model\Config\Backend\AllowedIps',
52+
[
53+
'context' => $this->contextMock,
54+
]
55+
);
56+
}
57+
58+
protected function tearDown()
59+
{
60+
$this->model = null;
61+
}
62+
63+
/**
64+
* @param array $fieldSetData
65+
* @param string $expected
66+
* @dataProvider beforeSaveDataProvider
67+
* @return void
68+
*/
69+
public function testBeforeSave($fieldSetData, $expected)
70+
{
71+
$this->assertNull($this->model->getFieldsetDataValue('allow_ips'));
72+
$this->model->setFieldsetData($fieldSetData);
73+
$this->model->beforeSave();
74+
$this->assertEquals($expected, $this->model->getData('value'));
75+
}
76+
77+
/**
78+
* @return array
79+
*/
80+
public function beforeSaveDataProvider()
81+
{
82+
return [
83+
[
84+
['allow_ips' => ''],
85+
'',
86+
],
87+
[
88+
['allow_ips' => ', 10.64.206.85, 10. 64.85.206 '],
89+
'10.64.206.85,10.64.85.206',
90+
],
91+
[
92+
['allow_ips' => '10.64.206.85, 10.64.1a.x'],
93+
'10.64.206.85',
94+
],
95+
[
96+
['allow_ips' => ' 10.64. 206.85, 10.49.a. b '], /* with whitespaces */
97+
'10.64.206.85',
98+
],
99+
[
100+
['allow_ips' => '2001:db8:0:1234:0:567:8:1, '], /* valid IPV6 address */
101+
'2001:db8:0:1234:0:567:8:1',
102+
],
103+
104+
[
105+
['allow_ips' => '2001:0cb8:25a3:04c1:1324:8a2b:0471:8221'], /* valid IPV6 address */
106+
'2001:0cb8:25a3:04c1:1324:8a2b:0471:8221',
107+
],
108+
[
109+
['allow_ips' => '255.255.255.255'], /* valid private ip */
110+
'255.255.255.255',
111+
],
112+
[
113+
['allow_ips' => '127.0.0.1, ::1'], /* valid reserved ip */
114+
'127.0.0.1,::1',
115+
],
116+
];
117+
}
118+
}

0 commit comments

Comments
 (0)