cfmgrv4 init...1
This commit is contained in:
parent
d40f836dc6
commit
5821780796
75
app/CLI/Cloudflare.php
Normal file
75
app/CLI/Cloudflare.php
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\CLI;
|
||||||
|
|
||||||
|
use App\Models\Cloudflare\AuthModel;
|
||||||
|
use App\Libraries\Cloudflare\Zone;
|
||||||
|
use App\Libraries\Cloudflare\Record;
|
||||||
|
use App\Libraries\Cloudflare\Account;
|
||||||
|
use App\Entities\Cloudflare\ZoneEntity;
|
||||||
|
use App\Entities\Cloudflare\AuthEntity;
|
||||||
|
use App\Entities\Cloudflare\AccountEntity;
|
||||||
|
|
||||||
|
class Cloudflare
|
||||||
|
{
|
||||||
|
private $_db = null;
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->_db = \Config\Database::connect();
|
||||||
|
}
|
||||||
|
private function getAuthModel(): AuthModel
|
||||||
|
{
|
||||||
|
return new AuthModel();
|
||||||
|
}
|
||||||
|
private function auth_process(): array
|
||||||
|
{
|
||||||
|
$this->getAuthModel()->where('status', DEFAULTS["STATUS"]);
|
||||||
|
return $this->getAuthModel()->getEntitys();
|
||||||
|
}
|
||||||
|
private function account_process(AuthEntity $auth_entity): array
|
||||||
|
{
|
||||||
|
$account = new Account($auth_entity);
|
||||||
|
return $account->reload();
|
||||||
|
}
|
||||||
|
private function zone_process(AccountEntity $account_entity): array
|
||||||
|
{
|
||||||
|
$zone = new Zone($account_entity);
|
||||||
|
return $zone->reload();
|
||||||
|
}
|
||||||
|
private function record_process(ZoneEntity $zone_entity): array
|
||||||
|
{
|
||||||
|
$record = new Record($zone_entity);
|
||||||
|
return $record->reload();
|
||||||
|
}
|
||||||
|
public function reload(): void
|
||||||
|
{
|
||||||
|
//Transaction Start
|
||||||
|
$this->_db->transStart();
|
||||||
|
try {
|
||||||
|
$auths = $this->auth_process();
|
||||||
|
$accounts = [];
|
||||||
|
foreach ($auths as $auth) {
|
||||||
|
$accounts = $this->account_process($auth);
|
||||||
|
}
|
||||||
|
$zones = [];
|
||||||
|
foreach ($accounts as $account) {
|
||||||
|
$zones = $this->zone_process($account);
|
||||||
|
}
|
||||||
|
$records = [];
|
||||||
|
foreach ($zones as $zone) {
|
||||||
|
$records = $this->record_process($zone);
|
||||||
|
}
|
||||||
|
log_message("notice", "Reload 작업을 완료하였습니다.");
|
||||||
|
$this->_db->transCommit();
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
//Transaction Rollback
|
||||||
|
$this->_db->transRollback();
|
||||||
|
log_message(
|
||||||
|
"error",
|
||||||
|
"Reload 작업을 실패하였습니다.\n--------------\n" .
|
||||||
|
$e->getMessage() .
|
||||||
|
"\n--------------\n"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -12,6 +12,11 @@ $routes->addPlaceholder('uuid', '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}
|
|||||||
//1. app/Filters/AuthFilter.php
|
//1. app/Filters/AuthFilter.php
|
||||||
//2. Config/Filters.php -> $aliases = ['authFilter' => AuthFilter::class]
|
//2. Config/Filters.php -> $aliases = ['authFilter' => AuthFilter::class]
|
||||||
$routes->get('/', 'Home::index');
|
$routes->get('/', 'Home::index');
|
||||||
|
$routes->group('cli', ['namespace' => 'App\CLI'], function ($routes) {
|
||||||
|
$routes->group('cloudflare', ['namespace' => 'App\CLI\Cloudflare'], function ($routes) {
|
||||||
|
$routes->cli('reload', 'Cloudflare::reload');
|
||||||
|
});
|
||||||
|
});
|
||||||
// $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:manager'], function ($routes) {
|
// $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:manager'], function ($routes) {
|
||||||
$routes->group('admin', ['namespace' => 'App\Controllers\Admin'], function ($routes) {
|
$routes->group('admin', ['namespace' => 'App\Controllers\Admin'], function ($routes) {
|
||||||
$routes->get('/', 'Home::index');
|
$routes->get('/', 'Home::index');
|
||||||
@ -46,19 +51,13 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin'], function ($rou
|
|||||||
$routes->get('delete/(:num)', 'AuthController::delete/$1');
|
$routes->get('delete/(:num)', 'AuthController::delete/$1');
|
||||||
$routes->get('toggle/(:num)/(:any)', 'AuthController::toggle/$1/$2');
|
$routes->get('toggle/(:num)/(:any)', 'AuthController::toggle/$1/$2');
|
||||||
$routes->post('batchjob', 'AuthController::batcjob');
|
$routes->post('batchjob', 'AuthController::batcjob');
|
||||||
$routes->get('reload/(:num)', 'AuthController::reload/$1');
|
|
||||||
$routes->get('reload', 'AuthController::reload');
|
|
||||||
$routes->cli('reload/(:num)', 'AuthController::reload/$1');
|
|
||||||
$routes->cli('reload', 'AuthController::reload');
|
|
||||||
$routes->get('download/(:alpha)', 'AccountController::download/$1');
|
$routes->get('download/(:alpha)', 'AccountController::download/$1');
|
||||||
});
|
});
|
||||||
$routes->group('account', function ($routes) {
|
$routes->group('account', function ($routes) {
|
||||||
$routes->get('/', 'AccountController::index');
|
$routes->get('/', 'AccountController::index');
|
||||||
$routes->post('create/(:uuid)', 'AccountController::create');
|
$routes->post('create/(:uuid)', 'AccountController::create');
|
||||||
$routes->get('reload/(:alphanum)', 'AccountController::reload/$1');
|
$routes->get('reload/(:alphanum)', 'AccountController::reload/$1');
|
||||||
$routes->get('reload', 'AccountController::reload');
|
$routes->get('reload/(:num)', 'AccountController::reload/$1');
|
||||||
$routes->cli('reload/(:alphanum)', 'AccountController::reload/$1');
|
|
||||||
$routes->cli('reload', 'AccountController::reload');
|
|
||||||
$routes->get('download/(:alpha)', 'AccountController::download/$1');
|
$routes->get('download/(:alpha)', 'AccountController::download/$1');
|
||||||
});
|
});
|
||||||
$routes->group('zone', function ($routes) {
|
$routes->group('zone', function ($routes) {
|
||||||
@ -70,9 +69,6 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin'], function ($rou
|
|||||||
$routes->get('toggle/(:alphanum)/(:any)', 'ZoneController::toggle/$1/$2');
|
$routes->get('toggle/(:alphanum)/(:any)', 'ZoneController::toggle/$1/$2');
|
||||||
$routes->post('batchjob', 'ZoneController::batcjob');
|
$routes->post('batchjob', 'ZoneController::batcjob');
|
||||||
$routes->get('reload/(:alphanum)', 'ZoneController::reload/$1');
|
$routes->get('reload/(:alphanum)', 'ZoneController::reload/$1');
|
||||||
$routes->get('reload', 'ZoneController::reload');
|
|
||||||
$routes->cli('reload/(:alphanum)', 'ZoneController::reload/$1');
|
|
||||||
$routes->cli('reload', 'ZoneController::reload');
|
|
||||||
$routes->get('download/(:alpha)', 'ZoneController::download/$1');
|
$routes->get('download/(:alpha)', 'ZoneController::download/$1');
|
||||||
});
|
});
|
||||||
$routes->group('record', function ($routes) {
|
$routes->group('record', function ($routes) {
|
||||||
@ -83,6 +79,7 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin'], function ($rou
|
|||||||
$routes->get('sync/(:alphanum)', 'RecordController::sync/$1');
|
$routes->get('sync/(:alphanum)', 'RecordController::sync/$1');
|
||||||
$routes->get('toggle/(:alphanum)/(:any)', 'RecordController::toggle/$1/$2');
|
$routes->get('toggle/(:alphanum)/(:any)', 'RecordController::toggle/$1/$2');
|
||||||
$routes->post('batchjob', 'RecordController::batcjob');
|
$routes->post('batchjob', 'RecordController::batcjob');
|
||||||
|
$routes->get('reload/(:alphanum)', 'RecordController::reload/$1');
|
||||||
$routes->get('download/(:alpha)', 'RecordController::download/$1');
|
$routes->get('download/(:alpha)', 'RecordController::download/$1');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -2,18 +2,17 @@
|
|||||||
|
|
||||||
namespace App\Controllers\Admin\Cloudflare;
|
namespace App\Controllers\Admin\Cloudflare;
|
||||||
|
|
||||||
use App\Libraries\MySocket\Cloudflare\AccountSocket;
|
|
||||||
use App\Libraries\MySocket\Cloudflare\ZoneSocket;
|
|
||||||
use App\Models\Cloudflare\AccountModel;
|
|
||||||
use CodeIgniter\HTTP\DownloadResponse;
|
|
||||||
use CodeIgniter\HTTP\RedirectResponse;
|
|
||||||
use CodeIgniter\HTTP\RequestInterface;
|
|
||||||
use CodeIgniter\HTTP\ResponseInterface;
|
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
use CodeIgniter\HTTP\ResponseInterface;
|
||||||
|
use CodeIgniter\HTTP\RequestInterface;
|
||||||
|
use CodeIgniter\HTTP\RedirectResponse;
|
||||||
|
use CodeIgniter\HTTP\DownloadResponse;
|
||||||
|
use App\Models\Cloudflare\AccountModel;
|
||||||
|
use App\Libraries\Cloudflare\Account;
|
||||||
|
|
||||||
class AccountController extends CloudflareController
|
class AccountController extends CloudflareController
|
||||||
{
|
{
|
||||||
private $_mySocket = null;
|
private $_myLibrary = null;
|
||||||
private $_model = null;
|
private $_model = null;
|
||||||
private $_auth_key = null;
|
private $_auth_key = null;
|
||||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
||||||
@ -31,12 +30,12 @@ class AccountController extends CloudflareController
|
|||||||
}
|
}
|
||||||
return $this->_model;
|
return $this->_model;
|
||||||
}
|
}
|
||||||
final protected function getMySocket(): AccountSocket
|
final protected function getMyLibrary(): Account
|
||||||
{
|
{
|
||||||
if ($this->_mySocket === null) {
|
if ($this->_myLibrary === null) {
|
||||||
$this->_mySocket = new AccountSocket($this->_auth_key);
|
$this->_myLibrary = new Account($this->_auth_key);
|
||||||
}
|
}
|
||||||
return $this->_mySocket;
|
return $this->_myLibrary;
|
||||||
}
|
}
|
||||||
protected function getFormFieldOption(string $field, array $options = []): array
|
protected function getFormFieldOption(string $field, array $options = []): array
|
||||||
{
|
{
|
||||||
@ -75,18 +74,19 @@ class AccountController extends CloudflareController
|
|||||||
$this->batchjob_fields = ['typep', 'status'];
|
$this->batchjob_fields = ['typep', 'status'];
|
||||||
return $this->download_procedure($output_type, $uid);
|
return $this->download_procedure($output_type, $uid);
|
||||||
}
|
}
|
||||||
//Zone Reload By Account
|
//reload Account By Auth
|
||||||
protected function reload_process(mixed $uid = false): void
|
protected function reload_process(mixed $uid): void
|
||||||
{
|
{
|
||||||
if ($uid) {
|
$this->_auth_entity = $this->getAuthModel()->getEntityByPK(intval($uid));
|
||||||
$this->getModel()->where($this->getModel()::PK, $uid);
|
if ($this->_auth_entity === null) {
|
||||||
|
throw new \Exception("Auth: {$uid} 정보를 찾을수 없습니다.");
|
||||||
}
|
}
|
||||||
|
$this->getModel()->where($this->getModel()::PARENT, $this->_auth_entity->getPK());
|
||||||
foreach ($this->getModel()->getEntitys() as $entity) {
|
foreach ($this->getModel()->getEntitys() as $entity) {
|
||||||
$zone_socket = new ZoneSocket($entity);
|
$this->getMyLibrary()->reload();
|
||||||
$zone_socket->reload();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public function reload(mixed $uid = false): RedirectResponse
|
public function reload(int $uid): RedirectResponse
|
||||||
{
|
{
|
||||||
return $this->reload_procedure($uid);
|
return $this->reload_procedure($uid);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,13 +2,12 @@
|
|||||||
|
|
||||||
namespace App\Controllers\Admin\Cloudflare;
|
namespace App\Controllers\Admin\Cloudflare;
|
||||||
|
|
||||||
use App\Libraries\MySocket\Cloudflare\AccountSocket;
|
|
||||||
use App\Models\Cloudflare\AuthModel;
|
|
||||||
use CodeIgniter\HTTP\DownloadResponse;
|
|
||||||
use CodeIgniter\HTTP\RedirectResponse;
|
|
||||||
use CodeIgniter\HTTP\RequestInterface;
|
|
||||||
use CodeIgniter\HTTP\ResponseInterface;
|
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
use CodeIgniter\HTTP\ResponseInterface;
|
||||||
|
use CodeIgniter\HTTP\RequestInterface;
|
||||||
|
use CodeIgniter\HTTP\RedirectResponse;
|
||||||
|
use CodeIgniter\HTTP\DownloadResponse;
|
||||||
|
use App\Models\Cloudflare\AuthModel;
|
||||||
|
|
||||||
class AuthController extends CloudflareController
|
class AuthController extends CloudflareController
|
||||||
{
|
{
|
||||||
@ -88,19 +87,4 @@ class AuthController extends CloudflareController
|
|||||||
$this->batchjob_fields = ['status'];
|
$this->batchjob_fields = ['status'];
|
||||||
return $this->download_procedure($output_type, $uid);
|
return $this->download_procedure($output_type, $uid);
|
||||||
}
|
}
|
||||||
//Account Reload by Auth
|
|
||||||
protected function reload_process(mixed $uid = false): void
|
|
||||||
{
|
|
||||||
if ($uid && intval($uid) > 0) {
|
|
||||||
$this->getModel()->where($this->getModel()::PK, intval($uid));
|
|
||||||
}
|
|
||||||
foreach ($this->getModel()->getEntitys() as $entity) {
|
|
||||||
$account_socket = new AccountSocket($entity);
|
|
||||||
$account_socket->reload();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public function reload(mixed $uid = false): RedirectResponse
|
|
||||||
{
|
|
||||||
return $this->reload_procedure($uid);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -72,8 +72,8 @@ abstract class CloudflareController extends AdminController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function reload_process(mixed $uid = false): void {}
|
protected function reload_process(mixed $uid): void {}
|
||||||
final protected function reload_procedure(mixed $uid = false): RedirectResponse
|
final protected function reload_procedure(mixed $uid): RedirectResponse
|
||||||
{
|
{
|
||||||
//Transaction Start
|
//Transaction Start
|
||||||
$this->getModel()->transStart();
|
$this->getModel()->transStart();
|
||||||
|
|||||||
@ -2,16 +2,17 @@
|
|||||||
|
|
||||||
namespace App\Controllers\Admin\Cloudflare;
|
namespace App\Controllers\Admin\Cloudflare;
|
||||||
|
|
||||||
use App\Libraries\MySocket\Cloudflare\RecordSocket;
|
|
||||||
use App\Models\Cloudflare\RecordModel;
|
|
||||||
use CodeIgniter\HTTP\DownloadResponse;
|
|
||||||
use CodeIgniter\HTTP\RedirectResponse;
|
|
||||||
use CodeIgniter\HTTP\RequestInterface;
|
|
||||||
use CodeIgniter\HTTP\ResponseInterface;
|
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
use CodeIgniter\HTTP\ResponseInterface;
|
||||||
|
use CodeIgniter\HTTP\RequestInterface;
|
||||||
|
use CodeIgniter\HTTP\RedirectResponse;
|
||||||
|
use CodeIgniter\HTTP\DownloadResponse;
|
||||||
|
use App\Models\Cloudflare\RecordModel;
|
||||||
|
use App\Libraries\Cloudflare\Record;
|
||||||
|
|
||||||
class RecordController extends CloudflareController
|
class RecordController extends CloudflareController
|
||||||
{
|
{
|
||||||
|
private $_myLibrary = null;
|
||||||
private $_zone_entity = null;
|
private $_zone_entity = null;
|
||||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
||||||
{
|
{
|
||||||
@ -28,12 +29,12 @@ class RecordController extends CloudflareController
|
|||||||
}
|
}
|
||||||
return $this->_model;
|
return $this->_model;
|
||||||
}
|
}
|
||||||
final protected function getMySocket(): RecordSocket
|
final protected function getMyLibrary(): Record
|
||||||
{
|
{
|
||||||
if ($this->_mySocket === null) {
|
if ($this->_myLibrary === null) {
|
||||||
$this->_mySocket = new RecordSocket($this->_zone_entity);
|
$this->_myLibrary = new Record($this->_zone_entity);
|
||||||
}
|
}
|
||||||
return $this->_mySocket;
|
return $this->_myLibrary;
|
||||||
}
|
}
|
||||||
protected function getFormFieldOption(string $field, array $options = []): array
|
protected function getFormFieldOption(string $field, array $options = []): array
|
||||||
{
|
{
|
||||||
@ -105,7 +106,7 @@ class RecordController extends CloudflareController
|
|||||||
}
|
}
|
||||||
//Socket처리
|
//Socket처리
|
||||||
foreach ($this->formDatas['hosts'] as $host) {
|
foreach ($this->formDatas['hosts'] as $host) {
|
||||||
$entity = $this->getMySocket()->create($host, $this->formDatas['type'], $this->formDatas['content'], $this->formDatas['proxied']);
|
$entity = $this->getMyLibrary()->create($host, $this->formDatas['type'], $this->formDatas['content'], $this->formDatas['proxied']);
|
||||||
log_message("debug", "Record:{$entity->getTitle()} 생성 작업을 완료하였습니다.");
|
log_message("debug", "Record:{$entity->getTitle()} 생성 작업을 완료하였습니다.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -128,7 +129,7 @@ class RecordController extends CloudflareController
|
|||||||
//부모데이터정의
|
//부모데이터정의
|
||||||
$this->_zone_entity = $this->getZoneModel()->getEntityByPK($this->entity->getParent());
|
$this->_zone_entity = $this->getZoneModel()->getEntityByPK($this->entity->getParent());
|
||||||
//Socket처리
|
//Socket처리
|
||||||
$entity = $this->getMySocket()->modify($this->entity, $this->formDatas);
|
$entity = $this->getMyLibrary()->modify($this->entity, $this->formDatas);
|
||||||
log_message("debug", "Record:{$entity->getTitle()} 수정 작업을 완료하였습니다.");
|
log_message("debug", "Record:{$entity->getTitle()} 수정 작업을 완료하였습니다.");
|
||||||
}
|
}
|
||||||
//일괄처리작업
|
//일괄처리작업
|
||||||
@ -150,7 +151,7 @@ class RecordController extends CloudflareController
|
|||||||
//부모데이터정의
|
//부모데이터정의
|
||||||
$this->_zone_entity = $this->getZoneModel()->getEntityByPK($this->entity->getParent());
|
$this->_zone_entity = $this->getZoneModel()->getEntityByPK($this->entity->getParent());
|
||||||
//Socket처리
|
//Socket처리
|
||||||
$this->getMySocket()->sync($this->entity);
|
$this->getMyLibrary()->sync($this->entity);
|
||||||
}
|
}
|
||||||
public function sync(string $uid): RedirectResponse
|
public function sync(string $uid): RedirectResponse
|
||||||
{
|
{
|
||||||
@ -168,7 +169,7 @@ class RecordController extends CloudflareController
|
|||||||
//부모데이터정의
|
//부모데이터정의
|
||||||
$this->_zone_entity = $this->getZoneModel()->getEntityByPK($this->formDatas[$this->getModel()::PARENT]);
|
$this->_zone_entity = $this->getZoneModel()->getEntityByPK($this->formDatas[$this->getModel()::PARENT]);
|
||||||
//Cloudflare 삭제
|
//Cloudflare 삭제
|
||||||
$this->getMySocket()->delete($this->entity);
|
$this->getMyLibrary()->delete($this->entity);
|
||||||
}
|
}
|
||||||
// 리스트
|
// 리스트
|
||||||
public function index(): string
|
public function index(): string
|
||||||
@ -192,4 +193,20 @@ class RecordController extends CloudflareController
|
|||||||
$this->batchjob_fields = ['proxied'];
|
$this->batchjob_fields = ['proxied'];
|
||||||
return $this->download_procedure($output_type, $uid);
|
return $this->download_procedure($output_type, $uid);
|
||||||
}
|
}
|
||||||
|
//reload Record By Zone
|
||||||
|
protected function reload_process(mixed $uid): void
|
||||||
|
{
|
||||||
|
$this->_zone_entity = $this->getZoneModel()->getEntityByPK($uid);
|
||||||
|
if ($this->_zone_entity === null) {
|
||||||
|
throw new \Exception("Zone: {$uid} 정보를 찾을수 없습니다.");
|
||||||
|
}
|
||||||
|
$this->getModel()->where($this->getModel()::PARENT, $this->_zone_entity->getPK());
|
||||||
|
foreach ($this->getModel()->getEntitys() as $entity) {
|
||||||
|
$this->getMyLibrary()->reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public function reload(string $uid): RedirectResponse
|
||||||
|
{
|
||||||
|
return $this->reload_procedure($uid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,18 +2,18 @@
|
|||||||
|
|
||||||
namespace App\Controllers\Admin\Cloudflare;
|
namespace App\Controllers\Admin\Cloudflare;
|
||||||
|
|
||||||
use App\Libraries\MySocket\Cloudflare\RecordSocket;
|
|
||||||
use App\Libraries\MySocket\Cloudflare\ZoneSocket;
|
|
||||||
use App\Models\Cloudflare\ZoneModel;
|
|
||||||
use CodeIgniter\HTTP\DownloadResponse;
|
|
||||||
use CodeIgniter\HTTP\RedirectResponse;
|
|
||||||
use CodeIgniter\HTTP\RequestInterface;
|
|
||||||
use CodeIgniter\HTTP\ResponseInterface;
|
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
use CodeIgniter\HTTP\ResponseInterface;
|
||||||
|
use CodeIgniter\HTTP\RequestInterface;
|
||||||
|
use CodeIgniter\HTTP\RedirectResponse;
|
||||||
|
use CodeIgniter\HTTP\DownloadResponse;
|
||||||
|
use App\Models\Cloudflare\ZoneModel;
|
||||||
|
use App\Libraries\Cloudflare\Zone;
|
||||||
|
use App\Libraries\Cloudflare\Record;
|
||||||
|
|
||||||
class ZoneController extends CloudflareController
|
class ZoneController extends CloudflareController
|
||||||
{
|
{
|
||||||
private $_mySocket = null;
|
private $_myLibrary = null;
|
||||||
private $_account_entity = null;
|
private $_account_entity = null;
|
||||||
private $_model = null;
|
private $_model = null;
|
||||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
||||||
@ -31,13 +31,13 @@ class ZoneController extends CloudflareController
|
|||||||
}
|
}
|
||||||
return $this->_model;
|
return $this->_model;
|
||||||
}
|
}
|
||||||
final protected function getMySocket(): ZoneSocket
|
final protected function getMyLibrary(): Zone
|
||||||
{
|
{
|
||||||
if ($this->_mySocket === null) {
|
if ($this->_myLibrary === null) {
|
||||||
|
|
||||||
$this->_mySocket = new ZoneSocket($this->_account_entity);
|
$this->_myLibrary = new Zone($this->_account_entity);
|
||||||
}
|
}
|
||||||
return $this->_mySocket;
|
return $this->_myLibrary;
|
||||||
}
|
}
|
||||||
protected function getFormFieldOption(string $field, array $options = []): array
|
protected function getFormFieldOption(string $field, array $options = []): array
|
||||||
{
|
{
|
||||||
@ -139,16 +139,16 @@ class ZoneController extends CloudflareController
|
|||||||
$cnt = 1;
|
$cnt = 1;
|
||||||
$zone_entitys = [];
|
$zone_entitys = [];
|
||||||
foreach ($this->formDatas['domains'] as $domain) {
|
foreach ($this->formDatas['domains'] as $domain) {
|
||||||
$entity = $this->getMySocket()->create($domain);
|
$entity = $this->getMyLibrary()->create($domain);
|
||||||
log_message("debug", "Zone:{$entity->getTitle()} 작업을 완료하였습니다.");
|
log_message("debug", "Zone:{$entity->getTitle()} 작업을 완료하였습니다.");
|
||||||
$zone_entitys[] = $entity;
|
$zone_entitys[] = $entity;
|
||||||
$cnt++;
|
$cnt++;
|
||||||
}
|
}
|
||||||
//Record생성
|
//Record생성
|
||||||
foreach ($zone_entitys as $zone_entity) {
|
foreach ($zone_entitys as $zone_entity) {
|
||||||
$record_socket = new RecordSocket($entity);
|
$record = new Record($zone_entity);
|
||||||
foreach ($this->formDatas['hosts'] as $host) {
|
foreach ($this->formDatas['hosts'] as $host) {
|
||||||
$entity = $record_socket->create($host, $this->formDatas['type'], $this->formDatas['content'], $this->formDatas['proxied']);
|
$entity = $record->create($host, $this->formDatas['type'], $this->formDatas['content'], $this->formDatas['proxied']);
|
||||||
log_message("debug", "Record:{$entity->getTitle()} 작업을 완료하였습니다.");
|
log_message("debug", "Record:{$entity->getTitle()} 작업을 완료하였습니다.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -172,7 +172,7 @@ class ZoneController extends CloudflareController
|
|||||||
//부모데이터정의
|
//부모데이터정의
|
||||||
$this->_account_entity = $this->getAccountModel()->getEntityByPK($this->entity->getParent());
|
$this->_account_entity = $this->getAccountModel()->getEntityByPK($this->entity->getParent());
|
||||||
//Socket처리
|
//Socket처리
|
||||||
$entity = $this->getMySocket()->modify($this->entity, $this->formDatas);
|
$entity = $this->getMyLibrary()->modify($this->entity, $this->formDatas);
|
||||||
log_message("debug", "Zone:{$entity->getTitle()} 수정 작업을 완료하였습니다.");
|
log_message("debug", "Zone:{$entity->getTitle()} 수정 작업을 완료하였습니다.");
|
||||||
}
|
}
|
||||||
//일괄처리작업
|
//일괄처리작업
|
||||||
@ -194,7 +194,7 @@ class ZoneController extends CloudflareController
|
|||||||
//부모데이터정의
|
//부모데이터정의
|
||||||
$this->_account_entity = $this->getAccountModel()->getEntityByPK($this->entity->getParent());
|
$this->_account_entity = $this->getAccountModel()->getEntityByPK($this->entity->getParent());
|
||||||
//Socket처리
|
//Socket처리
|
||||||
$this->getMySocket()->sync($this->entity);
|
$this->getMyLibrary()->sync($this->entity);
|
||||||
}
|
}
|
||||||
public function sync(string $uid): RedirectResponse
|
public function sync(string $uid): RedirectResponse
|
||||||
{
|
{
|
||||||
@ -212,7 +212,7 @@ class ZoneController extends CloudflareController
|
|||||||
//부모데이터정의
|
//부모데이터정의
|
||||||
$this->_account_entity = $this->getAccountModel()->getEntityByPK($this->formDatas[$this->getModel()::PARENT]);
|
$this->_account_entity = $this->getAccountModel()->getEntityByPK($this->formDatas[$this->getModel()::PARENT]);
|
||||||
//Cloudflare 삭제
|
//Cloudflare 삭제
|
||||||
$this->getMySocket()->delete($this->entity);
|
$this->getMyLibrary()->delete($this->entity);
|
||||||
}
|
}
|
||||||
// 리스트
|
// 리스트
|
||||||
public function index(): string
|
public function index(): string
|
||||||
@ -236,18 +236,19 @@ class ZoneController extends CloudflareController
|
|||||||
$this->batchjob_fields = ['development_mode', 'ipv6', 'security_level'];
|
$this->batchjob_fields = ['development_mode', 'ipv6', 'security_level'];
|
||||||
return $this->download_procedure($output_type, $uid);
|
return $this->download_procedure($output_type, $uid);
|
||||||
}
|
}
|
||||||
//reload Record By Zone
|
//reload Zone By Account
|
||||||
protected function reload_process(mixed $uid = false): void
|
protected function reload_process(mixed $uid): void
|
||||||
{
|
{
|
||||||
if ($uid) {
|
$this->_account_entity = $this->getAccountModel()->getEntityByPK($uid);
|
||||||
$this->getModel()->where($this->getModel()::PK, $uid);
|
if ($this->_account_entity === null) {
|
||||||
|
throw new \Exception("Account: {$uid} 정보를 찾을수 없습니다.");
|
||||||
}
|
}
|
||||||
|
$this->getModel()->where($this->getModel()::PARENT, $this->_account_entity->getPK());
|
||||||
foreach ($this->getModel()->getEntitys() as $entity) {
|
foreach ($this->getModel()->getEntitys() as $entity) {
|
||||||
$record_socket = new RecordSocket($entity);
|
$this->getMyLibrary()->reload();
|
||||||
$record_socket->reload();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public function reload(mixed $uid = false): RedirectResponse
|
public function reload(string $uid): RedirectResponse
|
||||||
{
|
{
|
||||||
return $this->reload_procedure($uid);
|
return $this->reload_procedure($uid);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,18 +1,15 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Libraries\MySocket\Cloudflare;
|
namespace App\Libraries\Cloudflare;
|
||||||
|
|
||||||
use App\Models\Cloudflare\AccountModel;
|
use App\Models\Cloudflare\AccountModel;
|
||||||
use App\Libraries\MySocket\CloudflareSocket;
|
|
||||||
use App\Entities\Cloudflare\AuthEntity;
|
use App\Entities\Cloudflare\AuthEntity;
|
||||||
|
|
||||||
class AccountSocket extends CloudflareSocket
|
class Account extends Cloudflare
|
||||||
{
|
{
|
||||||
private $_model = null;
|
private $_model = null;
|
||||||
private $_auth_entity = null;
|
|
||||||
public function __construct(AuthEntity $auth_entity)
|
public function __construct(AuthEntity $auth_entity)
|
||||||
{
|
{
|
||||||
$this->_auth_entity = $auth_entity;
|
|
||||||
parent::__construct($auth_entity);
|
parent::__construct($auth_entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,29 +37,28 @@ class AccountSocket extends CloudflareSocket
|
|||||||
public function getArrayByResult($result, array $formDatas = []): array
|
public function getArrayByResult($result, array $formDatas = []): array
|
||||||
{
|
{
|
||||||
$formDatas[AccountModel::PK] = $result->id;
|
$formDatas[AccountModel::PK] = $result->id;
|
||||||
$formDatas[AccountModel::PARENT] = $this->_auth_entity->getPK();
|
$formDatas[AccountModel::PARENT] = $this->getAuthEntity()->getPK();
|
||||||
$formDatas[AccountModel::TITLE] = $result->name;
|
$formDatas[AccountModel::TITLE] = $result->name;
|
||||||
$formDatas['type'] = $result->type;
|
$formDatas['type'] = $result->type;
|
||||||
$formDatas['status'] = $this->_auth_entity->status;
|
$formDatas['status'] = $this->getAuthEntity()->status;
|
||||||
$formDatas['updated_at'] = date("Y-m-d H:i:s");
|
$formDatas['updated_at'] = date("Y-m-d H:i:s");
|
||||||
$formDatas['created_at'] = $result->created_on;
|
$formDatas['created_at'] = $result->created_on;
|
||||||
return $formDatas;
|
return $formDatas;
|
||||||
}
|
}
|
||||||
public function reload(): void
|
public function reload(): array
|
||||||
{
|
{
|
||||||
log_message("notice", "-----{$this->_auth_entity->getTitle()} 처리 시작-----");
|
log_message("notice", "-----{$this->getAuthEntity()->getTitle()} 처리 시작-----");
|
||||||
$entity_uids = [];
|
$entitys = [];
|
||||||
$results = $this->reload_procedure("accounts");
|
foreach ($this->reload_procedure("accounts") as $result) {
|
||||||
//DB수정
|
|
||||||
foreach ($results as $result) {
|
|
||||||
$formDatas = $this->getArrayByResult($result);
|
$formDatas = $this->getArrayByResult($result);
|
||||||
$entity = $this->getModel()->modify($this->getModel()->getEntity(), $formDatas);
|
$entity = $this->getModel()->modify($this->getModel()->getEntity(), $formDatas);
|
||||||
$entity_uids[] = $entity->getPK();
|
$entitys[$entity->getPK()] = $entity;
|
||||||
}
|
}
|
||||||
//부모키를 기준으로 CF에 존재하지 않는 데이터 삭제용
|
//부모키를 기준으로 CF에 존재하지 않는 데이터 삭제용
|
||||||
$this->getModel()->where(AccountModel::PARENT, $this->_auth_entity);
|
$this->getModel()->where(AccountModel::PARENT, $this->getAuthEntity());
|
||||||
$this->getModel()->whereNotIn(AccountModel::PK, $entity_uids);
|
$this->getModel()->whereNotIn(AccountModel::PK, array_keys($entitys));
|
||||||
$this->getModel()->delete();
|
$this->getModel()->delete();
|
||||||
log_message("notice", "-----{$this->_auth_entity->getTitle()} 처리[" . count($results) . "개] 완료-----");
|
log_message("notice", "-----{$this->getAuthEntity()->getTitle()} 처리[" . count($entitys) . "개] 완료-----");
|
||||||
|
return $entitys;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
75
app/Libraries/Cloudflare/Cloudflare.php
Normal file
75
app/Libraries/Cloudflare/Cloudflare.php
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Libraries\Cloudflare;
|
||||||
|
|
||||||
|
use App\Models\Cloudflare\AuthModel;
|
||||||
|
use App\Models\Cloudflare\AccountModel;
|
||||||
|
use App\Libraries\MySocket\CloudflareSocket;
|
||||||
|
use App\Libraries\CommonLibrary;
|
||||||
|
use App\Entities\Cloudflare\AuthEntity;
|
||||||
|
|
||||||
|
abstract class Cloudflare extends CommonLibrary
|
||||||
|
{
|
||||||
|
private $_auth_entity = null;
|
||||||
|
private $_authModel = null;
|
||||||
|
private $_accountModel = null;
|
||||||
|
protected function __construct(AuthEntity $auth_entity)
|
||||||
|
{
|
||||||
|
$this->_auth_entity = $auth_entity;
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
abstract protected function getArrayByResult($result, array $formDatas = []): array;
|
||||||
|
final public function getMySocket(): CloudflareSocket
|
||||||
|
{
|
||||||
|
if ($this->_mySocket === null) {
|
||||||
|
$this->_mySocket = new CloudflareSocket($this->getAuthEntity());
|
||||||
|
}
|
||||||
|
return $this->_mySocket;
|
||||||
|
}
|
||||||
|
final protected function getAuthEntity(): AuthEntity
|
||||||
|
{
|
||||||
|
if ($this->_auth_entity === null) {
|
||||||
|
throw new \Exception(__FUNCTION__ . "에서 인증정보가 없습니다.");
|
||||||
|
}
|
||||||
|
return $this->_auth_entity;
|
||||||
|
}
|
||||||
|
final protected function getAuthModel(): AuthModel
|
||||||
|
{
|
||||||
|
if ($this->_authModel === null) {
|
||||||
|
$this->_authModel = new AuthModel();
|
||||||
|
}
|
||||||
|
return $this->_authModel;
|
||||||
|
}
|
||||||
|
final protected function getAccountModel(): AccountModel
|
||||||
|
{
|
||||||
|
if ($this->_accountModel === null) {
|
||||||
|
$this->_accountModel = new AccountModel();
|
||||||
|
}
|
||||||
|
return $this->_accountModel;
|
||||||
|
}
|
||||||
|
final protected function reload_procedure($uri): array
|
||||||
|
{
|
||||||
|
$page = 1; //1부터 시작
|
||||||
|
$results = [];
|
||||||
|
do {
|
||||||
|
$query = [
|
||||||
|
'page' => $page,
|
||||||
|
'per_page' => $this->getMySocket()::$_request_perpage_max,
|
||||||
|
'match' => 'all',
|
||||||
|
];
|
||||||
|
$response = $this->getMySocket()->get($uri, $query);
|
||||||
|
$cf = json_decode($response->getBody());
|
||||||
|
if (!$cf->success) {
|
||||||
|
$message = __FUNCTION__ . "에서 실패:\nresponse:" . var_export($cf, true);
|
||||||
|
log_message("error", $message);
|
||||||
|
throw new \Exception($message);
|
||||||
|
}
|
||||||
|
$results = array_merge($results, $cf->result);
|
||||||
|
if (count($cf->result) < $this->getMySocket()::$_request_perpage_max) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$page++;
|
||||||
|
} while (true);
|
||||||
|
return $results;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,13 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Libraries\MySocket\Cloudflare;
|
namespace App\Libraries\Cloudflare;
|
||||||
|
|
||||||
use App\Models\Cloudflare\RecordModel;
|
use App\Models\Cloudflare\RecordModel;
|
||||||
use App\Libraries\MySocket\CloudflareSocket;
|
|
||||||
use App\Entities\Cloudflare\ZoneEntity;
|
use App\Entities\Cloudflare\ZoneEntity;
|
||||||
use App\Entities\Cloudflare\RecordEntity;
|
use App\Entities\Cloudflare\RecordEntity;
|
||||||
|
|
||||||
class RecordSocket extends CloudflareSocket
|
class Record extends Cloudflare
|
||||||
{
|
{
|
||||||
private $_model = null;
|
private $_model = null;
|
||||||
private $_zone_entity = null;
|
private $_zone_entity = null;
|
||||||
@ -59,7 +58,7 @@ class RecordSocket extends CloudflareSocket
|
|||||||
'content' => $content,
|
'content' => $content,
|
||||||
'proxied' => $proxied === 'on' ? true : false
|
'proxied' => $proxied === 'on' ? true : false
|
||||||
];
|
];
|
||||||
$cf = $this->post("zones/{$this->_zone_entity->getPK()}/dns_records", $datas);
|
$cf = $this->getMySocket()->post("zones/{$this->_zone_entity->getPK()}/dns_records", $datas);
|
||||||
$cf = json_decode($cf->getBody());
|
$cf = json_decode($cf->getBody());
|
||||||
if (!$cf->success) {
|
if (!$cf->success) {
|
||||||
$message = "Record:" . __FUNCTION__ . "에서 실패:\nrequest:" . var_export($datas, true) . "\nresponse:" . var_export($cf, true);
|
$message = "Record:" . __FUNCTION__ . "에서 실패:\nrequest:" . var_export($datas, true) . "\nresponse:" . var_export($cf, true);
|
||||||
@ -91,7 +90,7 @@ class RecordSocket extends CloudflareSocket
|
|||||||
}
|
}
|
||||||
// 인코딩된 JSON을 확인
|
// 인코딩된 JSON을 확인
|
||||||
// throw new \Exception("Record:" . __FUNCTION__ . "\n" . json_encode($datas, JSON_PRETTY_PRINT) . "\n" . var_export($datas, true));
|
// throw new \Exception("Record:" . __FUNCTION__ . "\n" . json_encode($datas, JSON_PRETTY_PRINT) . "\n" . var_export($datas, true));
|
||||||
$cf = $this->put("zones/{$this->_zone_entity->getPK()}/dns_records/{$entity->getPK()}", $datas);
|
$cf = $this->getMySocket()->put("zones/{$this->_zone_entity->getPK()}/dns_records/{$entity->getPK()}", $datas);
|
||||||
$cf = json_decode($cf->getBody());
|
$cf = json_decode($cf->getBody());
|
||||||
if (!$cf->success) {
|
if (!$cf->success) {
|
||||||
$message = "Record:" . __FUNCTION__ . "에서 실패:\nrequest:" . var_export($datas, true) . "\nresponse:" . var_export($cf, true);
|
$message = "Record:" . __FUNCTION__ . "에서 실패:\nrequest:" . var_export($datas, true) . "\nresponse:" . var_export($cf, true);
|
||||||
@ -104,7 +103,7 @@ class RecordSocket extends CloudflareSocket
|
|||||||
}
|
}
|
||||||
public function delete(RecordEntity $entity): void
|
public function delete(RecordEntity $entity): void
|
||||||
{
|
{
|
||||||
$cf = $this->delete("zones/{$this->_zone_entity->getPK()}/dns_records/{$entity->getPK()}");
|
$cf = $this->getMySocket()->delete("zones/{$this->_zone_entity->getPK()}/dns_records/{$entity->getPK()}");
|
||||||
$cf = json_decode($cf->getBody());
|
$cf = json_decode($cf->getBody());
|
||||||
if (!$cf->success) {
|
if (!$cf->success) {
|
||||||
$message = "Record:" . __FUNCTION__ . "에서 실패:\nresponse:" . var_export($cf, true);
|
$message = "Record:" . __FUNCTION__ . "에서 실패:\nresponse:" . var_export($cf, true);
|
||||||
@ -118,7 +117,7 @@ class RecordSocket extends CloudflareSocket
|
|||||||
public function sync(RecordEntity $entity): void
|
public function sync(RecordEntity $entity): void
|
||||||
{
|
{
|
||||||
// 기존 Sync형태
|
// 기존 Sync형태
|
||||||
$cf = $this->get("zones/{$this->_zone_entity->getPK()}/dns_records/{$entity->getPK()}");
|
$cf = $this->getMySocket()->get("zones/{$this->_zone_entity->getPK()}/dns_records/{$entity->getPK()}");
|
||||||
$cf = json_decode($cf->getBody());
|
$cf = json_decode($cf->getBody());
|
||||||
if (!$cf->success) {
|
if (!$cf->success) {
|
||||||
$message = "Record:" . __FUNCTION__ . "에서 실패:\nresponse:" . var_export($cf, true);
|
$message = "Record:" . __FUNCTION__ . "에서 실패:\nresponse:" . var_export($cf, true);
|
||||||
@ -129,7 +128,7 @@ class RecordSocket extends CloudflareSocket
|
|||||||
log_message("debug", var_export($cf->result, true));
|
log_message("debug", var_export($cf->result, true));
|
||||||
$entity = $this->getModel()->modify($entity, $this->getArrayByResult($cf->result));
|
$entity = $this->getModel()->modify($entity, $this->getArrayByResult($cf->result));
|
||||||
//Async형태
|
//Async형태
|
||||||
// $promise = $this->getAsync("zones/{$this->_zone_entity->getPK()}/dns_records/{$entity->getPK()}");
|
// $promise = $this->getMySocket()getAsync("zones/{$this->_zone_entity->getPK()}/dns_records/{$entity->getPK()}");
|
||||||
// $promise->then(
|
// $promise->then(
|
||||||
// onFulfilled: function ($response) use ($entity): RecordEntity {
|
// onFulfilled: function ($response) use ($entity): RecordEntity {
|
||||||
// $record = json_decode($response->getBody(), true)['result'];
|
// $record = json_decode($response->getBody(), true)['result'];
|
||||||
@ -145,21 +144,20 @@ class RecordSocket extends CloudflareSocket
|
|||||||
// $promise->wait();
|
// $promise->wait();
|
||||||
}
|
}
|
||||||
//Reload
|
//Reload
|
||||||
public function reload(): void
|
public function reload(): array
|
||||||
{
|
{
|
||||||
log_message("notice", "-----{$this->_zone_entity->getTitle()} 처리 시작-----");
|
log_message("notice", "-----{$this->_zone_entity->getTitle()} 처리 시작-----");
|
||||||
$entity_uids = [];
|
$entitys = [];
|
||||||
$results = $this->reload_procedure("zones/{$this->_zone_entity->getPK()}/dns_records");
|
foreach ($this->reload_procedure("zones/{$this->_zone_entity->getPK()}/dns_records") as $result) {
|
||||||
//DB수정
|
|
||||||
foreach ($results as $result) {
|
|
||||||
$formDatas = $this->getArrayByResult($result);
|
$formDatas = $this->getArrayByResult($result);
|
||||||
$entity = $this->getModel()->modify($this->getModel()->getEntity(), $formDatas);
|
$entity = $this->getModel()->modify($this->getModel()->getEntity(), $formDatas);
|
||||||
$entity_uids[] = $entity->getPK();
|
$entitys[$entity->getPK()] = $entity;
|
||||||
}
|
}
|
||||||
//부모키를 기준으로 CF에 존재하지 않는 데이터 DB삭제
|
//부모키를 기준으로 CF에 존재하지 않는 데이터 DB삭제
|
||||||
$this->getModel()->where(RecordModel::PARENT, $this->_zone_entity);
|
$this->getModel()->where(RecordModel::PARENT, $this->_zone_entity);
|
||||||
$this->getModel()->whereNotIn(RecordModel::PK, $entity_uids);
|
$this->getModel()->whereNotIn(RecordModel::PK, array_keys($entitys));
|
||||||
$this->getModel()->delete();
|
$this->getModel()->delete();
|
||||||
log_message("notice", "-----{$this->_zone_entity->getTitle()} 처리[" . count($results) . "개] 완료-----");
|
log_message("notice", "-----{$this->_zone_entity->getTitle()} 처리[" . count($entitys) . "개] 완료-----");
|
||||||
|
return $entitys;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,13 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Libraries\MySocket\Cloudflare;
|
namespace App\Libraries\Cloudflare;
|
||||||
|
|
||||||
use App\Models\Cloudflare\ZoneModel;
|
use App\Models\Cloudflare\ZoneModel;
|
||||||
use App\Libraries\MySocket\CloudflareSocket;
|
|
||||||
use App\Entities\Cloudflare\ZoneEntity;
|
use App\Entities\Cloudflare\ZoneEntity;
|
||||||
use App\Entities\Cloudflare\AccountEntity;
|
use App\Entities\Cloudflare\AccountEntity;
|
||||||
|
|
||||||
class ZoneSocket extends CloudflareSocket
|
|
||||||
|
class Zone extends Cloudflare
|
||||||
{
|
{
|
||||||
private $_model = null;
|
private $_model = null;
|
||||||
private $_account_entity = null;
|
private $_account_entity = null;
|
||||||
@ -60,7 +60,7 @@ class ZoneSocket extends CloudflareSocket
|
|||||||
//Cfzone에서 가져온 값을 zone에 setting
|
//Cfzone에서 가져온 값을 zone에 setting
|
||||||
private function getCFSetting(ZoneEntity $entity): array
|
private function getCFSetting(ZoneEntity $entity): array
|
||||||
{
|
{
|
||||||
$cf = $this->get('zones/' . $entity->getPK() . '/settings');
|
$cf = $this->getMySocket()->get('zones/' . $entity->getPK() . '/settings');
|
||||||
$cf = json_decode($cf->getBody());
|
$cf = json_decode($cf->getBody());
|
||||||
if (!$cf->success) {
|
if (!$cf->success) {
|
||||||
$message = "Zone:" . __FUNCTION__ . "에서 실패:\nresponse:" . var_export($cf, true);
|
$message = "Zone:" . __FUNCTION__ . "에서 실패:\nresponse:" . var_export($cf, true);
|
||||||
@ -78,7 +78,7 @@ class ZoneSocket extends CloudflareSocket
|
|||||||
private function setCFSetting(ZoneEntity $entity, string $field, string $value): string
|
private function setCFSetting(ZoneEntity $entity, string $field, string $value): string
|
||||||
{
|
{
|
||||||
$datas = ['value' => $value];
|
$datas = ['value' => $value];
|
||||||
$cf = $this->patch('zones/' . $entity->getPK() . '/settings/' . $field, $datas);
|
$cf = $this->getMySocket()->patch('zones/' . $entity->getPK() . '/settings/' . $field, $datas);
|
||||||
$cf = json_decode($cf->getBody());
|
$cf = json_decode($cf->getBody());
|
||||||
if (!$cf->success || $cf->result->id !== $field) {
|
if (!$cf->success || $cf->result->id !== $field) {
|
||||||
$message = "Zone:" . __FUNCTION__ . "에서 실패:\nrequest:" . var_export($datas, true) . "\nresponse:" . var_export($cf, true);
|
$message = "Zone:" . __FUNCTION__ . "에서 실패:\nrequest:" . var_export($datas, true) . "\nresponse:" . var_export($cf, true);
|
||||||
@ -97,7 +97,7 @@ class ZoneSocket extends CloudflareSocket
|
|||||||
'name' => $domain,
|
'name' => $domain,
|
||||||
'jump_start' => $jump_start,
|
'jump_start' => $jump_start,
|
||||||
];
|
];
|
||||||
$cf = $this->post('zones/', $datas);
|
$cf = $this->getMySocket()->post('zones/', $datas);
|
||||||
$cf = json_decode($cf->getBody());
|
$cf = json_decode($cf->getBody());
|
||||||
if (!$cf->success) {
|
if (!$cf->success) {
|
||||||
$message = "Zone:" . __FUNCTION__ . "에서 실패:\nrequest:" . var_export($datas, true) . "\nresponse:" . var_export($cf, true);
|
$message = "Zone:" . __FUNCTION__ . "에서 실패:\nrequest:" . var_export($datas, true) . "\nresponse:" . var_export($cf, true);
|
||||||
@ -128,7 +128,7 @@ class ZoneSocket extends CloudflareSocket
|
|||||||
}
|
}
|
||||||
public function delete(ZoneEntity $entity): void
|
public function delete(ZoneEntity $entity): void
|
||||||
{
|
{
|
||||||
$cf = $this->delete("zones/{$entity->getPK()}");
|
$cf = $this->getMySocket()->delete("zones/{$entity->getPK()}");
|
||||||
$cf = json_decode($cf->getBody());
|
$cf = json_decode($cf->getBody());
|
||||||
if (!$cf->success) {
|
if (!$cf->success) {
|
||||||
$message = "Zone:" . __FUNCTION__ . "에서 실패:\nresponse:" . var_export($cf, true);
|
$message = "Zone:" . __FUNCTION__ . "에서 실패:\nresponse:" . var_export($cf, true);
|
||||||
@ -141,7 +141,7 @@ class ZoneSocket extends CloudflareSocket
|
|||||||
}
|
}
|
||||||
public function sync(ZoneEntity $entity): void
|
public function sync(ZoneEntity $entity): void
|
||||||
{
|
{
|
||||||
$cf = $this->get("zones/{$entity->getPK()}");
|
$cf = $this->getMySocket()->get("zones/{$entity->getPK()}");
|
||||||
$cf = json_decode($cf->getBody());
|
$cf = json_decode($cf->getBody());
|
||||||
if (!$cf->success) {
|
if (!$cf->success) {
|
||||||
$message = "Zone:" . __FUNCTION__ . "에서 실패:\nresponse:" . var_export($cf, true);
|
$message = "Zone:" . __FUNCTION__ . "에서 실패:\nresponse:" . var_export($cf, true);
|
||||||
@ -155,24 +155,23 @@ class ZoneSocket extends CloudflareSocket
|
|||||||
$this->getModel()->modify($entity, $formDatas);
|
$this->getModel()->modify($entity, $formDatas);
|
||||||
}
|
}
|
||||||
//Reload
|
//Reload
|
||||||
public function reload(): void
|
public function reload(): array
|
||||||
{
|
{
|
||||||
log_message("notice", "-----{$this->_account_entity->getTitle()} 처리 시작-----");
|
log_message("notice", "-----{$this->_account_entity->getTitle()} 처리 시작-----");
|
||||||
$entity_uids = [];
|
$entitys = [];
|
||||||
$results = $this->reload_procedure('zones');
|
foreach ($this->reload_procedure('zones') as $result) {
|
||||||
//DB수정
|
|
||||||
foreach ($results as $result) {
|
|
||||||
$formDatas = $this->getArrayByResult($result);
|
$formDatas = $this->getArrayByResult($result);
|
||||||
$entity = $this->getModel()->modify($this->getModel()->getEntity(), $formDatas);
|
$entity = $this->getModel()->modify($this->getModel()->getEntity(), $formDatas);
|
||||||
//추가 셋팅용
|
//추가 셋팅용
|
||||||
$formDatas = $this->getCFSetting($entity);
|
$formDatas = $this->getCFSetting($entity);
|
||||||
$entity = $this->getModel()->modify($entity, $formDatas);
|
$entity = $this->getModel()->modify($entity, $formDatas);
|
||||||
$entity_uids[] = $entity->getPK();
|
$entitys[$entity->getPK()] = $entity;
|
||||||
}
|
}
|
||||||
//부모키를 기준으로 CF에 존재하지 않는 데이터 삭제용
|
//부모키를 기준으로 CF에 존재하지 않는 데이터 삭제용
|
||||||
$this->getModel()->where(ZoneModel::PARENT, $this->_account_entity);
|
$this->getModel()->where(ZoneModel::PARENT, $this->_account_entity);
|
||||||
$this->getModel()->whereNotIn(ZoneModel::PK, $entity_uids);
|
$this->getModel()->whereNotIn(ZoneModel::PK, array_keys($entitys));
|
||||||
$this->getModel()->delete();
|
$this->getModel()->delete();
|
||||||
log_message("notice", "-----{$this->_account_entity->getTitle()} 처리[" . count($results) . "개] 완료-----");
|
log_message("notice", "-----{$this->_account_entity->getTitle()} 처리[" . count($entitys) . "개] 완료-----");
|
||||||
|
return $entitys;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3,35 +3,28 @@
|
|||||||
namespace App\Libraries\MySocket;
|
namespace App\Libraries\MySocket;
|
||||||
|
|
||||||
use Psr\Http\Message\ResponseInterface;
|
use Psr\Http\Message\ResponseInterface;
|
||||||
use App\Models\Cloudflare\AuthModel;
|
|
||||||
use App\Models\Cloudflare\AccountModel;
|
|
||||||
use App\Entities\Cloudflare\AuthEntity;
|
use App\Entities\Cloudflare\AuthEntity;
|
||||||
|
|
||||||
abstract class CloudflareSocket extends MySocket
|
class CloudflareSocket extends MySocket
|
||||||
{
|
{
|
||||||
private static int $_request = 0;
|
private static int $_request = 0;
|
||||||
private static int $_request_max = 1000;
|
private static int $_request_max = 1000;
|
||||||
private static int $_request_perpage_max = 700;
|
public static int $_request_perpage_max = 700;
|
||||||
private static int $_request_timewait = 60;
|
private static int $_request_timewait = 60;
|
||||||
private $_authModel = null;
|
public function __construct(AuthEntity $auth_entity)
|
||||||
private $_accountModel = null;
|
|
||||||
private $_auth_entity = null;
|
|
||||||
protected function __construct(AuthEntity $auth_entity)
|
|
||||||
{
|
{
|
||||||
parent::__construct([
|
parent::__construct([
|
||||||
'base_uri' => 'https://api.cloudflare.com/client/v4/',
|
'base_uri' => 'https://api.cloudflare.com/client/v4/',
|
||||||
'headers' => [
|
'headers' => [
|
||||||
'X-Auth-Email' => $this->_auth_entity->getID(), // 인증 토큰 사용
|
'X-Auth-Email' => $auth_entity->getID(), // 인증 토큰 사용
|
||||||
'X-Auth-Key' => $this->_auth_entity->getAuthKey(), // 인증 토큰 사용
|
'X-Auth-Key' => $auth_entity->getAuthKey(), // 인증 토큰 사용
|
||||||
'Content-Type' => 'application/json',
|
'Content-Type' => 'application/json',
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
$this->_auth_entity = $auth_entity;
|
|
||||||
self::$_request_max = getenv("cfmgr.request.max") ?: 1000;
|
self::$_request_max = getenv("cfmgr.request.max") ?: 1000;
|
||||||
self::$_request_perpage_max = getenv("cfmgr.request.perpage.max") ?: 700;
|
self::$_request_perpage_max = getenv("cfmgr.request.perpage.max") ?: 700;
|
||||||
self::$_request_timewait = getenv("cfmgr.request.timewait") ?: 60;
|
self::$_request_timewait = getenv("cfmgr.request.timewait") ?: 60;
|
||||||
}
|
}
|
||||||
abstract protected function getArrayByResult($result, array $formDatas = []): array;
|
|
||||||
|
|
||||||
final public function request(string $method, $uri = '', array $options = []): ResponseInterface
|
final public function request(string $method, $uri = '', array $options = []): ResponseInterface
|
||||||
{
|
{
|
||||||
@ -44,43 +37,4 @@ abstract class CloudflareSocket extends MySocket
|
|||||||
self::$_request++;
|
self::$_request++;
|
||||||
return parent::request($method, $uri, $options);
|
return parent::request($method, $uri, $options);
|
||||||
}
|
}
|
||||||
final protected function getAuthModel(): AuthModel
|
|
||||||
{
|
|
||||||
if ($this->_authModel === null) {
|
|
||||||
$this->_authModel = new AuthModel();
|
|
||||||
}
|
|
||||||
return $this->_authModel;
|
|
||||||
}
|
|
||||||
final protected function getAccountModel(): AccountModel
|
|
||||||
{
|
|
||||||
if ($this->_accountModel === null) {
|
|
||||||
$this->_accountModel = new AccountModel();
|
|
||||||
}
|
|
||||||
return $this->_accountModel;
|
|
||||||
}
|
|
||||||
final protected function reload_procedure($uri): array
|
|
||||||
{
|
|
||||||
$page = 1; //1부터 시작
|
|
||||||
$results = [];
|
|
||||||
do {
|
|
||||||
$query = [
|
|
||||||
'page' => $page,
|
|
||||||
'per_page' => self::$_request_perpage_max,
|
|
||||||
'match' => 'all',
|
|
||||||
];
|
|
||||||
$response = $this->getClient()->get($uri, $query);
|
|
||||||
$cf = json_decode($response->getBody());
|
|
||||||
if (!$cf->success) {
|
|
||||||
$message = __FUNCTION__ . "에서 실패:\nresponse:" . var_export($cf, true);
|
|
||||||
log_message("error", $message);
|
|
||||||
throw new \Exception($message);
|
|
||||||
}
|
|
||||||
$results = array_merge($results, $cf->result);
|
|
||||||
if (count($cf->result) < self::$_request_perpage_max) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
$page++;
|
|
||||||
} while (true);
|
|
||||||
return $results;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user