cfmgrv4 init...3

This commit is contained in:
최준흠 2024-10-22 11:22:42 +09:00
parent add1cb4b64
commit 7ee90f79f9
14 changed files with 224 additions and 24 deletions

View File

@ -11,20 +11,31 @@ $routes->addPlaceholder('uuid', '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}
//authFilter는 추가적인 작업이 필요 //authFilter는 추가적인 작업이 필요
//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->group('cli', ['namespace' => 'App\Controllers\CLI'], function ($routes) {
$routes->group('cloudflare', function ($routes) {
$routes->cli('reload', 'Cloudflare::reload');
$routes->cli('reload/(:num)', 'Cloudflare::reload/$1');
});
});
$routes->get('/', 'Home::index'); $routes->get('/', 'Home::index');
$routes->group('/RSSFeed', function ($routes) { $routes->group('/RSSFeed', function ($routes) {
$routes->get('getITWorld', 'RSSFeedController::getITWorld'); $routes->get('getITWorld', 'RSSFeedController::getITWorld');
}); });
$routes->group('/user', function ($routes) { $routes->group('/user', function ($routes) {
$routes->get('login', 'UserController::login_form'); $routes->get('login', 'AuthController::login_form');
$routes->post('login', 'UserController::login'); $routes->post('login', 'AuthController::login');
$routes->get('google_login', 'UserController::google_login'); $routes->get('google_login', 'AuthController::google_login');
$routes->get('logout', 'UserController::logout'); $routes->get('logout', 'AuthController::logout');
}); });
$routes->group('cli', ['namespace' => 'App\Controllers\CLI'], function ($routes) { $routes->group('/cloudflare', ['namespace' => 'App\Controllers\Cloudflare'], function ($routes) {
$routes->group('cloudflare', function ($routes) { $routes->group('zone', function ($routes) {
$routes->cli('reload', 'Cloudflare::reload'); $routes->post('trigger/(:alphanum)', 'ZoneController::trigger/$1');
$routes->cli('reload/(:num)', 'Cloudflare::reload/$1'); });
$routes->group('record', function ($routes) {
$routes->post('trigger/(:alphanum)', 'RecordController::trigger/$1');
});
$routes->group('firewall', function ($routes) {
$routes->post('trigger/(:alphanum)', 'FirewallController::trigger/$1');
}); });
}); });
$routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:manager'], function ($routes) { $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:manager'], function ($routes) {

View File

@ -2,9 +2,10 @@
namespace App\Controllers\Admin\Cloudflare; namespace App\Controllers\Admin\Cloudflare;
use App\Controllers\CloudflareController;
use App\Helpers\Cloudflare\AccountHelper; use App\Helpers\Cloudflare\AccountHelper;
use App\Services\Cloudflare\Account;
use App\Models\Cloudflare\AccountModel; use App\Models\Cloudflare\AccountModel;
use App\Services\Cloudflare\Account;
use CodeIgniter\HTTP\DownloadResponse; use CodeIgniter\HTTP\DownloadResponse;
use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\RequestInterface;

View File

@ -2,6 +2,7 @@
namespace App\Controllers\Admin\Cloudflare; namespace App\Controllers\Admin\Cloudflare;
use App\Controllers\CloudflareController;
use App\Helpers\Cloudflare\AuthHelper; use App\Helpers\Cloudflare\AuthHelper;
use App\Models\Cloudflare\AuthModel; use App\Models\Cloudflare\AuthModel;
use CodeIgniter\HTTP\DownloadResponse; use CodeIgniter\HTTP\DownloadResponse;

View File

@ -2,10 +2,11 @@
namespace App\Controllers\Admin\Cloudflare; namespace App\Controllers\Admin\Cloudflare;
use App\Controllers\CloudflareController;
use App\Helpers\Cloudflare\FirewallHelper; use App\Helpers\Cloudflare\FirewallHelper;
use App\Services\Cloudflare\Firewall;
use App\Models\Cloudflare\FirewallModel; use App\Models\Cloudflare\FirewallModel;
use App\Models\Cloudflare\ZoneModel; use App\Models\Cloudflare\ZoneModel;
use App\Services\Cloudflare\Firewall;
use CodeIgniter\HTTP\DownloadResponse; use CodeIgniter\HTTP\DownloadResponse;
use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\RequestInterface;

View File

@ -2,10 +2,11 @@
namespace App\Controllers\Admin\Cloudflare; namespace App\Controllers\Admin\Cloudflare;
use App\Controllers\CloudflareController;
use App\Helpers\Cloudflare\RecordHelper; use App\Helpers\Cloudflare\RecordHelper;
use App\Services\Cloudflare\Record;
use App\Models\Cloudflare\RecordModel; use App\Models\Cloudflare\RecordModel;
use App\Models\Cloudflare\ZoneModel; use App\Models\Cloudflare\ZoneModel;
use App\Services\Cloudflare\Record;
use CodeIgniter\HTTP\DownloadResponse; use CodeIgniter\HTTP\DownloadResponse;
use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\RequestInterface;

View File

@ -2,11 +2,12 @@
namespace App\Controllers\Admin\Cloudflare; namespace App\Controllers\Admin\Cloudflare;
use App\Controllers\CloudflareController;
use App\Helpers\Cloudflare\ZoneHelper; use App\Helpers\Cloudflare\ZoneHelper;
use App\Services\Cloudflare\Zone;
use App\Services\Cloudflare\Record;
use App\Models\Cloudflare\AccountModel; use App\Models\Cloudflare\AccountModel;
use App\Models\Cloudflare\ZoneModel; use App\Models\Cloudflare\ZoneModel;
use App\Services\Cloudflare\Record;
use App\Services\Cloudflare\Zone;
use CodeIgniter\HTTP\DownloadResponse; use CodeIgniter\HTTP\DownloadResponse;
use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\RequestInterface;

View File

@ -2,18 +2,18 @@
namespace App\Controllers; namespace App\Controllers;
use App\Helpers\UserHelper;
use App\Libraries\MyAuth\GoogleAuth;
use App\Libraries\MyAuth\LocalAuth;
use App\Libraries\MySocket\GoogleSocket\API as GoogleSocket; use App\Libraries\MySocket\GoogleSocket\API as GoogleSocket;
use App\Models\UserModel;
use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
class UserController extends FrontController use App\Models\UserModel;
use App\Helpers\UserHelper;
use App\Libraries\MyAuth\GoogleAuth;
use App\Libraries\MyAuth\LocalAuth;
class AuthController extends MVController
{ {
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{ {

View File

@ -0,0 +1,55 @@
<?php
namespace App\Controllers\Admin\Cloudflare;
use App\Controllers\CloudflareController;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
use App\Models\Cloudflare\FirewallModel;
use App\Services\Cloudflare\Firewall;
class FirewallController extends CloudflareController
{
private $_zone_entity = null;
private $_myLibrays = [];
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
$this->class_name .= "Firewall";
$this->class_path .= $this->class_name;
$this->title = lang("{$this->class_path}.title");
}
final protected function getModel(): FirewallModel
{
if ($this->model === null) {
$this->model = new FirewallModel();
}
return $this->model;
}
final protected function getMyLibrary(): Firewall
{
if (!isset($this->_myLibrays[$this->_zone_entity->getPK()])) {
$this->_myLibrays[$this->_zone_entity->getPK()] = new Firewall($this->_zone_entity);
}
return $this->_myLibrays[$this->_zone_entity->getPK()];
}
//Trigger작업
protected function trigger_process(mixed $uid): void
{
// //자신정보정의
// $this->entity = $this->getModel()->getEntityByPK($uid);
// if ($this->entity === null) {
// throw new \Exception("{$uid} 정보를 찾을수 없습니다.");
// }
// //부모데이터정의
// $this->_zone_entity = $this->getZoneModel()->getEntityByPK($this->entity->getParent());
// //Socket처리
// $this->entity = $this->getMyLibrary()->sync($this->entity);
log_message("notice", message: "Firewall Trigger 작업완료");
}
public function trigger(mixed $uid): ResponseInterface
{
return $this->trigger_procedure($uid);
}
}

View File

@ -0,0 +1,55 @@
<?php
namespace App\Controllers\Admin\Cloudflare;
use App\Controllers\CloudflareController;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
use App\Models\Cloudflare\RecordModel;
use App\Services\Cloudflare\Record;
class RecordController extends CloudflareController
{
private $_zone_entity = null;
private $_myLibrays = [];
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
$this->class_name .= "Record";
$this->class_path .= $this->class_name;
$this->title = lang("{$this->class_path}.title");
}
final protected function getModel(): RecordModel
{
if ($this->model === null) {
$this->model = new RecordModel();
}
return $this->model;
}
final protected function getMyLibrary(): Record
{
if (!isset($this->_myLibrays[$this->_zone_entity->getPK()])) {
$this->_myLibrays[$this->_zone_entity->getPK()] = new Record($this->_zone_entity);
}
return $this->_myLibrays[$this->_zone_entity->getPK()];
}
//Trigger작업
protected function trigger_process(mixed $uid): void
{
// //자신정보정의
// $this->entity = $this->getModel()->getEntityByPK($uid);
// if ($this->entity === null) {
// throw new \Exception("{$uid} 정보를 찾을수 없습니다.");
// }
// //부모데이터정의
// $this->_zone_entity = $this->getZoneModel()->getEntityByPK($this->entity->getParent());
// //Socket처리
// $this->entity = $this->getMyLibrary()->sync($this->entity);
log_message("notice", "Record Trigger 작업완료");
}
public function trigger(mixed $uid): ResponseInterface
{
return $this->trigger_procedure($uid);
}
}

View File

@ -0,0 +1,55 @@
<?php
namespace App\Controllers\Admin\Cloudflare;
use App\Controllers\CloudflareController;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
use App\Models\Cloudflare\ZoneModel;
use App\Services\Cloudflare\Zone;
class ZoneController extends CloudflareController
{
private $_account_entity = null;
private $_myLibrays = [];
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
$this->class_name .= "Zone";
$this->class_path .= $this->class_name;
$this->title = lang("{$this->class_path}.title");
}
final protected function getModel(): ZoneModel
{
if ($this->model === null) {
$this->model = new ZoneModel();
}
return $this->model;
}
final protected function getMyLibrary(): Zone
{
if (!isset($this->_myLibrays[$this->_account_entity->getPK()])) {
$this->_myLibrays[$this->_account_entity->getPK()] = new Zone($this->_account_entity);
}
return $this->_myLibrays[$this->_account_entity->getPK()];
}
//Trigger작업
protected function trigger_process(mixed $uid): void
{
// //자신정보정의
// $this->entity = $this->getModel()->getEntityByPK($uid);
// if ($this->entity === null) {
// throw new \Exception("{$uid} 정보를 찾을수 없습니다.");
// }
// //부모데이터정의
// $this->_account_entity = $this->getAccountModel()->getEntityByPK($this->entity->getParent());
// //Socket처리
// $this->entity = $this->getMyLibrary()->sync($this->entity);
log_message("notice", "Zone Trigger 작업완료");
}
public function trigger(mixed $uid): ResponseInterface
{
return $this->trigger_procedure($uid);
}
}

View File

@ -1,8 +1,7 @@
<?php <?php
namespace App\Controllers\Admin\Cloudflare; namespace App\Controllers;
use App\Controllers\Admin\AdminController;
use App\Models\Cloudflare\AccountModel; use App\Models\Cloudflare\AccountModel;
use App\Models\Cloudflare\AuthModel; use App\Models\Cloudflare\AuthModel;
use App\Models\Cloudflare\RecordModel; use App\Models\Cloudflare\RecordModel;
@ -12,7 +11,7 @@ use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
abstract class CloudflareController extends AdminController abstract class CloudflareController extends MVController
{ {
private $_authModel = null; private $_authModel = null;
private $_accountModel = null; private $_accountModel = null;
@ -91,4 +90,24 @@ abstract class CloudflareController extends AdminController
return redirect()->back()->with('error', __FUNCTION__ . " 실패하였습니다.\n" . $e->getMessage()); return redirect()->back()->with('error', __FUNCTION__ . " 실패하였습니다.\n" . $e->getMessage());
} }
} }
//Trigger
protected function trigger_process(mixed $uid): void {}
final protected function trigger_procedure(mixed $uid): ResponseInterface
{
//Transaction Start
$this->getModel()->transStart();
try {
// 여기에 필요한 로직을 구현하세요
$this->trigger_process($uid);
$this->message = "{$this->class_name}: Trigger 작업이 완료되었습니다.";
$this->getModel()->transCommit();
log_message("notice", __FUNCTION__ . $this->message);
return $this->response->setJSON(['status' => 200, $this->message], 200);
} catch (\Exception $e) {
//Transaction Rollback
$this->getModel()->transRollback();
log_message("error", $e->getMessage());
return $this->response->setJSON(['status' => 500, 'message' => $e->getMessage()], 500);
}
}
} }

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Controllers; namespace App\Controllers\Front;
use App\Controllers\MVController; use App\Controllers\MVController;
use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\RequestInterface;

View File

@ -4,7 +4,7 @@ namespace App\Controllers;
use CodeIgniter\Controller; use CodeIgniter\Controller;
class RSSFeedController extends Controller class RSSFeedController extends CommonController
{ {
public function getITWorld() public function getITWorld()
{ {