82 lines
2.2 KiB
PHP
82 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Libraries\MySocket;
|
|
|
|
use App\Libraries\CommonLibrary;
|
|
use App\Models\Cloudflare\AccountModel;
|
|
use Cloudflare\API\Auth\APIKey;
|
|
use Cloudflare\API\Adapter\Guzzle;
|
|
use Cloudflare\API\Endpoints\Zones;
|
|
use Cloudflare\API\Endpoints\Accounts;
|
|
use Cloudflare\API\Endpoints\DNS;
|
|
|
|
class CloudflareSocket extends CommonLibrary
|
|
{
|
|
private static int $_request = 0;
|
|
private static int $_request_max = 100;
|
|
private static int $_request_timewait = 60;
|
|
private $_accountModel = null;
|
|
private $_clients = [];
|
|
protected $_apikey = "";
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->initAdapters();
|
|
self::$_request_max = getenv("cfmgr.request.max");
|
|
}
|
|
final public function getAPIKey(): string
|
|
{
|
|
if ($this->_apikey == "") {
|
|
throw new \Exception("APIKey가 정의되지 않았습니다.");
|
|
}
|
|
return $this->_apikey;
|
|
}
|
|
final public function setAPIKey(string $apikey): void
|
|
{
|
|
$this->_apikey = $apikey;
|
|
}
|
|
final protected function getAccountModel(): AccountModel
|
|
{
|
|
if ($this->_accountModel === null) {
|
|
$this->_accountModel = new AccountModel();
|
|
}
|
|
return $this->_accountModel;
|
|
}
|
|
final public function initAdapters(): void
|
|
{
|
|
foreach ($this->getAccountModel()->getEntitys() as $entity) {
|
|
$this->_clients[$entity->getAPIKey()] = new Guzzle(
|
|
new APIKey($entity->getTitle(), $entity->getAPIKey())
|
|
);
|
|
}
|
|
}
|
|
|
|
private function getAdapter(): Guzzle
|
|
{
|
|
if (!array_key_exists($this->getAPIKey(), $this->_clients)) {
|
|
throw new \Exception(+__FUNCTION__ . " => {$this->getAPIKey()}에 해당하는 Adapter를 찾을수 없습니다.");
|
|
}
|
|
if (self::$_request >= self::$_request_max) {
|
|
log_message('warning', sprintf("--Cloudflare API Call %s초 대기 시작--", self::$_request_timewait));
|
|
sleep(intval(getenv("cf.mgr.request.time.wait")));
|
|
self::$_request = 0;
|
|
log_message('warning', sprintf("--Cloudflare API Call %s초 대기 종료--", self::$_request_timewait));
|
|
}
|
|
self::$_request++;
|
|
return $this->_clients[$this->getAPIKey()];
|
|
}
|
|
|
|
public function getAccount(): Accounts
|
|
{
|
|
return new Accounts($this->getAdapter());
|
|
}
|
|
public function getZone(): Zones
|
|
{
|
|
return new Zones($this->getAdapter());
|
|
}
|
|
public function getRecord(): DNS
|
|
{
|
|
return new DNS($this->getAdapter());
|
|
}
|
|
}
|