Skip to content

Commit

Permalink
Merge pull request #216 from magento-extensibility/MAGETWO-15665-IP-V…
Browse files Browse the repository at this point in the history
…alues

[Extensibility] MAGETWO-15665: Ip values validation fix
  • Loading branch information
He, Joan(johe) committed Apr 7, 2015
2 parents 569b0d6 + 1a8ebd3 commit d629e61
Show file tree
Hide file tree
Showing 4 changed files with 161 additions and 7 deletions.
7 changes: 0 additions & 7 deletions app/code/Magento/Backend/etc/adminhtml/system.xml
Original file line number Diff line number Diff line change
Expand Up @@ -154,13 +154,6 @@
<label>Developer</label>
<tab>advanced</tab>
<resource>Magento_Backend::dev</resource>
<group id="restrict" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Developer Client Restrictions</label>
<field id="allow_ips" translate="label comment" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Allowed IPs (comma separated)</label>
<comment>Leave empty for access from any location.</comment>
</field>
</group>
<group id="debug" translate="label" type="text" sortOrder="20" showInDefault="0" showInWebsite="1" showInStore="1">
<label>Debug</label>
<field id="template_hints" translate="label" type="select" sortOrder="20" showInDefault="0" showInWebsite="1" showInStore="1">
Expand Down
80 changes: 80 additions & 0 deletions app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
<?php
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Developer\Model\Config\Backend;

/**
* Backend model for validating ip addresses entered in Developer Client Restrictions
*
* Class AllowedIps
*/
class AllowedIps extends \Magento\Framework\App\Config\Value
{
/**
* @var \Magento\Framework\Message\ManagerInterface
*/
private $messageManager;

/**
* Constructor
*
* @param \Magento\Framework\Model\Context $context
* @param \Magento\Framework\Registry $registry
* @param \Magento\Framework\App\Config\ScopeConfigInterface $config
* @param \Magento\Framework\Message\ManagerInterface $messageManager
* @param \Magento\Framework\Model\Resource\AbstractResource $resource
* @param \Magento\Framework\Data\Collection\Db $resourceCollection
* @param array $data
*/
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Framework\App\Config\ScopeConfigInterface $config,
\Magento\Framework\Message\ManagerInterface $messageManager,
\Magento\Framework\Model\Resource\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\Db $resourceCollection = null,
array $data = []
) {
$this->messageManager = $messageManager;
parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
}

/**
* Validate ip addresses before save
*
* @return $this
*/
public function beforeSave()
{
$allowedIpsRaw = $this->getValue();
$noticeMsgArray = [];
$allowedIpsArray = [];

if (empty($allowedIpsRaw)) {
return parent::beforeSave();
}

$dataArray = explode(',', $allowedIpsRaw);
foreach ($dataArray as $data) {
if (filter_var(trim($data), FILTER_VALIDATE_IP)) {
$allowedIpsArray[] = $data;
} else {
$noticeMsgArray[] = $data;
}
}

$noticeMsg = implode(',', $noticeMsgArray);
if (!empty($noticeMsgArray)) {
$this->messageManager->addNotice(
__(
__('The following invalid values cannot be saved: %values', ['values' => $noticeMsg])
)
);
}

$this->setValue(implode(',', $allowedIpsArray));
return parent::beforeSave();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
<?php
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Developer\Test\Unit\Model\Config\Backend;

use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;

/**
* Class AllowedIpsTest
*/
class AllowedIpsTest extends \PHPUnit_Framework_TestCase
{
/**
* @var \Magento\Developer\Model\Config\Backend\AllowedIps
*/
protected $model;

protected function setUp()
{
$contextMock = $this->getMockBuilder('\Magento\Framework\Model\Context')
->disableOriginalConstructor()
->getMock();
$eventMangerMock = $this->getMockBuilder('\Magento\Framework\Event\ManagerInterface')
->disableOriginalConstructor()
->getMock();
$contextMock->expects($this->any())
->method('getEventDispatcher')
->willReturn($eventMangerMock);

$objectManagerHelper = new ObjectManagerHelper($this);

$this->model = $objectManagerHelper->getObject(
'Magento\Developer\Model\Config\Backend\AllowedIps',
[
'context' => $contextMock,
]
);
}

/**
* @param string $value
* @param string $expected
* @dataProvider beforeSaveDataProvider
* @return void
*/
public function testBeforeSave($value, $expected)
{
$this->assertNull($this->model->getValue());
$this->model->setValue($value);
$this->model->beforeSave();
$this->assertEquals($expected, trim($this->model->getValue()));
}

/**
* @return array
*/
public function beforeSaveDataProvider()
{
return [
[ '', '' ],
[ ', 10.64.206.85, 10. 64.85.206 ', '10.64.206.85' ],
[ '10.64.206.85, 10.64.1a.x, ,,', '10.64.206.85' ],
[ ' ,, 10.64.206.85, 10.49.206.85 , ', '10.64.206.85, 10.49.206.85' ],
[ '2001:db8:0:1234:0:567:8:1, ', '2001:db8:0:1234:0:567:8:1' ], /* valid IPV6 address */
[ '2001:0cb8:25a3:04c1:1324:8a2b:0471:8221', '2001:0cb8:25a3:04c1:1324:8a2b:0471:8221'],
[ '255.255.255.255', '255.255.255.255'], /* valid private ip */
[ '127.0.0.1, ::1', '127.0.0.1, ::1'], /* valid reserved ip */
['*[789bo88n=], 12.34.56.78,[,q 049cq9840@@', '12.34.56.78']
];
}
}
8 changes: 8 additions & 0 deletions app/code/Magento/Developer/etc/adminhtml/system.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,14 @@
<source_model>Magento\Developer\Model\Config\Source\WorkflowType</source_model>
</field>
</group>
<group id="restrict" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Developer Client Restrictions</label>
<field id="allow_ips" translate="label comment" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Allowed IPs (comma separated)</label>
<comment>Leave empty for access from any location.</comment>
<backend_model>Magento\Developer\Model\Config\Backend\AllowedIps</backend_model>
</field>
</group>
</section>
</system>
</config>

0 comments on commit d629e61

Please sign in to comment.