diff --git a/app/Controllers/Front/UserController.php b/app/Controllers/Front/UserController.php index 3a49a34..a1ad25c 100644 --- a/app/Controllers/Front/UserController.php +++ b/app/Controllers/Front/UserController.php @@ -116,7 +116,8 @@ class UserController extends FrontController { try { //각 Adapter별 인층체크 후 Session에 인증정보 설정 - $this->getAdapter($site)->signup($this->request->getVar()); + $this->getAdapter($site)->setFormDatas($this->request->getVar()); + $this->getAdapter($site)->execute(); return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL']) ?: "/"); } catch (\Exception $e) { $this->_session->setFlashdata('return_message', $e->getMessage()); diff --git a/app/Libraries/Adapter/API/API.php b/app/Libraries/Adapter/API/API.php index 0481f03..bec3c38 100644 --- a/app/Libraries/Adapter/API/API.php +++ b/app/Libraries/Adapter/API/API.php @@ -2,19 +2,59 @@ namespace App\Libraries\Adapter\API; +use App\Libraries\Adapter\Adapter; + // 참고:https://github.com/SyntaxPhoenix/iloclient -abstract class API +abstract class API extends Adapter { - protected $_client = null; + private $_url = null; + private $_method = "GET"; + private $_datas = array(); + private $_headers = array('Content-Type: application/json; charset=utf-8'); + protected $_channel = null; protected $_serverInfo = array(); protected $_accountInfo = array(); protected $_debug = false; protected function __construct($debug = false) { - $this->_debug = $debug; + parent::__construct($debug); } - abstract protected function getClient(); - abstract protected function requestURL(string $url, string $method, array $datas = []): object; + abstract protected function getChannel(); + abstract protected function execute_process(): object; + + final public function setURL(string $url) + { + $this->_url = $url; + } + final public function getURL(): string + { + return $this->_url; + } + final public function setMethod(string $method) + { + $this->_method = $method; + } + final public function getMethod(): string + { + return $this->_method; + } + final public function setDatas(array $datas) + { + $this->_datas = $datas; + } + final public function getDatas(): array + { + return $this->_datas; + } + final public function setHeader($key, $value, $delimiter = ":") + { + array_push($this->_headers, "{$key}{$delimiter} {$value}"); + } + final public function getHeaders(): array + { + return $this->_headers; + } + final public function setServerInfo($ip, $port) { $this->_serverInfo['ip'] = $ip; @@ -35,12 +75,8 @@ abstract class API return array($this->_serverInfo['id'], $this->_serverInfo['password'], $authType); } - final public function get(string $url): object + final public function execute(): object { - return $this->requestURL($url, 'GET'); - } - final public function post(string $url, array $datas): object - { - return $this->requestURL($url, 'POST', $datas); + return $this->execute_process(); } } diff --git a/app/Libraries/Adapter/API/CurlAPI.php b/app/Libraries/Adapter/API/CurlAPI.php index 07cde11..69b86e9 100644 --- a/app/Libraries/Adapter/API/CurlAPI.php +++ b/app/Libraries/Adapter/API/CurlAPI.php @@ -7,30 +7,21 @@ namespace App\Libraries\Adapter\API; // https://github.com/SyntaxPhoenix/iloclient class CurlAPI extends API { - private $_headers = array('Content-Type: application/json; charset=utf-8'); public function __construct($debug = false) { parent::__construct($debug); } - public function setHeader($key, $value, $delimiter = ":") - { - array_push($this->_headers, "{$key}{$delimiter} {$value}"); - } - public function getHeaders(): array - { - return $this->_headers; - } - private function debugging($response, array $datas = array()) + private function debugging($response) { if (!$this->_debug) { return false; } if ($response === false) { - log_message('error', curl_error($this->getClient())); + log_message('error', curl_error($this->getChannel())); } - $info = curl_getinfo($this->getClient()); + $info = curl_getinfo($this->getChannel()); log_message('debug', var_export($info, true)); - log_message('debug', var_export($datas, true)); + log_message('debug', var_export($this->getDatas(), true)); log_message('debug', "{$info['total_time']}초, url:{$info['url']}, return:{$info['http_code']}"); switch ($info['http_code']) { case 100: @@ -161,55 +152,55 @@ class CurlAPI extends API break; } } - protected function getClient() + protected function getChannel() { - if (is_null($this->_client)) { - $this->_client = curl_init(); + if (is_null($this->_channel)) { + $this->_channel = curl_init(); } - return $this->_client; + return $this->_channel; } public function setSSLVerifay() { //SSL 확인여부용 - curl_setopt($this->getClient(), CURLOPT_SSL_VERIFYPEER, API['SSL_VERIFY']); - curl_setopt($this->getClient(), CURLOPT_SSL_VERIFYHOST, API['SSL_VERIFY']); + curl_setopt($this->getChannel(), CURLOPT_SSL_VERIFYPEER, API['SSL_VERIFY']); + curl_setopt($this->getChannel(), CURLOPT_SSL_VERIFYHOST, API['SSL_VERIFY']); } public function setCookie() { //cookie값 전달용 - foreach (curl_getinfo($this->getClient(), CURLINFO_COOKIELIST) as $cookie_line) { - curl_setopt($this->getClient(), CURLOPT_COOKIELIST, $cookie_line); + foreach (curl_getinfo($this->getChannel(), CURLINFO_COOKIELIST) as $cookie_line) { + curl_setopt($this->getChannel(), CURLOPT_COOKIELIST, $cookie_line); } } public function setAUthentication() { //접속인증 정보값 전달용 - curl_setopt($this->getClient(), CURLOPT_HTTPAUTH, CURLAUTH_BASIC); - curl_setopt($this->getClient(), CURLOPT_USERPWD, implode(":", $this->getAccountInfo())); + curl_setopt($this->getChannel(), CURLOPT_HTTPAUTH, CURLAUTH_BASIC); + curl_setopt($this->getChannel(), CURLOPT_USERPWD, implode(":", $this->getAccountInfo())); } - public function requestURL(string $url, string $method, array $datas = []): object + protected function execute_process(): object { - curl_setopt($this->getClient(), CURLOPT_URL, $this->getServerInfo() . $url); - switch ($method) { + curl_setopt($this->getChannel(), CURLOPT_URL, $this->getServerInfo() . $this->getURL()); + switch ($this->getMethod()) { case 'POST': - curl_setopt($this->getClient(), CURLOPT_POST, TRUE); - curl_setopt($this->getClient(), CURLOPT_CUSTOMREQUEST, 'PATCH'); + curl_setopt($this->getChannel(), CURLOPT_POST, TRUE); + curl_setopt($this->getChannel(), CURLOPT_CUSTOMREQUEST, 'PATCH'); //cookie값 파일저장용 - curl_setopt($this->getClient(), CURLOPT_COOKIEJAR, API['COOKIE_FILE']); - curl_setopt($this->getClient(), CURLOPT_COOKIEFILE, API['COOKIE_FILE']); + curl_setopt($this->getChannel(), CURLOPT_COOKIEJAR, API['COOKIE_FILE']); + curl_setopt($this->getChannel(), CURLOPT_COOKIEFILE, API['COOKIE_FILE']); break; default: - curl_setopt($this->getClient(), CURLOPT_POST, false); + curl_setopt($this->getChannel(), CURLOPT_POST, false); break; } - curl_setopt($this->getClient(), CURLOPT_POSTFIELDS, json_encode($datas, true)); - curl_setopt($this->getClient(), CURLOPT_RETURNTRANSFER, true); - curl_setopt($this->getClient(), CURLOPT_CONNECTTIMEOUT, 3); - curl_setopt($this->getClient(), CURLOPT_TIMEOUT, 20); - curl_setopt($this->getClient(), CURLOPT_HTTPHEADER, $this->getHeaders()); - $response = curl_exec($this->getClient()); + curl_setopt($this->getChannel(), CURLOPT_POSTFIELDS, json_encode($this->getDatas(), true)); + curl_setopt($this->getChannel(), CURLOPT_RETURNTRANSFER, true); + curl_setopt($this->getChannel(), CURLOPT_CONNECTTIMEOUT, 3); + curl_setopt($this->getChannel(), CURLOPT_TIMEOUT, 20); + curl_setopt($this->getChannel(), CURLOPT_HTTPHEADER, $this->getHeaders()); + $response = curl_exec($this->getChannel()); $this->debugging($response); - curl_close($this->getClient()); + curl_close($this->getChannel()); if (is_null($response)) { throw new \Exception("해당서버[{$this->getServerInfo()}]의 ILO접속 오류가 발생하였습니다."); } diff --git a/app/Libraries/Adapter/API/GuzzleAPI.php b/app/Libraries/Adapter/API/GuzzleAPI.php index 3592492..72fb597 100644 --- a/app/Libraries/Adapter/API/GuzzleAPI.php +++ b/app/Libraries/Adapter/API/GuzzleAPI.php @@ -27,9 +27,9 @@ class GuzzleAPI extends API } } - protected function getClient() //Guzzle이용시 + protected function getChannel() //Guzzle이용시 { - if (is_null($this->_client)) { + if (is_null($this->_channel)) { // 참조:https://docs.guzzlephp.org/en/stable/request-options.html // ex:)$options = [ 'base_uri' => 'http://www.foo.com/1.0/', 'timeout' => 0, 'allow_redirects' => false, 'proxy' => '192.168.16.1:10' ] $options = [ @@ -44,26 +44,26 @@ class GuzzleAPI extends API // 'track_redirects' => true, // ], ]; - $this->_client = new \GuzzleHttp\Client($options); + $this->_channel = new \GuzzleHttp\Client($options); } - return $this->_client; + return $this->_channel; } - protected function requestURL(string $url, string $method, array $datas = []): object + protected function execute_process(): object { try { $options = array(); if ($this->_debug) { $options['debug'] = fopen('php://stderr', 'w'); //or true } - switch ($method) { + switch ($this->getMethod()) { case 'POST': - $options['json'] = $datas; + $options['json'] = $this->getDatas(); break; case 'HEAD': break; } - $response = $this->getClient()->request($method, $url, $options); + $response = $this->getChannel()->request($this->getMethod(), $this->getURL(), $options); if ($response->getStatusCode() != 200) { throw new \Exception(sprintf( "오류가 발생하였습니다.\n%s\n%s", @@ -71,7 +71,7 @@ class GuzzleAPI extends API $response->getBody() )); } - $this->setLocalCookie($url); + $this->setLocalCookie($this->getURL()); // echo $response->getHeaderLine('content-type'); // 'application/json; charset=utf8' // echo $response->getBody()=>'{"id": 1420053, "name": "guzzle", ...} return json_decode($response->getBody()->getContents()); diff --git a/app/Libraries/Adapter/API/LocalAdapter.php b/app/Libraries/Adapter/API/LocalAdapter.php index cb42fb1..c788146 100644 --- a/app/Libraries/Adapter/API/LocalAdapter.php +++ b/app/Libraries/Adapter/API/LocalAdapter.php @@ -9,9 +9,9 @@ class LocalAPI extends API parent::__construct($debug); } - protected function getClient() //Codeigniter4 Service의 curlrequest이용시 + protected function getChannel() //Codeigniter4 Service의 curlrequest이용시 { - if (is_null($this->_client)) { + if (is_null($this->_channel)) { // 참조:https://www.codeigniter.com/user_guide/libraries/curlrequest.html?highlight=curl# // ex:)$options = [ 'baseURI' => 'http://www.foo.com/1.0/', 'timeout' => 0, 'allow_redirects' => false, 'proxy' => '192.168.16.1:10' ] $options = [ @@ -23,21 +23,21 @@ class LocalAPI extends API if ($this->_debug) { $options['debug'] = API['DEBUG_FILE']; } - $this->_client = \Config\Services::curlrequest($options); + $this->_channel = \Config\Services::curlrequest($options); } - return $this->_client; + return $this->_channel; } - protected function requestURL(string $url, string $method, array $datas = []): object + protected function execute_process(): object { $options = array(); - switch ($method) { + switch ($this->getMethod()) { case 'POST': - $response = $this->getClient()->setBody($datas)->request($method, $url, $options); + $response = $this->getChannel()->setBody($this->getDatas())->request($this->getMethod(), $this->getURL(), $options); break; case 'HEAD': break; default: - $response = $this->getClient()->request($method, $url, $options); + $response = $this->getChannel()->request($this->getMethod(), $this->getURL(), $options); break; } dd($response); diff --git a/app/Libraries/Adapter/Adapter.php b/app/Libraries/Adapter/Adapter.php new file mode 100644 index 0000000..6f32ceb --- /dev/null +++ b/app/Libraries/Adapter/Adapter.php @@ -0,0 +1,15 @@ +_debug = $debug; + $this->_session = \Config\Services::session(); + } + abstract public function execute(); +} diff --git a/app/Libraries/Adapter/Auth/Auth.php b/app/Libraries/Adapter/Auth/Auth.php index 2302dfd..16c3778 100644 --- a/app/Libraries/Adapter/Auth/Auth.php +++ b/app/Libraries/Adapter/Auth/Auth.php @@ -5,20 +5,19 @@ namespace App\Libraries\Adapter\Auth; use App\Entities\UserEntity; use App\Models\UserModel; use App\Models\UserSNSModel; +use App\Libraries\Adapter\Adapter; // 참고:https://github.com/SyntaxPhoenix/iloclient -abstract class Auth +abstract class Auth extends Adapter { private $_site = null; private $_userModel = null; private $_userSNSModel = null; - protected $_debug = false; - protected $_session = null; + private $_formDatas = array(); protected function __construct(string $site, $debug = false) { + parent::__construct($debug); $this->_site = $site; - $this->_debug = $debug; - $this->_session = \Config\Services::session(); } final public function getSiteName(): string { @@ -28,7 +27,7 @@ abstract class Auth return ucfirst($this->_site); } abstract public function getAuthButton(); - abstract public function signup(array $formDatas): UserEntity; + abstract protected function execute_process(): UserEntity; final protected function getUserModel(): UserModel { @@ -46,7 +45,16 @@ abstract class Auth return $this->_userSNSModel; } - protected function signup_process(UserEntity $entity): void + final public function setFormDatas(array $formDatas) + { + $this->_formDatas = $formDatas; + } + final public function getFormDatas(): array + { + return $this->_formDatas; + } + + protected function setSession_process(UserEntity $entity): UserEntity { $this->_session->set(SESSION_NAMES['ISLOGIN'], true); $auths = []; @@ -64,5 +72,11 @@ abstract class Auth } } $this->_session->set(SESSION_NAMES['AUTH'], $auths); + return $entity; + } + + final public function execute(): UserEntity + { + return $this->execute_process(); } } diff --git a/app/Libraries/Adapter/Auth/GoogleAuth.php b/app/Libraries/Adapter/Auth/GoogleAuth.php index 8b0d29e..420329a 100644 --- a/app/Libraries/Adapter/Auth/GoogleAuth.php +++ b/app/Libraries/Adapter/Auth/GoogleAuth.php @@ -25,8 +25,9 @@ class GoogleAuth extends Auth return $this->_client; } - private function setAccessToken(array $formDatas) + private function setAccessToken() { + $formDatas = $this->getFormDatas(); //1. Google 로그인후 인증코드 확인 if (!isset($formDatas['code']) || !$formDatas['code']) { throw new \Exception($this->getSiteName() . " 인증 CallBack Code가 필요합니다."); @@ -57,11 +58,11 @@ class GoogleAuth extends Auth return $button; } - public function signup(array $formDatas): UserEntity + protected function execute_process(): UserEntity { try { //Google 접근 권한 설정. - $this->setAccessToken($formDatas); + $this->setAccessToken(); //Google 서비스 설정 $service = new \Google\Service\Oauth2($this->getClient()); $result = $service->userinfo->get(); @@ -122,8 +123,7 @@ class GoogleAuth extends Auth } //인증된 사용자 정보를 가져온후 로그인처리 $entity = $this->getUserModel()->getEntity($snsEntity->user_id); - $this->signup_process($entity); - return $entity; + return $this->setSession_process($entity);; } catch (\Exception $e) { throw new \Exception("관리자에게 문의하시기 바랍니다.
{$e->getMessage()}"); } diff --git a/app/Libraries/Adapter/Auth/LocalAuth.php b/app/Libraries/Adapter/Auth/LocalAuth.php index 9721453..9061201 100644 --- a/app/Libraries/Adapter/Auth/LocalAuth.php +++ b/app/Libraries/Adapter/Auth/LocalAuth.php @@ -16,8 +16,9 @@ class LocalAuth extends Auth return ""; } - public function signup(array $formDatas): UserEntity + protected function execute_process(): UserEntity { + $formDatas = $this->getFormDatas(); if (!isset($formDatas['id']) || !$formDatas['id'] || !isset($formDatas['passwd']) || !$formDatas['passwd']) { throw new \Exception("ID 나 암호의 값이 없습니다."); } @@ -26,7 +27,6 @@ class LocalAuth extends Auth throw new \Exception("암호가 맞지않습니다."); } //Session에 인증정보 설정 - $this->signup_process($entity); - return $entity; + return $this->setSession_process($entity);; } } diff --git a/app/Libraries/Adapter/Payment/CookiePayment.php b/app/Libraries/Adapter/Payment/CookiePayment.php index 85d1909..62c5d77 100644 --- a/app/Libraries/Adapter/Payment/CookiePayment.php +++ b/app/Libraries/Adapter/Payment/CookiePayment.php @@ -19,27 +19,26 @@ class CookiePayment extends Payment $adapter = new APIAdapter(); $adapter->setHeader("content-type", "application/json; charset=utf-8"); /* 토큰 발행 API */ - $token_url = getenv("payment.cookiepay.token_url") ?: "{TOKEN 발행 URL}"; - $token_request_data = array( + $adapter->setURL(getenv("payment.cookiepay.token_url") ?: "{TOKEN 발행 URL}"); + $adapter->setDatas(array( 'pay2_id' => 'cookiepayments에서 발급받은 ID', 'pay2_key' => 'cookiepayments에서 발급받은 연동키', - ); - $token = $adapter->requestURL($token_url, "GET", $token_request_data); + )); + $token = $adapter->execute(); /* 여기 까지 */ if ($token['RTN_CD'] != '0000') { throw new \Exception("Cookipay에서 Token을 받는데 실패했습니다."); } return $token; } - public function execute() + protected function execute_process(): object { $adapter = new APIAdapter(); $adapter->setHeader("content-type", "application/json; charset=utf-8"); $adapter->setHeader("ApiKey", getenv("payment.cookiepay.apikey") ?: "COOKIEPAY에서 발급받은 연동키"); $adapter->setHeader("TOKEN", $this->getToken()); - - $cookiepayments_url = getenv("payment.cookiepay.url") ?: "{요청도메인}/keyin/payment"; - $request_data_array = array( + $adapter->setURL(getenv("payment.cookiepay.url") ?: "{요청도메인}/keyin/payment"); + $adapter->setDatas(array( 'API_ID' => 'COOKIEPAY에서 발급받은 가맹점연동 ID', 'ORDERNO' => '주문번호', 'PRODUCTNAME' => '상품명', @@ -58,7 +57,7 @@ class CookiePayment extends Payment 'ETC3' => '추가필드 3', 'ETC4' => '추가필드 4', 'ETC5' => '추가필드 5', - ); - return $adapter->requestURL($cookiepayments_url, "GET", $request_data_array); + )); + return $adapter->execute(); } } diff --git a/app/Libraries/Adapter/Payment/Payment.php b/app/Libraries/Adapter/Payment/Payment.php index 6d2fdd2..e0062b7 100644 --- a/app/Libraries/Adapter/Payment/Payment.php +++ b/app/Libraries/Adapter/Payment/Payment.php @@ -2,12 +2,17 @@ namespace App\Libraries\Adapter\Payment; -abstract class Payment +use App\Libraries\Adapter\Adapter; + +abstract class Payment extends Adapter { - protected $_debug = false; protected function __construct($debug = false) { - $this->_debug = $debug; + parent::__construct($debug); + } + abstract protected function execute_process(): object; + final public function execute(): object + { + return $this->execute_process(); } - abstract public function execute(); }