Automation init...4

This commit is contained in:
최준흠 2024-09-22 19:04:18 +09:00
parent 5a5bf6802a
commit b3f23cb4ea
15 changed files with 455 additions and 280 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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));
}
} }

View File

@ -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;
}
} }

View File

@ -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;
}
} }

View 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;
}
}

View File

@ -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) . "개] 완료-----");
}
} }

View File

@ -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
{ {

View File

@ -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;
} }

View File

@ -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
{ {

View File

@ -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
{ {

View File

@ -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">

View File

@ -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));
} // }
} }