Skip to content

Commit

Permalink
Merge pull request #449 from favicode/feature/#443-shielding-list
Browse files Browse the repository at this point in the history
Feature/#443 shielding list
  • Loading branch information
vvuksan authored May 20, 2021
2 parents 40d347c + ff793c6 commit 7e52f1d
Show file tree
Hide file tree
Showing 7 changed files with 1,097 additions and 389 deletions.
22 changes: 19 additions & 3 deletions Controller/Adminhtml/FastlyCdn/Backend/CreateBackend.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,18 @@
*/
namespace Fastly\Cdn\Controller\Adminhtml\FastlyCdn\Backend;

use Exception;
use Fastly\Cdn\Helper\Vcl;
use Fastly\Cdn\Model\Api;
use Fastly\Cdn\Model\Config;
use Fastly\Cdn\Model\System\Config\Shielding\DataCenters;
use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\App\Request\Http;
use Magento\Framework\App\ResponseInterface;
use Magento\Framework\Controller\Result\Json;
use Magento\Framework\Controller\Result\JsonFactory;
use Magento\Framework\Controller\ResultInterface;

/**
* Class CreateBackend
Expand Down Expand Up @@ -57,12 +62,18 @@ class CreateBackend extends Action
*/
private $config;

/**
* @var DataCenters
*/
private $dataCenters;

/**
* ConfigureBackend constructor
*
* @param Context $context
* @param Http $request
* @param JsonFactory $resultJsonFactory
* @param DataCenters $dataCenters
* @param Api $api
* @param Vcl $vcl
* @param Config $config
Expand All @@ -71,6 +82,7 @@ public function __construct(
Context $context,
Http $request,
JsonFactory $resultJsonFactory,
DataCenters $dataCenters,
Api $api,
Vcl $vcl,
Config $config
Expand All @@ -81,10 +93,11 @@ public function __construct(
$this->vcl = $vcl;
$this->config = $config;
parent::__construct($context);
$this->dataCenters = $dataCenters;
}

/**
* @return \Magento\Framework\App\ResponseInterface|\Magento\Framework\Controller\Result\Json|\Magento\Framework\Controller\ResultInterface
* @return ResponseInterface|Json|ResultInterface
*/
public function execute()
{
Expand All @@ -95,7 +108,10 @@ public function execute()
$this->validateAddress($address);

if ($form == 'false') {
return $result->setData(['status' => true]);
return $result->setData([
'status' => true,
'data_centers' => $this->dataCenters->getShieldingPoints()
]);
}

$override = $this->validateOverride($this->getRequest()->getParam('override_host'));
Expand Down Expand Up @@ -216,7 +232,7 @@ public function execute()
'status' => true,
'active_version' => $clone->number
]);
} catch (\Exception $e) {
} catch (Exception $e) {
return $result->setData([
'status' => false,
'msg' => $e->getMessage()
Expand Down
13 changes: 12 additions & 1 deletion Controller/Adminhtml/FastlyCdn/Backend/GetBackends.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
*/
namespace Fastly\Cdn\Controller\Adminhtml\FastlyCdn\Backend;

use Exception;
use Fastly\Cdn\Model\System\Config\Shielding\DataCenters;
use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\App\Request\Http;
Expand Down Expand Up @@ -48,23 +50,31 @@ class GetBackends extends Action
*/
private $api;

/**
* @var DataCenters
*/
private $dataCenters;

/**
* GetBackends constructor.
* @param Context $context
* @param Http $request
* @param JsonFactory $resultJsonFactory
* @param DataCenters $dataCenters
* @param Api $api
*/
public function __construct(
Context $context,
Http $request,
JsonFactory $resultJsonFactory,
DataCenters $dataCenters,
Api $api
) {
$this->request = $request;
$this->resultJson = $resultJsonFactory;
$this->api = $api;
parent::__construct($context);
$this->dataCenters = $dataCenters;
}

/**
Expand All @@ -88,9 +98,10 @@ public function execute()

return $result->setData([
'status' => true,
'data_centers' => $this->dataCenters->getShieldingPoints(),
'backends' => $backends
]);
} catch (\Exception $e) {
} catch (Exception $e) {
return $result->setData([
'status' => false,
'msg' => $e->getMessage()
Expand Down
7 changes: 7 additions & 0 deletions Model/Config.php
Original file line number Diff line number Diff line change
Expand Up @@ -538,6 +538,13 @@ class Config extends \Magento\PageCache\Model\Config
*/
const UPDATED_VCL_FLAG = 'Fastly/Cdn/updated_VCL_to_Fastly_flag';

/**
* shielding directory in /etc
*/
const SHIELDING_PATH = '/shielding/';

const DATACENTER_FILE = 'datacenters.json';

/**
* @var Json|null
*/
Expand Down
107 changes: 107 additions & 0 deletions Model/System/Config/Shielding/DataCenters.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
<?php

namespace Fastly\Cdn\Model\System\Config\Shielding;

use Fastly\Cdn\Model\Config;
use InvalidArgumentException;
use Magento\Framework\Exception\FileSystemException;
use Magento\Framework\Filesystem\Driver\File;
use Magento\Framework\Module\Dir;
use Magento\Framework\Module\Dir\Reader;
use Magento\Framework\Serialize\SerializerInterface;
use Psr\Log\LoggerInterface;

/**
* Class DataCenters
* @package Fastly\Cdn\Model\System\Config\Shielding
*/
class DataCenters
{
/**
* @var File
*/
private $driverFile;

/**
* @var Reader
*/
private $reader;

/**
* @var SerializerInterface
*/
private $serializer;

/**
* @var LoggerInterface
*/
private $logger;

/**
* DataCenters constructor.
* @param File $driverFile
* @param LoggerInterface $logger
* @param SerializerInterface $serializer
* @param Reader $reader
*/
public function __construct(
File $driverFile,
LoggerInterface $logger,
SerializerInterface $serializer,
Reader $reader
) {
$this->driverFile = $driverFile;
$this->reader = $reader;
$this->serializer = $serializer;
$this->logger = $logger;
}

/**
* @return array
*/
public function getShieldingPoints(): array
{
$etcPath = $this->reader->getModuleDir(Dir::MODULE_ETC_DIR, Config::FASTLY_MODULE_NAME);
$shieldingPath = $etcPath . Config::SHIELDING_PATH . Config::DATACENTER_FILE;

try {
if (!$this->driverFile->isExists($shieldingPath))
return [];

if (!$dataCenters = $this->driverFile->fileGetContents($shieldingPath))
return [];

if (!$dataCenters = $this->serializer->unserialize($dataCenters))
return [];

return $this->groupDataCenters($dataCenters);

} catch (InvalidArgumentException | FileSystemException $e) {
$this->logger->error($e->getLogMessage());
return [];
}
}

/**
* @param array $dataCenters
* @return array
*/
protected function groupDataCenters(array $dataCenters): array
{
if (!$dataCenters)
return [];

$data = [];
foreach ($dataCenters as $dataCenter) {
if (!isset($dataCenter['group'], $dataCenter['name'], $dataCenter['code'], $dataCenter['shield']))
continue;

$data[$dataCenter['group']][] = [
'value' => $dataCenter['shield'],
'label' => $dataCenter['name'] . ' (' . $dataCenter['code'] . ')'
];
}

return $data;
}
}
Loading

0 comments on commit 7e52f1d

Please sign in to comment.