Skip to content

Commit d629e61

Browse files
author
He, Joan(johe)
committed
Merge pull request #216 from magento-extensibility/MAGETWO-15665-IP-Values
[Extensibility] MAGETWO-15665: Ip values validation fix
2 parents 569b0d6 + 1a8ebd3 commit d629e61

File tree

4 files changed

+161
-7
lines changed

4 files changed

+161
-7
lines changed

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -154,13 +154,6 @@
154154
<label>Developer</label>
155155
<tab>advanced</tab>
156156
<resource>Magento_Backend::dev</resource>
157-
<group id="restrict" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
158-
<label>Developer Client Restrictions</label>
159-
<field id="allow_ips" translate="label comment" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
160-
<label>Allowed IPs (comma separated)</label>
161-
<comment>Leave empty for access from any location.</comment>
162-
</field>
163-
</group>
164157
<group id="debug" translate="label" type="text" sortOrder="20" showInDefault="0" showInWebsite="1" showInStore="1">
165158
<label>Debug</label>
166159
<field id="template_hints" translate="label" type="select" 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+
private $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+
$allowedIpsRaw = $this->getValue();
52+
$noticeMsgArray = [];
53+
$allowedIpsArray = [];
54+
55+
if (empty($allowedIpsRaw)) {
56+
return parent::beforeSave();
57+
}
58+
59+
$dataArray = explode(',', $allowedIpsRaw);
60+
foreach ($dataArray as $data) {
61+
if (filter_var(trim($data), FILTER_VALIDATE_IP)) {
62+
$allowedIpsArray[] = $data;
63+
} else {
64+
$noticeMsgArray[] = $data;
65+
}
66+
}
67+
68+
$noticeMsg = implode(',', $noticeMsgArray);
69+
if (!empty($noticeMsgArray)) {
70+
$this->messageManager->addNotice(
71+
__(
72+
__('The following invalid values cannot be saved: %values', ['values' => $noticeMsg])
73+
)
74+
);
75+
}
76+
77+
$this->setValue(implode(',', $allowedIpsArray));
78+
return parent::beforeSave();
79+
}
80+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
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\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
9+
10+
/**
11+
* Class AllowedIpsTest
12+
*/
13+
class AllowedIpsTest extends \PHPUnit_Framework_TestCase
14+
{
15+
/**
16+
* @var \Magento\Developer\Model\Config\Backend\AllowedIps
17+
*/
18+
protected $model;
19+
20+
protected function setUp()
21+
{
22+
$contextMock = $this->getMockBuilder('\Magento\Framework\Model\Context')
23+
->disableOriginalConstructor()
24+
->getMock();
25+
$eventMangerMock = $this->getMockBuilder('\Magento\Framework\Event\ManagerInterface')
26+
->disableOriginalConstructor()
27+
->getMock();
28+
$contextMock->expects($this->any())
29+
->method('getEventDispatcher')
30+
->willReturn($eventMangerMock);
31+
32+
$objectManagerHelper = new ObjectManagerHelper($this);
33+
34+
$this->model = $objectManagerHelper->getObject(
35+
'Magento\Developer\Model\Config\Backend\AllowedIps',
36+
[
37+
'context' => $contextMock,
38+
]
39+
);
40+
}
41+
42+
/**
43+
* @param string $value
44+
* @param string $expected
45+
* @dataProvider beforeSaveDataProvider
46+
* @return void
47+
*/
48+
public function testBeforeSave($value, $expected)
49+
{
50+
$this->assertNull($this->model->getValue());
51+
$this->model->setValue($value);
52+
$this->model->beforeSave();
53+
$this->assertEquals($expected, trim($this->model->getValue()));
54+
}
55+
56+
/**
57+
* @return array
58+
*/
59+
public function beforeSaveDataProvider()
60+
{
61+
return [
62+
[ '', '' ],
63+
[ ', 10.64.206.85, 10. 64.85.206 ', '10.64.206.85' ],
64+
[ '10.64.206.85, 10.64.1a.x, ,,', '10.64.206.85' ],
65+
[ ' ,, 10.64.206.85, 10.49.206.85 , ', '10.64.206.85, 10.49.206.85' ],
66+
[ '2001:db8:0:1234:0:567:8:1, ', '2001:db8:0:1234:0:567:8:1' ], /* valid IPV6 address */
67+
[ '2001:0cb8:25a3:04c1:1324:8a2b:0471:8221', '2001:0cb8:25a3:04c1:1324:8a2b:0471:8221'],
68+
[ '255.255.255.255', '255.255.255.255'], /* valid private ip */
69+
[ '127.0.0.1, ::1', '127.0.0.1, ::1'], /* valid reserved ip */
70+
['*[789bo88n=], 12.34.56.78,[,q 049cq9840@@', '12.34.56.78']
71+
];
72+
}
73+
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,14 @@
1515
<source_model>Magento\Developer\Model\Config\Source\WorkflowType</source_model>
1616
</field>
1717
</group>
18+
<group id="restrict" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
19+
<label>Developer Client Restrictions</label>
20+
<field id="allow_ips" translate="label comment" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
21+
<label>Allowed IPs (comma separated)</label>
22+
<comment>Leave empty for access from any location.</comment>
23+
<backend_model>Magento\Developer\Model\Config\Backend\AllowedIps</backend_model>
24+
</field>
25+
</group>
1826
</section>
1927
</system>
2028
</config>

0 commit comments

Comments
 (0)