Automation init...4
This commit is contained in:
parent
5a5bf6802a
commit
b3f23cb4ea
@ -26,13 +26,7 @@ class AccountController extends MVController
|
|||||||
$this->class_name = 'Account';
|
$this->class_name = 'Account';
|
||||||
helper($this->class_name);
|
helper($this->class_name);
|
||||||
}
|
}
|
||||||
final protected function getMySocket(): CloudflareSocket
|
|
||||||
{
|
|
||||||
if ($this->_mySocket === null) {
|
|
||||||
$this->_mySocket = new CloudflareSocket();
|
|
||||||
}
|
|
||||||
return $this->_mySocket;
|
|
||||||
}
|
|
||||||
final protected function getModel(): AccountModel
|
final protected function getModel(): AccountModel
|
||||||
{
|
{
|
||||||
if ($this->_model === null) {
|
if ($this->_model === null) {
|
||||||
@ -53,7 +47,7 @@ class AccountController extends MVController
|
|||||||
}
|
}
|
||||||
protected function create_process_submit(): AccountEntity
|
protected function create_process_submit(): AccountEntity
|
||||||
{
|
{
|
||||||
$account = new Account($this->getMySocket(), $this->getModel());
|
$account = new Account();
|
||||||
return $account->create($this->formDatas);
|
return $account->create($this->formDatas);
|
||||||
}
|
}
|
||||||
public function create(): RedirectResponse
|
public function create(): RedirectResponse
|
||||||
|
|||||||
@ -2,24 +2,27 @@
|
|||||||
|
|
||||||
namespace App\Controllers\Cloudflare;
|
namespace App\Controllers\Cloudflare;
|
||||||
|
|
||||||
|
use App\Controllers\MVController;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use CodeIgniter\HTTP\ResponseInterface;
|
use CodeIgniter\HTTP\ResponseInterface;
|
||||||
use CodeIgniter\HTTP\RequestInterface;
|
use CodeIgniter\HTTP\RequestInterface;
|
||||||
use CodeIgniter\HTTP\RedirectResponse;
|
use CodeIgniter\HTTP\RedirectResponse;
|
||||||
use App\Traits\AuthTrait;
|
use App\Traits\AuthTrait;
|
||||||
|
|
||||||
use App\Models\Cloudflare\RecordModel;
|
|
||||||
use App\Models\Cloudflare\AccountModel;
|
|
||||||
use App\Libraries\MySocket\CloudflareSocket;
|
use App\Libraries\MySocket\CloudflareSocket;
|
||||||
use App\Libraries\MyCloudflare\Record;
|
use App\Libraries\MyCloudflare\Record;
|
||||||
|
use App\Models\Cloudflare\ZoneModel;
|
||||||
|
use App\Models\Cloudflare\AccountModel;
|
||||||
|
use App\Models\Cloudflare\API\RecordModel;
|
||||||
use App\Entities\Cloudflare\RecordEntity;
|
use App\Entities\Cloudflare\RecordEntity;
|
||||||
use App\Controllers\MVController;
|
|
||||||
|
|
||||||
class RecordController extends MVController
|
class RecordController extends MVController
|
||||||
{
|
{
|
||||||
use AuthTrait;
|
use AuthTrait;
|
||||||
private $_model = null;
|
private $_model = null;
|
||||||
private $_accountModel = null;
|
private $_accountModel = null;
|
||||||
|
private $_zoneModel = null;
|
||||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
||||||
{
|
{
|
||||||
parent::initController($request, $response, $logger);
|
parent::initController($request, $response, $logger);
|
||||||
@ -27,13 +30,6 @@ class RecordController extends MVController
|
|||||||
$this->class_name = 'Record';
|
$this->class_name = 'Record';
|
||||||
helper($this->class_name);
|
helper($this->class_name);
|
||||||
}
|
}
|
||||||
final protected function getMySocket(): CloudflareSocket
|
|
||||||
{
|
|
||||||
if ($this->_mySocket === null) {
|
|
||||||
$this->_mySocket = new CloudflareSocket();
|
|
||||||
}
|
|
||||||
return $this->_mySocket;
|
|
||||||
}
|
|
||||||
final protected function getModel(): RecordModel
|
final protected function getModel(): RecordModel
|
||||||
{
|
{
|
||||||
if ($this->_model === null) {
|
if ($this->_model === null) {
|
||||||
@ -48,6 +44,13 @@ class RecordController extends MVController
|
|||||||
}
|
}
|
||||||
return $this->_accountModel;
|
return $this->_accountModel;
|
||||||
}
|
}
|
||||||
|
final protected function getZoneModel(): ZoneModel
|
||||||
|
{
|
||||||
|
if ($this->_zoneModel === null) {
|
||||||
|
$this->_zoneModel = new ZoneModel();
|
||||||
|
}
|
||||||
|
return $this->_zoneModel;
|
||||||
|
}
|
||||||
protected function create_init(): void
|
protected function create_init(): void
|
||||||
{
|
{
|
||||||
$this->fields = ['id', 'apikey'];
|
$this->fields = ['id', 'apikey'];
|
||||||
@ -61,11 +64,9 @@ class RecordController extends MVController
|
|||||||
}
|
}
|
||||||
protected function create_process_submit(): RecordEntity
|
protected function create_process_submit(): RecordEntity
|
||||||
{
|
{
|
||||||
$Record = new Record(
|
$zone_entity = $this->getZoneModel()->getEntityByPK($this->formDatas[$this->getModel()::PARENT]);
|
||||||
$this->getMySocket(),
|
$account_entity = $this->getAccountModel()->getEntityByPK($zone_entity->getParent());
|
||||||
$this->getModel(),
|
$Record = new Record($account_entity, $zone_entity);
|
||||||
$this->getAccountModel()->getEntityByPK($this->formDatas['account_uid'])
|
|
||||||
);
|
|
||||||
return $Record->create($this->formDatas);
|
return $Record->create($this->formDatas);
|
||||||
}
|
}
|
||||||
public function create(): RedirectResponse
|
public function create(): RedirectResponse
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Controllers\Cloudflare;
|
namespace App\Controllers\Cloudflare;
|
||||||
|
|
||||||
|
use App\Controllers\MVController;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use CodeIgniter\HTTP\ResponseInterface;
|
use CodeIgniter\HTTP\ResponseInterface;
|
||||||
use CodeIgniter\HTTP\RequestInterface;
|
use CodeIgniter\HTTP\RequestInterface;
|
||||||
@ -13,7 +14,7 @@ use App\Models\Cloudflare\AccountModel;
|
|||||||
use App\Libraries\MySocket\CloudflareSocket;
|
use App\Libraries\MySocket\CloudflareSocket;
|
||||||
use App\Libraries\MyCloudflare\Zone;
|
use App\Libraries\MyCloudflare\Zone;
|
||||||
use App\Entities\Cloudflare\ZoneEntity;
|
use App\Entities\Cloudflare\ZoneEntity;
|
||||||
use App\Controllers\MVController;
|
|
||||||
|
|
||||||
class ZoneController extends MVController
|
class ZoneController extends MVController
|
||||||
{
|
{
|
||||||
@ -27,13 +28,6 @@ class ZoneController extends MVController
|
|||||||
$this->class_name = 'Zone';
|
$this->class_name = 'Zone';
|
||||||
helper($this->class_name);
|
helper($this->class_name);
|
||||||
}
|
}
|
||||||
final protected function getMySocket(): CloudflareSocket
|
|
||||||
{
|
|
||||||
if ($this->_mySocket === null) {
|
|
||||||
$this->_mySocket = new CloudflareSocket();
|
|
||||||
}
|
|
||||||
return $this->_mySocket;
|
|
||||||
}
|
|
||||||
final protected function getModel(): ZoneModel
|
final protected function getModel(): ZoneModel
|
||||||
{
|
{
|
||||||
if ($this->_model === null) {
|
if ($this->_model === null) {
|
||||||
@ -61,11 +55,8 @@ class ZoneController extends MVController
|
|||||||
}
|
}
|
||||||
protected function create_process_submit(): ZoneEntity
|
protected function create_process_submit(): ZoneEntity
|
||||||
{
|
{
|
||||||
$zone = new Zone(
|
$account_entity = $this->getAccountModel()->getEntityByPK($this->formDatas[$this->getModel()::PARENT]);
|
||||||
$this->getMySocket(),
|
$zone = new Zone($account_entity);
|
||||||
$this->getModel(),
|
|
||||||
$this->getAccountModel()->getEntityByPK($this->formDatas['account_uid'])
|
|
||||||
);
|
|
||||||
return $zone->create($this->formDatas);
|
return $zone->create($this->formDatas);
|
||||||
}
|
}
|
||||||
public function create(): RedirectResponse
|
public function create(): RedirectResponse
|
||||||
|
|||||||
@ -2,15 +2,18 @@
|
|||||||
|
|
||||||
namespace App\Controllers\Mangboard;
|
namespace App\Controllers\Mangboard;
|
||||||
|
|
||||||
|
use App\Controllers\CommonController;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use CodeIgniter\HTTP\ResponseInterface;
|
use CodeIgniter\HTTP\ResponseInterface;
|
||||||
use CodeIgniter\HTTP\RequestInterface;
|
use CodeIgniter\HTTP\RequestInterface;
|
||||||
use App\Models\Mangboard\UserModel;
|
|
||||||
use App\Libraries\MyStorage\MangboardStorage;
|
|
||||||
use App\Libraries\MySocket\WebSocket;
|
|
||||||
use App\Libraries\MyCrawler\Yamap;
|
use App\Libraries\MyCrawler\Yamap;
|
||||||
|
use App\Libraries\MyCrawler\Yamoon;
|
||||||
|
use App\Libraries\MyCrawler\Sir;
|
||||||
|
use App\Libraries\MyCrawler\Inven;
|
||||||
|
use App\Models\Mangboard\UserModel;
|
||||||
use App\Entities\Mangboard\UserEntity;
|
use App\Entities\Mangboard\UserEntity;
|
||||||
use App\Controllers\CommonController;
|
|
||||||
|
|
||||||
class CrawlerController extends CommonController
|
class CrawlerController extends CommonController
|
||||||
{
|
{
|
||||||
@ -59,9 +62,7 @@ class CrawlerController extends CommonController
|
|||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$user_entity = $this->login_process($user_id);
|
$user_entity = $this->login_process($user_id);
|
||||||
$mySocket = new WebSocket(getenv("yamap.host.url"));
|
$myCrawler = new Yamap(getenv("yamap.host.url"), $board_name, $user_entity);
|
||||||
$myStorage = new MangboardStorage($board_name, $user_entity);
|
|
||||||
$myCrawler = new Yamap($mySocket, $myStorage);
|
|
||||||
//추가옵션
|
//추가옵션
|
||||||
$myCrawler->isDebug = in_array('debug', $params);
|
$myCrawler->isDebug = in_array('debug', $params);
|
||||||
$myCrawler->isCopy = in_array('copy', $params);
|
$myCrawler->isCopy = in_array('copy', $params);
|
||||||
@ -78,9 +79,7 @@ class CrawlerController extends CommonController
|
|||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$user_entity = $this->login_process($user_id);
|
$user_entity = $this->login_process($user_id);
|
||||||
$mySocket = new WebSocket(getenv("yamoon.host.url"));
|
$myCrawler = new Yamoon(getenv("yamoon.host.url"), $board_name, $user_entity);
|
||||||
$myStorage = new MangboardStorage($board_name, $user_entity);
|
|
||||||
$myCrawler = new Yamap($mySocket, $myStorage);
|
|
||||||
//추가옵션
|
//추가옵션
|
||||||
$myCrawler->isDebug = in_array('debug', $params);
|
$myCrawler->isDebug = in_array('debug', $params);
|
||||||
$myCrawler->isCopy = in_array('copy', $params);
|
$myCrawler->isCopy = in_array('copy', $params);
|
||||||
@ -97,9 +96,7 @@ class CrawlerController extends CommonController
|
|||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$user_entity = $this->login_process($user_id);
|
$user_entity = $this->login_process($user_id);
|
||||||
$mySocket = new WebSocket(getenv("sir.host.url"));
|
$myCrawler = new Sir(getenv("sir.host.url"), $board_name, $user_entity);
|
||||||
$myStorage = new MangboardStorage($board_name, $user_entity);
|
|
||||||
$myCrawler = new Yamap($mySocket, $myStorage);
|
|
||||||
//추가옵션
|
//추가옵션
|
||||||
$myCrawler->isDebug = in_array('debug', $params);
|
$myCrawler->isDebug = in_array('debug', $params);
|
||||||
$myCrawler->isCopy = in_array('copy', $params);
|
$myCrawler->isCopy = in_array('copy', $params);
|
||||||
@ -118,9 +115,7 @@ class CrawlerController extends CommonController
|
|||||||
// exit;
|
// exit;
|
||||||
try {
|
try {
|
||||||
$user_entity = $this->login_process($user_id);
|
$user_entity = $this->login_process($user_id);
|
||||||
$mySocket = new WebSocket(getenv("inven.host.url"));
|
$myCrawler = new Inven(getenv("inven.host.url"), $board_name, $user_entity);
|
||||||
$myStorage = new MangboardStorage($board_name, $user_entity);
|
|
||||||
$myCrawler = new Yamap($mySocket, $myStorage);
|
|
||||||
//추가옵션
|
//추가옵션
|
||||||
$myCrawler->isDebug = in_array('debug', $params);
|
$myCrawler->isDebug = in_array('debug', $params);
|
||||||
$myCrawler->isCopy = in_array('copy', $params);
|
$myCrawler->isCopy = in_array('copy', $params);
|
||||||
|
|||||||
@ -2,20 +2,22 @@
|
|||||||
|
|
||||||
namespace App\Libraries\MyCloudflare;
|
namespace App\Libraries\MyCloudflare;
|
||||||
|
|
||||||
|
use Cloudflare\API\Adapter\Guzzle;
|
||||||
use App\Models\Cloudflare\AccountModel;
|
use App\Models\Cloudflare\AccountModel;
|
||||||
use App\Libraries\MyCloudflare\MyCloudflare;
|
use App\Libraries\MyCloudflare\MyCloudflare;
|
||||||
use App\Entities\Cloudflare\AccountEntity;
|
use App\Entities\Cloudflare\AccountEntity;
|
||||||
|
|
||||||
class Account extends MyCloudflare
|
class Account extends MyCloudflare
|
||||||
{
|
{
|
||||||
public function __construct($mySocket, $myStorage)
|
private $_myStorage = null;
|
||||||
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct($mySocket, $myStorage);
|
parent::__construct();
|
||||||
}
|
}
|
||||||
final protected function getMyStorage(): AccountModel
|
final protected function getMyStorage(): AccountModel
|
||||||
{
|
{
|
||||||
if ($this->_myStorage === null) {
|
if ($this->_myStorage === null) {
|
||||||
throw new \Exception("MyStorage가 정의되지 않았습니다.");
|
$this->_myStorage = new AccountModel();
|
||||||
}
|
}
|
||||||
return $this->_myStorage;
|
return $this->_myStorage;
|
||||||
}
|
}
|
||||||
@ -33,19 +35,36 @@ class Account extends MyCloudflare
|
|||||||
// "legacy_flags":{"enterprise_zone_quota":{"maximum":0,"current":0,"available":0}},
|
// "legacy_flags":{"enterprise_zone_quota":{"maximum":0,"current":0,"available":0}},
|
||||||
// "created_on":"2017-06-26T05:44:49.470184Z"}
|
// "created_on":"2017-06-26T05:44:49.470184Z"}
|
||||||
// ]
|
// ]
|
||||||
|
protected function getArrayByResult($result): array
|
||||||
|
{
|
||||||
|
$formDatas[$this->getMyStorage()->getPKField()] = $result->id;
|
||||||
|
$formDatas[$this->getMyStorage()->getTitleField()] = $result->name;
|
||||||
|
$formDatas['type'] = $result->type;
|
||||||
|
$formDatas['status'] = 'use';
|
||||||
|
$formDatas['updated_at'] = $result->created_on;
|
||||||
|
$formDatas['created_at'] = $result->created_on;
|
||||||
|
return $formDatas;
|
||||||
|
}
|
||||||
public function create(array $formDatas): AccountEntity
|
public function create(array $formDatas): AccountEntity
|
||||||
{
|
{
|
||||||
//Socket용
|
//Socket용
|
||||||
$cf = $this->getMySocket()->getAccount($formDatas['apikey'])->addAccount($formDatas['id']);
|
$cf = $this->getMySocket()->request($formDatas['apikey'])
|
||||||
|
->post('accounts', [
|
||||||
|
'name' => $formDatas[$this->getMyStorage()->getTitleField()],
|
||||||
|
'type' => $formDatas['type'],
|
||||||
|
]);
|
||||||
|
$cf = json_decode($cf->getBody());
|
||||||
|
if (!$cf->success) {
|
||||||
|
throw new \Exception(__FUNCTION__ . "에서 실패:\n" . var_export($cf, true));
|
||||||
|
}
|
||||||
//Storage용
|
//Storage용
|
||||||
$formDatas[$this->getMyStorage()->PK()] = $cf->id;
|
$formDatas = $this->getArrayByResult($cf->result);
|
||||||
$formDatas[$this->getMyStorage()->getTitleField()] = $cf->name;
|
|
||||||
$formDatas['type'] = $cf->type;
|
|
||||||
$formDatas['status'] = 'use';
|
|
||||||
$formDatas['updated_at'] = $cf->created_on;
|
|
||||||
$formDatas['created_at'] = $cf->created_on;
|
|
||||||
$entity = $this->getMyStorage()->create($formDatas);
|
$entity = $this->getMyStorage()->create($formDatas);
|
||||||
log_message("notice", "Account::" . __FUNCTION__ . "=> 작업을 완료하였습니다.");
|
log_message("notice", "Account::" . __FUNCTION__ . "=> 작업을 완료하였습니다.");
|
||||||
return $entity;
|
return $entity;
|
||||||
}
|
}
|
||||||
|
protected function reload_entity($cf): AccountEntity
|
||||||
|
{
|
||||||
|
return $this->getMyStorage()->modify(new AccountEntity, $this->getArrayByResult($cf));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,26 +2,66 @@
|
|||||||
|
|
||||||
namespace App\Libraries\MyCloudflare;
|
namespace App\Libraries\MyCloudflare;
|
||||||
|
|
||||||
|
use Cloudflare\API\Adapter\Guzzle;
|
||||||
use App\Libraries\MySocket\CloudflareSocket;
|
use App\Libraries\MySocket\CloudflareSocket;
|
||||||
use App\Libraries\CommonLibrary;
|
use App\Libraries\CommonLibrary;
|
||||||
|
|
||||||
abstract class MyCloudflare extends CommonLibrary
|
abstract class MyCloudflare extends CommonLibrary
|
||||||
{
|
{
|
||||||
private $_mySocket = null;
|
private $_mySocket = null;
|
||||||
protected $_myStorage = null;
|
protected function __construct()
|
||||||
protected function __construct($mySocket, $myStorage)
|
|
||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
$this->_mySocket = $mySocket;
|
|
||||||
$this->_myStorage = $myStorage;
|
|
||||||
}
|
}
|
||||||
|
abstract protected function getArrayByResult($result): array;
|
||||||
|
abstract protected function reload_entity($cf): mixed;
|
||||||
abstract protected function getMyStorage(): mixed;
|
abstract protected function getMyStorage(): mixed;
|
||||||
//-----------------------필수항목-------------------//
|
|
||||||
final protected function getMySocket(): CloudflareSocket
|
final protected function getMySocket(): CloudflareSocket
|
||||||
{
|
{
|
||||||
if ($this->_mySocket === null) {
|
if ($this->_mySocket === null) {
|
||||||
throw new \Exception("MySocket이 정의되지 않았습니다.");
|
$this->_mySocket = new CloudflareSocket();
|
||||||
}
|
}
|
||||||
return $this->_mySocket;
|
return $this->_mySocket;
|
||||||
}
|
}
|
||||||
|
//-----------------------필수항목-------------------//
|
||||||
|
final protected function reload_entitys(string $parent, array $cfs): array
|
||||||
|
{
|
||||||
|
$entity_uids = [];
|
||||||
|
if (count($cfs)) {
|
||||||
|
$cnt = 1;
|
||||||
|
foreach ($cfs as $cf) {
|
||||||
|
$entity = $this->reload_entity($cf);
|
||||||
|
$entity_uids[] = $entity->getPK();
|
||||||
|
log_message("debug", "{$cnt}번째: {$entity->getTitle()} 저장");
|
||||||
|
$cnt++;
|
||||||
|
}
|
||||||
|
//부모키를 기준으로 CF에 존재하지 않는 데이터 삭제용
|
||||||
|
$this->getMyStorage()->where($this->getMyStorage()::PARENT, $parent);
|
||||||
|
$this->getMyStorage()->whereNotIn($this->getMyStorage()->getPKField(), $entity_uids);
|
||||||
|
$this->getMyStorage()->delete();
|
||||||
|
}
|
||||||
|
return $entity_uids;
|
||||||
|
}
|
||||||
|
final protected function reload_cfs(Guzzle $request, $uri): array
|
||||||
|
{
|
||||||
|
$page = 1; //Page는 1부터 시작해야함
|
||||||
|
$perpage_max = getenv("cfmgr.request.perpage.max");
|
||||||
|
$cfs = [];
|
||||||
|
do {
|
||||||
|
$query = [
|
||||||
|
'page' => $page,
|
||||||
|
'per_page' => $perpage_max,
|
||||||
|
'match' => 'all'
|
||||||
|
];
|
||||||
|
$cf = $request->get($uri, $query);
|
||||||
|
$cf = json_decode($cf->getBody());
|
||||||
|
if (!$cf->success) {
|
||||||
|
throw new \Exception(__FUNCTION__ . "에서 실패:\n" . var_export($cf, true));
|
||||||
|
}
|
||||||
|
$cfs = [$cfs, ...$cf->result];
|
||||||
|
//Loop 제한 : 한페이지에서 가져온 갯수가 perpage_max보다 적다는것은 더이상 다음페이지기 없으므로 0로 종료시키기 위함
|
||||||
|
$page = count($cf->result) < $perpage_max ? 0 : $page + 1;
|
||||||
|
} while (0 < $page);
|
||||||
|
return $cfs;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,127 +1,129 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Libraries\Cloudflare\API;
|
namespace App\Libraries\MyCloudflare;
|
||||||
|
|
||||||
use App\Libraries\Log\Log;
|
use Cloudflare\API\Adapter\Guzzle;
|
||||||
|
use App\Models\Cloudflare\API\RecordModel;
|
||||||
|
use App\Libraries\MyCloudflare\MyCloudflare;
|
||||||
|
use App\Entities\Cloudflare\ZoneEntity;
|
||||||
|
use App\Entities\Cloudflare\RecordEntity;
|
||||||
|
use App\Entities\Cloudflare\AccountEntity;
|
||||||
|
|
||||||
class Record extends API
|
class Record extends MyCloudflare
|
||||||
{
|
{
|
||||||
private $_endPoint = null;
|
private $_myStorage = null;
|
||||||
private $_entity = null;
|
private $_account_entity = null;
|
||||||
public function __construct(\App\Entities\Cloudflare\API\ZoneEntity $parent)
|
private $_zone_entity = null;
|
||||||
{
|
public function __construct(AccountEntity $account_entity, ZoneEntity $zone_entity)
|
||||||
parent::__construct($parent);
|
{
|
||||||
$this->_model = new \App\Models\Cloudflare\API\RecordModel();
|
parent::__construct();
|
||||||
}
|
$this->_account_entity = $account_entity;
|
||||||
final protected function setAdapter()
|
$this->_zone_entity = $zone_entity;
|
||||||
{
|
|
||||||
if (!is_null($this->_adapter)) {
|
|
||||||
throw new \Exception("Adapter가 이미 지정되었습니다.");
|
|
||||||
}
|
}
|
||||||
$accountModel = new \App\Models\Cloudflare\API\AccountModel();
|
final protected function getMyStorage(): RecordModel
|
||||||
$account = $accountModel->getEntity($this->getParent()->getParentFieldData());
|
{
|
||||||
$authModel = new \App\Models\Cloudflare\API\AuthModel();
|
if ($this->_myStorage === null) {
|
||||||
$auth = $authModel->getEntity($account->getParentFieldData());
|
$this->_myStorage = new RecordModel();
|
||||||
$apikey = new \Cloudflare\API\Auth\APIKey($auth->getAuthId(), $auth->getAuthKey());
|
}
|
||||||
$this->_adapter = new \Cloudflare\API\Adapter\Guzzle($apikey);
|
return $this->_myStorage;
|
||||||
// throw new \Exception(var_export($this->_adapter, true));
|
|
||||||
}
|
|
||||||
public function getClassName()
|
|
||||||
{
|
|
||||||
return 'Record';
|
|
||||||
}
|
|
||||||
protected function getEntityByResult(\stdClass $cfResult): \App\Entities\Cloudflare\API\RecordEntity
|
|
||||||
{
|
|
||||||
// throw new \Exception(var_export($cfResult, true));
|
|
||||||
$entity = is_null($this->_entity) ? new \App\Entities\Cloudflare\API\RecordEntity() : $this->_entity;
|
|
||||||
// throw new \Exception(var_export($cfResult, true));
|
|
||||||
$entity->uid = $cfResult->id;
|
|
||||||
$entity->zone_uid = $cfResult->zone_id;
|
|
||||||
$entity->host = $cfResult->name;
|
|
||||||
$entity->type = $cfResult->type;
|
|
||||||
$entity->content = $cfResult->content;
|
|
||||||
$entity->ttl = (int) $cfResult->ttl;
|
|
||||||
$entity->proxiable = $cfResult->proxiable ? "on" : "off";
|
|
||||||
$entity->proxied = $cfResult->proxied ? "on" : "off";
|
|
||||||
$entity->locked = "on";
|
|
||||||
if (isset($cfResult->locked) && $cfResult->locked) {
|
|
||||||
$entity->locked = "off";
|
|
||||||
}
|
}
|
||||||
// $entity->updated_at = $cfResult->modified_on;
|
protected function getRequest(): Guzzle
|
||||||
$entity->created_at = $cfResult->created_on;
|
{
|
||||||
// throw new \Exception(var_export($cfResult, true));
|
return $this->getMySocket()->request($this->_account_entity->getAPIKey());
|
||||||
return $entity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function insert(array $fieldDatas): \App\Entities\Cloudflare\API\RecordEntity
|
|
||||||
{
|
|
||||||
//TTL값은 CDN(proxied)가 사용함일때는 무조건 1, 않함일때는 120이 적용
|
|
||||||
$options = [
|
|
||||||
'name' => $fieldDatas['host'],
|
|
||||||
'type' => $fieldDatas['type'],
|
|
||||||
'content' => $fieldDatas['content'],
|
|
||||||
'proxied' => isset($fieldDatas['proxied']) && $fieldDatas['proxied'] === 'on' ? true : false
|
|
||||||
];
|
|
||||||
// throw new \Exception(var_export($options, true));
|
|
||||||
$cfResult = $this->getAdapter()->post('zones/' . $this->getParent()->getPrimaryKey() . '/dns_records', $options);
|
|
||||||
$cfResult = json_decode($cfResult->getBody());
|
|
||||||
if (!$cfResult->success) {
|
|
||||||
throw new \Exception(var_export($cfResult, true));
|
|
||||||
}
|
}
|
||||||
$entity = $this->getEntityByResult($cfResult->result);
|
protected function getArrayByResult($result): array
|
||||||
Log::add("warning", "Record API: {$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다.");
|
{
|
||||||
return $entity;
|
$formDatas[$this->getMyStorage()->getPKField()] = $result->id;
|
||||||
}
|
$formDatas[$this->getMyStorage()::PARENT] = $result->zone_id;
|
||||||
public function update(\App\Entities\Cloudflare\API\RecordEntity $entity, array $fieldDatas): \App\Entities\Cloudflare\API\RecordEntity
|
$formDatas[$this->getMyStorage()->getTitleField()] = $result->name;
|
||||||
{
|
$formDatas['type'] = $result->type;
|
||||||
//TTL값은 CDN(proxied)가 사용함일때는 무조건 1, 않함일때는 120이 적용
|
$formDatas['content'] = $result->content;
|
||||||
$options = [
|
$formDatas['ttl'] = (int) $result->ttl;
|
||||||
'type' => isset($fieldDatas['type']) ? $fieldDatas['type'] : $entity->type,
|
$formDatas['proxiable'] = $result->proxiable ? "on" : "off";
|
||||||
'name' => isset($fieldDatas['host']) ? $fieldDatas['host'] : $entity->host,
|
$formDatas['proxied'] = $result->proxied ? "on" : "off";
|
||||||
'content' => isset($fieldDatas['content']) ? $fieldDatas['content'] : $entity->content,
|
$formDatas['locked'] = "on";
|
||||||
'proxied' => $entity->proxied == 'on' ? true : false,
|
if (isset($result->locked) && $result->locked) {
|
||||||
'ttl' => intval($entity->ttl)
|
$formDatas['locked'] = "off";
|
||||||
];
|
}
|
||||||
//변경작업: 2024-08-09
|
// $formDatas['updated_at'] = $cfResult->modified_on;
|
||||||
if (isset($fieldDatas['proxied']) && $fieldDatas['proxied'] === 'on') {
|
$formDatas['created_at'] = $result->created_on;
|
||||||
$options['proxied'] = true;
|
return $formDatas;
|
||||||
$options['ttl'] = 1;
|
|
||||||
} elseif (isset($fieldDatas['proxied']) && $fieldDatas['proxied'] === 'off') {
|
|
||||||
$options['proxied'] = false;
|
|
||||||
$options['ttl'] = 120;
|
|
||||||
}
|
}
|
||||||
//dd($options);
|
public function create(array $formDatas): RecordEntity
|
||||||
// throw new \Exception(var_export($fieldDatas, true) . "<HR>" . var_export($options, true));
|
{
|
||||||
$cfResult = $this->getAdapter()->put('zones/' . $this->getParent()->getPrimaryKey() . '/dns_records/' . $entity->getPrimaryKey(), $options);
|
//Socket용
|
||||||
$cfResult = json_decode($cfResult->getBody());
|
//도메인생성을 위해 Cloudflare에 전송
|
||||||
if (!$cfResult->success) {
|
$cf = $this->getRequest()->post('zones/' . $this->_zone_entity->getPK() . '/dns_records', [
|
||||||
throw new \Exception(var_export($cfResult, true));
|
'name' => $formDatas['host'],
|
||||||
|
'type' => $formDatas['type'],
|
||||||
|
'content' => $formDatas['content'],
|
||||||
|
'proxied' => isset($formDatas['proxied']) && $formDatas['proxied'] === 'on' ? true : false
|
||||||
|
]);
|
||||||
|
$cf = json_decode($cf->getBody());
|
||||||
|
if (!$cf->success) {
|
||||||
|
throw new \Exception("Record:" . __FUNCTION__ . "에서 실패:\n" . var_export($cf, true));
|
||||||
|
}
|
||||||
|
//Storage용
|
||||||
|
$formDatas = $this->getArrayByResult($cf->result);
|
||||||
|
$entity = $this->$this->getMyStorage()->create($formDatas);
|
||||||
|
log_message("notice", "Record:" . __FUNCTION__ . "=> 작업을 완료하였습니다.");
|
||||||
|
return $entity;
|
||||||
}
|
}
|
||||||
Log::add("warning", "Record API: {$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다.");
|
public function update(RecordEntity $entity, array $formDatas): RecordEntity
|
||||||
return $this->getEntityByResult($cfResult->result);
|
{
|
||||||
}
|
//TTL값은 CDN(proxied)가 사용함일때는 무조건 1, 않함일때는 120이 적용
|
||||||
public function delete(\App\Entities\Cloudflare\API\RecordEntity $entity)
|
$datas = [
|
||||||
{
|
'type' => isset($formDatas['type']) ? $formDatas['type'] : $entity->type,
|
||||||
$cfResult = $this->getAdapter()->delete('zones/' . $this->getParent()->getPrimaryKey() . '/dns_records/' . $entity->getPrimaryKey());
|
'name' => isset($formDatas['host']) ? $formDatas['host'] : $entity->host,
|
||||||
$cfResult = json_decode($cfResult->getBody());
|
'content' => isset($formDatas['content']) ? $formDatas['content'] : $entity->content,
|
||||||
if (!$cfResult->success) {
|
'proxied' => $entity->proxied == 'on' ? true : false,
|
||||||
throw new \Exception(var_export($cfResult, true));
|
'ttl' => intval($entity->ttl)
|
||||||
|
];
|
||||||
|
//변경작업: 2024-08-09
|
||||||
|
if (isset($formDatas['proxied']) && $formDatas['proxied'] === 'on') {
|
||||||
|
$datas['proxied'] = true;
|
||||||
|
$datas['ttl'] = 1;
|
||||||
|
} elseif (isset($formDatas['proxied']) && $formDatas['proxied'] === 'off') {
|
||||||
|
$datas['proxied'] = false;
|
||||||
|
$datas['ttl'] = 120;
|
||||||
|
}
|
||||||
|
$cf = $this->getRequest()->put('zones/' . $this->_zone_entity->getPK() . '/dns_records', $datas);
|
||||||
|
$cf = json_decode($cf->getBody());
|
||||||
|
if (!$cf->success) {
|
||||||
|
throw new \Exception("Record:" . __FUNCTION__ . "에서 실패:\n" . var_export($cf, true));
|
||||||
|
}
|
||||||
|
log_message("notice", "Record:" . __FUNCTION__ . "=> 작업을 완료하였습니다.");
|
||||||
|
return $entity;
|
||||||
}
|
}
|
||||||
Log::add("warning", "Record API: {$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다.");
|
public function delete(RecordEntity $entity): void
|
||||||
}
|
{
|
||||||
public function sync(\App\Entities\Cloudflare\API\RecordEntity $entity): \App\Entities\Cloudflare\API\RecordEntity
|
$cf = $this->getRequest()->delete('zones/' . $this->_zone_entity->getPK() . '/dns_records/' . $entity->getPK());
|
||||||
{
|
$cf = json_decode($cf->getBody());
|
||||||
$cfResult = $this->getAdapter()->get('zones/' . $this->getParent()->getPrimaryKey() . '/dns_records/' . $entity->getPrimaryKey());
|
if (!$cf->success) {
|
||||||
$cfResult = json_decode($cfResult->getBody());
|
throw new \Exception("Record:" . __FUNCTION__ . "에서 실패:\n" . var_export($cf, true));
|
||||||
if (!$cfResult->success) {
|
}
|
||||||
throw new \Exception(var_export($cfResult, true));
|
log_message("notice", "Record:" . __FUNCTION__ . "=> 작업을 완료하였습니다.");
|
||||||
|
}
|
||||||
|
public function sync(RecordEntity $entity): RecordEntity
|
||||||
|
{
|
||||||
|
$cf = $this->getRequest()->get('zones/' . $this->_zone_entity->getPK() . '/dns_records/' . $entity->getPK());
|
||||||
|
$cf = json_decode($cf->getBody());
|
||||||
|
if (!$cf->success) {
|
||||||
|
throw new \Exception(__FUNCTION__ . "에서 실패:\n" . var_export($cf, true));
|
||||||
|
}
|
||||||
|
log_message("notice", "Record:" . __FUNCTION__ . "=> 작업을 완료하였습니다.");
|
||||||
|
$formDatas = $this->getArrayByResult($cf->result);
|
||||||
|
return $this->$this->getMyStorage()->create($formDatas);
|
||||||
|
}
|
||||||
|
protected function reload_entity($cf): RecordEntity
|
||||||
|
{
|
||||||
|
return $this->getMyStorage()->modify(new RecordEntity, $this->getArrayByResult($cf));
|
||||||
|
}
|
||||||
|
public function reload(): void
|
||||||
|
{
|
||||||
|
$cfs = $this->reload_cfs($this->getRequest(), 'zones/' . $this->_zone_entity->getPK() . '/dns_records');
|
||||||
|
log_message("notice", "-----{$this->_zone_entity->getTitle()} 처리[" . count($cfs) . "개] 시작-----");
|
||||||
|
$entitys = $this->reload_entitys($this->_zone_entity->getPK(), $cfs);
|
||||||
|
log_message("notice", "-----{$this->_zone_entity->getTitle()} DB 처리[" . count($entitys) . "개] 완료-----");
|
||||||
}
|
}
|
||||||
Log::add("warning", "Record API: {$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다.");
|
|
||||||
return $this->getEntityByResult($cfResult->result);
|
|
||||||
}
|
|
||||||
protected function getCFResults_List(int $page): array
|
|
||||||
{
|
|
||||||
$this->_endPoint = is_null($this->_endPoint) ? new \Cloudflare\API\Endpoints\DNS($this->getAdapter()) : $this->_endPoint;
|
|
||||||
return $this->_endPoint->listRecords($this->getParent()->getPrimaryKey(), '', '', '', $page, CF_ADAPTER_PERPAGE_MAX)->result;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
127
app/Libraries/MyCloudflare/Record_old.php
Normal file
127
app/Libraries/MyCloudflare/Record_old.php
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Libraries\Cloudflare\API;
|
||||||
|
|
||||||
|
use App\Libraries\Log\Log;
|
||||||
|
|
||||||
|
class Record extends API
|
||||||
|
{
|
||||||
|
private $_endPoint = null;
|
||||||
|
private $_entity = null;
|
||||||
|
public function __construct(\App\Entities\Cloudflare\API\ZoneEntity $parent)
|
||||||
|
{
|
||||||
|
parent::__construct($parent);
|
||||||
|
$this->_model = new \App\Models\Cloudflare\API\RecordModel();
|
||||||
|
}
|
||||||
|
final protected function setAdapter()
|
||||||
|
{
|
||||||
|
if (!is_null($this->_adapter)) {
|
||||||
|
throw new \Exception("Adapter가 이미 지정되었습니다.");
|
||||||
|
}
|
||||||
|
$accountModel = new \App\Models\Cloudflare\API\AccountModel();
|
||||||
|
$account = $accountModel->getEntity($this->getParent()->getParentFieldData());
|
||||||
|
$authModel = new \App\Models\Cloudflare\API\AuthModel();
|
||||||
|
$auth = $authModel->getEntity($account->getParentFieldData());
|
||||||
|
$apikey = new \Cloudflare\API\Auth\APIKey($auth->getAuthId(), $auth->getAuthKey());
|
||||||
|
$this->_adapter = new \Cloudflare\API\Adapter\Guzzle($apikey);
|
||||||
|
// throw new \Exception(var_export($this->_adapter, true));
|
||||||
|
}
|
||||||
|
public function getClassName()
|
||||||
|
{
|
||||||
|
return 'Record';
|
||||||
|
}
|
||||||
|
protected function getEntityByResult(\stdClass $cfResult): \App\Entities\Cloudflare\API\RecordEntity
|
||||||
|
{
|
||||||
|
// throw new \Exception(var_export($cfResult, true));
|
||||||
|
$entity = is_null($this->_entity) ? new \App\Entities\Cloudflare\API\RecordEntity() : $this->_entity;
|
||||||
|
// throw new \Exception(var_export($cfResult, true));
|
||||||
|
$entity->uid = $cfResult->id;
|
||||||
|
$entity->zone_uid = $cfResult->zone_id;
|
||||||
|
$entity->host = $cfResult->name;
|
||||||
|
$entity->type = $cfResult->type;
|
||||||
|
$entity->content = $cfResult->content;
|
||||||
|
$entity->ttl = (int) $cfResult->ttl;
|
||||||
|
$entity->proxiable = $cfResult->proxiable ? "on" : "off";
|
||||||
|
$entity->proxied = $cfResult->proxied ? "on" : "off";
|
||||||
|
$entity->locked = "on";
|
||||||
|
if (isset($cfResult->locked) && $cfResult->locked) {
|
||||||
|
$entity->locked = "off";
|
||||||
|
}
|
||||||
|
// $entity->updated_at = $cfResult->modified_on;
|
||||||
|
$entity->created_at = $cfResult->created_on;
|
||||||
|
// throw new \Exception(var_export($cfResult, true));
|
||||||
|
return $entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function insert(array $fieldDatas): \App\Entities\Cloudflare\API\RecordEntity
|
||||||
|
{
|
||||||
|
//TTL값은 CDN(proxied)가 사용함일때는 무조건 1, 않함일때는 120이 적용
|
||||||
|
$options = [
|
||||||
|
'name' => $fieldDatas['host'],
|
||||||
|
'type' => $fieldDatas['type'],
|
||||||
|
'content' => $fieldDatas['content'],
|
||||||
|
'proxied' => isset($fieldDatas['proxied']) && $fieldDatas['proxied'] === 'on' ? true : false
|
||||||
|
];
|
||||||
|
// throw new \Exception(var_export($options, true));
|
||||||
|
$cfResult = $this->getAdapter()->post('zones/' . $this->getParent()->getPrimaryKey() . '/dns_records', $options);
|
||||||
|
$cfResult = json_decode($cfResult->getBody());
|
||||||
|
if (!$cfResult->success) {
|
||||||
|
throw new \Exception(var_export($cfResult, true));
|
||||||
|
}
|
||||||
|
$entity = $this->getEntityByResult($cfResult->result);
|
||||||
|
Log::add("warning", "Record API: {$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다.");
|
||||||
|
return $entity;
|
||||||
|
}
|
||||||
|
public function update(\App\Entities\Cloudflare\API\RecordEntity $entity, array $fieldDatas): \App\Entities\Cloudflare\API\RecordEntity
|
||||||
|
{
|
||||||
|
//TTL값은 CDN(proxied)가 사용함일때는 무조건 1, 않함일때는 120이 적용
|
||||||
|
$options = [
|
||||||
|
'type' => isset($fieldDatas['type']) ? $fieldDatas['type'] : $entity->type,
|
||||||
|
'name' => isset($fieldDatas['host']) ? $fieldDatas['host'] : $entity->host,
|
||||||
|
'content' => isset($fieldDatas['content']) ? $fieldDatas['content'] : $entity->content,
|
||||||
|
'proxied' => $entity->proxied == 'on' ? true : false,
|
||||||
|
'ttl' => intval($entity->ttl)
|
||||||
|
];
|
||||||
|
//변경작업: 2024-08-09
|
||||||
|
if (isset($fieldDatas['proxied']) && $fieldDatas['proxied'] === 'on') {
|
||||||
|
$options['proxied'] = true;
|
||||||
|
$options['ttl'] = 1;
|
||||||
|
} elseif (isset($fieldDatas['proxied']) && $fieldDatas['proxied'] === 'off') {
|
||||||
|
$options['proxied'] = false;
|
||||||
|
$options['ttl'] = 120;
|
||||||
|
}
|
||||||
|
//dd($options);
|
||||||
|
// throw new \Exception(var_export($fieldDatas, true) . "<HR>" . var_export($options, true));
|
||||||
|
$cfResult = $this->getAdapter()->put('zones/' . $this->getParent()->getPrimaryKey() . '/dns_records/' . $entity->getPrimaryKey(), $options);
|
||||||
|
$cfResult = json_decode($cfResult->getBody());
|
||||||
|
if (!$cfResult->success) {
|
||||||
|
throw new \Exception(var_export($cfResult, true));
|
||||||
|
}
|
||||||
|
Log::add("warning", "Record API: {$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다.");
|
||||||
|
return $this->getEntityByResult($cfResult->result);
|
||||||
|
}
|
||||||
|
public function delete(\App\Entities\Cloudflare\API\RecordEntity $entity)
|
||||||
|
{
|
||||||
|
$cfResult = $this->getAdapter()->delete('zones/' . $this->getParent()->getPrimaryKey() . '/dns_records/' . $entity->getPrimaryKey());
|
||||||
|
$cfResult = json_decode($cfResult->getBody());
|
||||||
|
if (!$cfResult->success) {
|
||||||
|
throw new \Exception(var_export($cfResult, true));
|
||||||
|
}
|
||||||
|
Log::add("warning", "Record API: {$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다.");
|
||||||
|
}
|
||||||
|
public function sync(\App\Entities\Cloudflare\API\RecordEntity $entity): \App\Entities\Cloudflare\API\RecordEntity
|
||||||
|
{
|
||||||
|
$cfResult = $this->getAdapter()->get('zones/' . $this->getParent()->getPrimaryKey() . '/dns_records/' . $entity->getPrimaryKey());
|
||||||
|
$cfResult = json_decode($cfResult->getBody());
|
||||||
|
if (!$cfResult->success) {
|
||||||
|
throw new \Exception(var_export($cfResult, true));
|
||||||
|
}
|
||||||
|
Log::add("warning", "Record API: {$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다.");
|
||||||
|
return $this->getEntityByResult($cfResult->result);
|
||||||
|
}
|
||||||
|
protected function getCFResults_List(int $page): array
|
||||||
|
{
|
||||||
|
$this->_endPoint = is_null($this->_endPoint) ? new \Cloudflare\API\Endpoints\DNS($this->getAdapter()) : $this->_endPoint;
|
||||||
|
return $this->_endPoint->listRecords($this->getParent()->getPrimaryKey(), '', '', '', $page, CF_ADAPTER_PERPAGE_MAX)->result;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3,63 +3,67 @@
|
|||||||
namespace App\Libraries\MyCloudflare;
|
namespace App\Libraries\MyCloudflare;
|
||||||
|
|
||||||
use App\Models\Cloudflare\ZoneModel;
|
use App\Models\Cloudflare\ZoneModel;
|
||||||
use App\Models\Cloudflare\AccountModel;
|
|
||||||
use App\Libraries\MyCloudflare\MyCloudflare;
|
use App\Libraries\MyCloudflare\MyCloudflare;
|
||||||
use App\Entities\Cloudflare\ZoneEntity;
|
use App\Entities\Cloudflare\ZoneEntity;
|
||||||
use App\Entities\Cloudflare\AccountEntity;
|
use App\Entities\Cloudflare\AccountEntity;
|
||||||
|
|
||||||
|
use Cloudflare\API\Adapter\Guzzle;
|
||||||
|
|
||||||
class Zone extends MyCloudflare
|
class Zone extends MyCloudflare
|
||||||
{
|
{
|
||||||
|
private $_myStorage = null;
|
||||||
private $_account_entity = null;
|
private $_account_entity = null;
|
||||||
public function __construct($mySocket, $myStorage, AccountEntity $account_entity)
|
public function __construct(AccountEntity $account_entity)
|
||||||
{
|
{
|
||||||
parent::__construct($mySocket, $myStorage);
|
parent::__construct();
|
||||||
$this->_account_entity = $account_entity;
|
$this->_account_entity = $account_entity;
|
||||||
}
|
}
|
||||||
final protected function getMyStorage(): ZoneModel
|
final protected function getMyStorage(): ZoneModel
|
||||||
{
|
{
|
||||||
if ($this->_myStorage === null) {
|
if ($this->_myStorage === null) {
|
||||||
throw new \Exception("MyStorage가 정의되지 않았습니다.");
|
$this->_myStorage = new ZoneModel();
|
||||||
}
|
}
|
||||||
return $this->_myStorage;
|
return $this->_myStorage;
|
||||||
}
|
}
|
||||||
private function getArrayByResult($cf): array
|
protected function getRequest(): Guzzle
|
||||||
{
|
{
|
||||||
$formDatas['uid'] = $cf->id;
|
return $this->getMySocket()->request($this->_account_entity->getAPIKey());
|
||||||
$formDatas['account_uid'] = $cf->account->id;
|
}
|
||||||
$formDatas['domain'] = $cf->name;
|
protected function getArrayByResult($result): array
|
||||||
$formDatas['status'] = $cf->status;
|
{
|
||||||
//$formDatas['type'] = $cf->type; // full 이게있는데 뭔지 잘모름
|
$formDatas[$this->getMyStorage()->getPKField()] = $result->id;
|
||||||
|
$formDatas[$this->getMyStorage()::PARENT] = $result->account->id;
|
||||||
|
$formDatas[$this->getMyStorage()->getTitleField()] = $result->name;
|
||||||
|
$formDatas['status'] = $result->status;
|
||||||
|
//$formDatas['type'] = $result->type; // full 이게있는데 뭔지 잘모름
|
||||||
$formDatas['name_servers'] = 'none';
|
$formDatas['name_servers'] = 'none';
|
||||||
if (isset($cf->name_servers)) {
|
if (isset($result->name_servers)) {
|
||||||
$formDatas['name_servers'] = is_array($cf->name_servers) ?
|
$formDatas['name_servers'] = is_array($result->name_servers) ?
|
||||||
implode(
|
implode(
|
||||||
',',
|
',',
|
||||||
$cf->name_servers
|
$result->name_servers
|
||||||
) : $cf->name_servers;
|
) : $result->name_servers;
|
||||||
}
|
}
|
||||||
$formDatas['original_name_servers'] = 'none';
|
$formDatas['original_name_servers'] = 'none';
|
||||||
if (isset($cf->original_name_servers)) {
|
if (isset($result->original_name_servers)) {
|
||||||
$formDatas['original_name_servers'] = is_array($cf->original_name_servers) ?
|
$formDatas['original_name_servers'] = is_array($result->original_name_servers) ?
|
||||||
implode(
|
implode(
|
||||||
',',
|
',',
|
||||||
$cf->original_name_servers
|
$result->original_name_servers
|
||||||
) : $cf->original_name_servers;
|
) : $result->original_name_servers;
|
||||||
}
|
}
|
||||||
$formDatas['updated_at'] = $cf->modified_on;
|
$formDatas['updated_at'] = $result->modified_on;
|
||||||
$formDatas['created_at'] = $cf->created_on;
|
$formDatas['created_at'] = $result->created_on;
|
||||||
$formDatas['plan'] = $cf->plan->name;
|
$formDatas['plan'] = $result->plan->name;
|
||||||
return $formDatas;
|
return $formDatas;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Cfzone에서 가져온 값을 zone에 setting
|
//Cfzone에서 가져온 값을 zone에 setting
|
||||||
final public function getCFSetting(ZoneEntity $entity): ZoneEntity
|
final public function getCFSetting(ZoneEntity $entity): ZoneEntity
|
||||||
{
|
{
|
||||||
$cf = $this->getMySocket()->getAdapter($this->_account_entity->getAPIKey())
|
$cf = $this->getRequest()->patch('zones/' . $entity->getPK() . '/settings/');
|
||||||
->patch('zones/' . $entity->getPK() . '/settings/');
|
|
||||||
$cf = json_decode($cf->getBody());
|
$cf = json_decode($cf->getBody());
|
||||||
if (!$cf->success) {
|
if (!$cf->success) {
|
||||||
throw new \Exception(__FUNCTION__ . "에서 실패:\n" . var_export($cf, true));
|
throw new \Exception("Zone:" . __FUNCTION__ . "에서 실패:\n" . var_export($cf, true));
|
||||||
}
|
}
|
||||||
foreach ($cf->result as $cf) {
|
foreach ($cf->result as $cf) {
|
||||||
switch ($cf->id) {
|
switch ($cf->id) {
|
||||||
@ -78,36 +82,28 @@ class Zone extends MyCloudflare
|
|||||||
}
|
}
|
||||||
final public function setCFSetting(ZoneEntity $entity, string $field, string $value): ZoneEntity
|
final public function setCFSetting(ZoneEntity $entity, string $field, string $value): ZoneEntity
|
||||||
{
|
{
|
||||||
$cf = $this->getMySocket()->getAdapter($this->_account_entity->getAPIKEY())
|
$cf = $this->getRequest()->patch('zones/' . $entity->getPK() . '/settings/' . $field, array('value' => $value));
|
||||||
->patch('zones/' . $entity->getPK() . '/settings/' . $field, array('value' => $value));
|
|
||||||
$cf = json_decode($cf->getBody());
|
$cf = json_decode($cf->getBody());
|
||||||
if (!$cf->success || $cf->result->id !== $field) {
|
if (!$cf->success || $cf->result->id !== $field) {
|
||||||
throw new \Exception(__FUNCTION__ . "에서 {$field}->{$value} 변경실패:\n" . var_export($cf, true));
|
throw new \Exception("Zone:" . __FUNCTION__ . "에서 {$field}->{$value} 변경실패:\n" . var_export($cf, true));
|
||||||
}
|
}
|
||||||
//최종 결과값은 body->result->id='필드명',body->result->value='on/off'이런식으로 받음
|
//최종 결과값은 body->result->id='필드명',body->result->value='on/off'이런식으로 받음
|
||||||
$entity->$field = $cf->result->value;
|
$entity->$field = $cf->result->value;
|
||||||
return $entity;
|
return $entity;
|
||||||
}
|
}
|
||||||
//Result 형태
|
|
||||||
|
|
||||||
public function create(array $formDatas, $jump_start = false): ZoneEntity
|
public function create(array $formDatas, $jump_start = false): ZoneEntity
|
||||||
{
|
{
|
||||||
//Socket용
|
//Socket용
|
||||||
// $cf = $this->getMySocket()->getZone($this->_account_entity->getAPIKEY())
|
|
||||||
// ->addZone($formDatas[ZoneModel::TITLE], $jump_start, $this->_account_entity->getPK());
|
|
||||||
//도메인생성을 위해 Cloudflare에 전송
|
//도메인생성을 위해 Cloudflare에 전송
|
||||||
$options = [
|
$cf = $this->getRequest()->post('zones/', [
|
||||||
'accountId' => $this->_account_entity->getPK(),
|
'accountId' => $this->_account_entity->getPK(),
|
||||||
'name' => $formDatas['domain'],
|
'name' => $formDatas['domain'],
|
||||||
'jump_start' => $jump_start,
|
'jump_start' => $jump_start,
|
||||||
];
|
]);
|
||||||
$cf = $this->getMySocket()->getAdapter($this->_account_entity->getAPIKey())
|
|
||||||
->post('zones/', $options);
|
|
||||||
$cf = json_decode($cf->getBody());
|
$cf = json_decode($cf->getBody());
|
||||||
if (!$cf->success) {
|
if (!$cf->success) {
|
||||||
throw new \Exception(__FUNCTION__ . "에서 실패:\n" . var_export($cf, true));
|
throw new \Exception("Zone:" . __FUNCTION__ . "에서 실패:\n" . var_export($cf, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Storage용
|
//Storage용
|
||||||
$formDatas = $this->getArrayByResult($cf->result);
|
$formDatas = $this->getArrayByResult($cf->result);
|
||||||
$entity = $this->$this->getMyStorage()->create($formDatas);
|
$entity = $this->$this->getMyStorage()->create($formDatas);
|
||||||
@ -115,44 +111,47 @@ class Zone extends MyCloudflare
|
|||||||
$entity = $this->setCFSetting($entity, 'ipv6', 'off');
|
$entity = $this->setCFSetting($entity, 'ipv6', 'off');
|
||||||
$entity = $this->setCFSetting($entity, 'development_mode', 'off');
|
$entity = $this->setCFSetting($entity, 'development_mode', 'off');
|
||||||
$entity = $this->setCFSetting($entity, 'security_level', 'medium');
|
$entity = $this->setCFSetting($entity, 'security_level', 'medium');
|
||||||
log_message("notice", "Zone::" . __FUNCTION__ . "=> 작업을 완료하였습니다.");
|
log_message("notice", "Zone:" . __FUNCTION__ . "=> 작업을 완료하였습니다.");
|
||||||
return $entity;
|
return $entity;
|
||||||
}
|
}
|
||||||
public function update(ZoneEntity $entity, array $fieldDatas): ZoneEntity
|
public function update(ZoneEntity $entity, array $formDatas): ZoneEntity
|
||||||
{
|
{
|
||||||
//ipv6 , //development_mode , //security_level
|
//ipv6 , //development_mode , //security_level
|
||||||
foreach ($fieldDatas as $field => $value) {
|
foreach ($formDatas as $field => $value) {
|
||||||
$entity = $this->setCFSetting($entity, $field, $value);
|
$entity = $this->setCFSetting($entity, $field, $value);
|
||||||
}
|
}
|
||||||
log_message("notice", "Zone::" . __FUNCTION__ . "=> 작업을 완료하였습니다.");
|
log_message("notice", "Zone:" . __FUNCTION__ . "=> 작업을 완료하였습니다.");
|
||||||
return $entity;
|
return $entity;
|
||||||
}
|
}
|
||||||
public function delete(ZoneEntity $entity): void
|
public function delete(ZoneEntity $entity): void
|
||||||
{
|
{
|
||||||
$cf = $this->getMySocket()->getAdapter($this->_account_entity->getAPIKey())
|
$cf = $this->getRequest()->delete('zones/' . $entity->getPK());
|
||||||
->delete('zones/' . $entity->getPK());
|
|
||||||
$cf = json_decode($cf->getBody());
|
$cf = json_decode($cf->getBody());
|
||||||
if (!$cf->success) {
|
if (!$cf->success) {
|
||||||
throw new \Exception(__FUNCTION__ . "에서 실패:\n" . var_export($cf, true));
|
throw new \Exception("Zone:" . __FUNCTION__ . "에서 실패:\n" . var_export($cf, true));
|
||||||
}
|
}
|
||||||
log_message("notice", "Zone::" . __FUNCTION__ . "=> 작업을 완료하였습니다.");
|
log_message("notice", "Zone:" . __FUNCTION__ . "=> 작업을 완료하였습니다.");
|
||||||
}
|
}
|
||||||
public function sync(ZoneEntity $entity): ZoneEntity
|
public function sync(ZoneEntity $entity): ZoneEntity
|
||||||
{
|
{
|
||||||
$cf = $this->getMySocket()->getAdapter($this->_account_entity->getAPIKey())
|
$cf = $this->getRequest()->get('zones/' . $entity->getPK());
|
||||||
->get('zones/' . $entity->getPK());
|
|
||||||
$cf = json_decode($cf->getBody());
|
$cf = json_decode($cf->getBody());
|
||||||
if (!$cf->success) {
|
if (!$cf->success) {
|
||||||
throw new \Exception(__FUNCTION__ . "에서 실패:\n" . var_export($cf, true));
|
throw new \Exception("Zone:" . __FUNCTION__ . "에서 실패:\n" . var_export($cf, true));
|
||||||
}
|
}
|
||||||
log_message("notice", "Zone::" . __FUNCTION__ . "=> 작업을 완료하였습니다.");
|
log_message("notice", "Zone:" . __FUNCTION__ . "=> 작업을 완료하였습니다.");
|
||||||
$formDatas = $this->getArrayByResult($cf->result);
|
$formDatas = $this->getArrayByResult($cf->result);
|
||||||
return $this->$this->getMyStorage()->create($formDatas);
|
return $this->$this->getMyStorage()->create($formDatas);
|
||||||
}
|
}
|
||||||
// protected function getCFResults_List(int $page): array
|
protected function reload_entity($cf): ZoneEntity
|
||||||
// {
|
{
|
||||||
// $this->_endPoint = is_null($this->_endPoint) ? new \Cloudflare\API\Endpoints\Zones($this->getAdapter()) : $this->_endPoint;
|
return $this->getMyStorage()->modify(new ZoneEntity, $this->getArrayByResult($cf));
|
||||||
// return $this->_endPoint->listZones('', '', $page, CF_ADAPTER_PERPAGE_MAX)->result;
|
}
|
||||||
// }
|
public function reload(): void
|
||||||
public function reload() {}
|
{
|
||||||
|
$cfs = $this->reload_cfs($this->getRequest(), 'zones');
|
||||||
|
log_message("notice", "-----{$this->_account_entity->getTitle()} 처리[" . count($cfs) . "개] 시작-----");
|
||||||
|
$entitys = $this->reload_entitys($this->_account_entity->getPK(), $cfs);
|
||||||
|
log_message("notice", "-----{$this->_account_entity->getTitle()} DB 처리[" . count($entitys) . "개] 완료-----");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,12 +3,13 @@
|
|||||||
namespace App\Libraries\MyCrawler;
|
namespace App\Libraries\MyCrawler;
|
||||||
|
|
||||||
use Symfony\Component\DomCrawler\Crawler;
|
use Symfony\Component\DomCrawler\Crawler;
|
||||||
|
use App\Entities\Mangboard\UserEntity;
|
||||||
|
|
||||||
class Inven extends MyCrawler
|
class Inven extends MyCrawler
|
||||||
{
|
{
|
||||||
public function __construct($mySocket, $myStorage)
|
public function __construct(string $host, string $board_name, UserEntity $user_entity)
|
||||||
{
|
{
|
||||||
parent::__construct($mySocket, $myStorage);
|
parent::__construct($host, $board_name, $user_entity);
|
||||||
}
|
}
|
||||||
protected function getUrlByMediaType(Crawler $node, string $media_type, string $attr): null|string
|
protected function getUrlByMediaType(Crawler $node, string $media_type, string $attr): null|string
|
||||||
{
|
{
|
||||||
|
|||||||
@ -2,45 +2,48 @@
|
|||||||
|
|
||||||
namespace App\Libraries\MyCrawler;
|
namespace App\Libraries\MyCrawler;
|
||||||
|
|
||||||
use App\Entities\Mangboard\BoardEntity;
|
|
||||||
use App\Entities\Mangboard\BoardsEntity;
|
|
||||||
use App\Libraries\CommonLibrary;
|
|
||||||
use App\Libraries\MySocket\WebSocket;
|
|
||||||
use App\Libraries\MyStorage\MangboardStorage;
|
|
||||||
use App\Models\Mangboard\BoardModel;
|
|
||||||
use App\Models\Mangboard\BoardsModel;
|
|
||||||
use App\Traits\FileTrait;
|
|
||||||
use Symfony\Component\DomCrawler\Crawler;
|
use Symfony\Component\DomCrawler\Crawler;
|
||||||
|
use App\Traits\FileTrait;
|
||||||
|
use App\Models\Mangboard\BoardsModel;
|
||||||
|
use App\Models\Mangboard\BoardModel;
|
||||||
|
use App\Libraries\MyStorage\MangboardStorage;
|
||||||
|
use App\Libraries\MySocket\WebSocket;
|
||||||
|
use App\Libraries\CommonLibrary;
|
||||||
|
use App\Entities\Mangboard\UserEntity;
|
||||||
|
use App\Entities\Mangboard\BoardsEntity;
|
||||||
|
use App\Entities\Mangboard\BoardEntity;
|
||||||
|
|
||||||
abstract class MyCrawler extends CommonLibrary
|
abstract class MyCrawler extends CommonLibrary
|
||||||
{
|
{
|
||||||
use FileTrait;
|
use FileTrait;
|
||||||
|
private $_host = "";
|
||||||
|
private $_board_name = "";
|
||||||
|
private $_user_entity = null;
|
||||||
private $_mySocket = null;
|
private $_mySocket = null;
|
||||||
private $_myStorage = null;
|
private $_myStorage = null;
|
||||||
private $_board_model = null;
|
private $_board_model = null;
|
||||||
private $_user_model = null;
|
private $_user_model = null;
|
||||||
private $_user_entity = null;
|
|
||||||
private $_boards_entity = null;
|
private $_boards_entity = null;
|
||||||
private $_board_name = "";
|
protected function __construct(string $host, string $board_name, UserEntity $user_entity)
|
||||||
protected function __construct($mySocket, $myStorage)
|
|
||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
$this->_mySocket = $mySocket;
|
$this->_host = $host;
|
||||||
$this->_myStorage = $myStorage;
|
$this->_board_name = $board_name;
|
||||||
|
$this->_user_entity = $user_entity;
|
||||||
}
|
}
|
||||||
abstract protected function getDetailSelector(array $listInfo): array;
|
abstract protected function getDetailSelector(array $listInfo): array;
|
||||||
//-----------------------필수항목-------------------//
|
//-----------------------필수항목-------------------//
|
||||||
final protected function getMySocket(): WebSocket
|
final protected function getMySocket(): WebSocket
|
||||||
{
|
{
|
||||||
if ($this->_mySocket === null) {
|
if ($this->_mySocket === null) {
|
||||||
throw new \Exception("MySocket이 정의되지 않았습니다.");
|
$this->_mySocket = new WebSocket($this->_host);
|
||||||
}
|
}
|
||||||
return $this->_mySocket;
|
return $this->_mySocket;
|
||||||
}
|
}
|
||||||
final protected function getMyStorage(): MangboardStorage
|
final protected function getMyStorage(): MangboardStorage
|
||||||
{
|
{
|
||||||
if ($this->_myStorage === null) {
|
if ($this->_myStorage === null) {
|
||||||
throw new \Exception("MyStorage가 정의되지 않았습니다.");
|
$this->_myStorage = new MangboardStorage($this->_board_name, $this->_user_entity);
|
||||||
}
|
}
|
||||||
return $this->_myStorage;
|
return $this->_myStorage;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,14 +2,15 @@
|
|||||||
|
|
||||||
namespace App\Libraries\MyCrawler;
|
namespace App\Libraries\MyCrawler;
|
||||||
|
|
||||||
use DateTime;
|
|
||||||
use Symfony\Component\DomCrawler\Crawler;
|
use Symfony\Component\DomCrawler\Crawler;
|
||||||
|
use DateTime;
|
||||||
|
use App\Entities\Mangboard\UserEntity;
|
||||||
|
|
||||||
class Sir extends MyCrawler
|
class Sir extends MyCrawler
|
||||||
{
|
{
|
||||||
public function __construct($mySocket, $myStorage)
|
public function __construct(string $host, string $board_name, UserEntity $user_entity)
|
||||||
{
|
{
|
||||||
parent::__construct($mySocket, $myStorage);
|
parent::__construct($host, $board_name, $user_entity);
|
||||||
}
|
}
|
||||||
protected function changeURLByCrawler(string $url): string
|
protected function changeURLByCrawler(string $url): string
|
||||||
{
|
{
|
||||||
|
|||||||
@ -2,13 +2,14 @@
|
|||||||
|
|
||||||
namespace App\Libraries\MyCrawler;
|
namespace App\Libraries\MyCrawler;
|
||||||
|
|
||||||
|
use App\Entities\Mangboard\UserEntity;
|
||||||
use Symfony\Component\DomCrawler\Crawler;
|
use Symfony\Component\DomCrawler\Crawler;
|
||||||
|
|
||||||
class Yamap extends MyCrawler
|
class Yamap extends MyCrawler
|
||||||
{
|
{
|
||||||
public function __construct($mySocket, $myStorage)
|
public function __construct(string $host, string $board_name, UserEntity $user_entity)
|
||||||
{
|
{
|
||||||
parent::__construct($mySocket, $myStorage);
|
parent::__construct($host, $board_name, $user_entity);
|
||||||
}
|
}
|
||||||
protected function getDetailSelector(array $listInfo): array
|
protected function getDetailSelector(array $listInfo): array
|
||||||
{
|
{
|
||||||
|
|||||||
@ -3,12 +3,13 @@
|
|||||||
namespace App\Libraries\MyCrawler;
|
namespace App\Libraries\MyCrawler;
|
||||||
|
|
||||||
use Symfony\Component\DomCrawler\Crawler;
|
use Symfony\Component\DomCrawler\Crawler;
|
||||||
|
use App\Entities\Mangboard\UserEntity;
|
||||||
|
|
||||||
class Yamoon extends MyCrawler
|
class Yamoon extends MyCrawler
|
||||||
{
|
{
|
||||||
public function __construct($mySocket, $myStorage)
|
public function __construct(string $host, string $board_name, UserEntity $user_entity)
|
||||||
{
|
{
|
||||||
parent::__construct($mySocket, $myStorage);
|
parent::__construct($host, $board_name, $user_entity);
|
||||||
}
|
}
|
||||||
//작성내용
|
//작성내용
|
||||||
// <div class="panel panel-default">
|
// <div class="panel panel-default">
|
||||||
|
|||||||
@ -2,14 +2,15 @@
|
|||||||
|
|
||||||
namespace App\Libraries\MySocket;
|
namespace App\Libraries\MySocket;
|
||||||
|
|
||||||
use Cloudflare\API\Endpoints\Zones;
|
|
||||||
use Cloudflare\API\Endpoints\DNS;
|
|
||||||
use Cloudflare\API\Endpoints\Accounts;
|
|
||||||
use Cloudflare\API\Auth\APIKey;
|
use Cloudflare\API\Auth\APIKey;
|
||||||
use Cloudflare\API\Adapter\Guzzle;
|
use Cloudflare\API\Adapter\Guzzle;
|
||||||
use App\Models\Cloudflare\AccountModel;
|
use App\Models\Cloudflare\AccountModel;
|
||||||
use App\Libraries\CommonLibrary;
|
use App\Libraries\CommonLibrary;
|
||||||
use App\Entities\Cloudflare\AccountEntity;
|
// use App\Entities\Cloudflare\AccountEntity;
|
||||||
|
// use Cloudflare\API\Endpoints\Zones;
|
||||||
|
// use Cloudflare\API\Endpoints\DNS;
|
||||||
|
// use Cloudflare\API\Endpoints\Accounts;
|
||||||
|
|
||||||
class CloudflareSocket extends CommonLibrary
|
class CloudflareSocket extends CommonLibrary
|
||||||
{
|
{
|
||||||
@ -18,7 +19,6 @@ class CloudflareSocket extends CommonLibrary
|
|||||||
private static int $_request_timewait = 60;
|
private static int $_request_timewait = 60;
|
||||||
private $_accountModel = null;
|
private $_accountModel = null;
|
||||||
private $_clients = [];
|
private $_clients = [];
|
||||||
protected $_apikey = "";
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
@ -40,7 +40,7 @@ class CloudflareSocket extends CommonLibrary
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public function getAdapter(string $apikey): Guzzle
|
public function request(string $apikey): Guzzle
|
||||||
{
|
{
|
||||||
if (!array_key_exists($apikey, $this->_clients)) {
|
if (!array_key_exists($apikey, $this->_clients)) {
|
||||||
throw new \Exception(+__FUNCTION__ . " => {$apikey}에 해당하는 Adapter를 찾을수 없습니다.");
|
throw new \Exception(+__FUNCTION__ . " => {$apikey}에 해당하는 Adapter를 찾을수 없습니다.");
|
||||||
@ -54,16 +54,16 @@ class CloudflareSocket extends CommonLibrary
|
|||||||
self::$_request++;
|
self::$_request++;
|
||||||
return $this->_clients[$apikey];
|
return $this->_clients[$apikey];
|
||||||
}
|
}
|
||||||
public function getAccount(string $apikey): Accounts
|
// public function getAccount(string $apikey): Accounts
|
||||||
{
|
// {
|
||||||
return new Accounts($this->getAdapter($apikey));
|
// return new Accounts($this->request($apikey));
|
||||||
}
|
// }
|
||||||
public function getZone(string $apikey): Zones
|
// public function getZone(string $apikey): Zones
|
||||||
{
|
// {
|
||||||
return new Zones($this->getAdapter($apikey));
|
// return new Zones($this->request($apikey));
|
||||||
}
|
// }
|
||||||
public function getRecord(string $apikey): DNS
|
// public function getRecord(string $apikey): DNS
|
||||||
{
|
// {
|
||||||
return new DNS($this->getAdapter($apikey));
|
// return new DNS($this->request($apikey));
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user