Compare commits

..

1 Commits
master ... v1.3

Author SHA1 Message Date
77e47d5268
Update webpagetool.php 2019-05-13 19:16:16 +09:00
403 changed files with 7666 additions and 59911 deletions

View File

@ -1,11 +0,0 @@
cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
- family-names: "Go"
given-names: "Namhyeon"
orcid: "https://orcid.org/0009-0006-8421-0911"
title: "ReasonableFramework"
version: v1.6.8
doi: 10.5281/zenodo.11392417
date-released: 2024-05-30
url: "https://github.com/gnh1201/reasonableframework"

View File

@ -1,8 +0,0 @@
# These are supported funding model platforms
github: gnh1201
open_collective: welsonjs
liberapay: catswords
custom: ['https://www.buymeacoffee.com/catswords', 'https://toss.me/catswords']
patreon: catswords # Replace with a single Patreon username
ko_fi: catswords

141
KOREAN.MD
View File

@ -1,98 +1,55 @@
# 본 웹 어플리케이션에 대하여 ## 기반 소프트웨어
본 웹 어플리케이션은 ReasonableFramework 기반으로 작성됨. https://github.com/gnh1201/reasonableframework
본 웹 소프트웨어는 ReasonableFramework 기반으로 작성되었습니다.
https://github.com/gnh1201/reasonableframework
## 적재된 모듈 목록 ## 적재된 모듈 목록
* System: base (시스템 기반)
* System: config (시스템 설정)
* System: database (데이터베이스)
* System: logger (로그)
* System: uri (URI 및 URL 제어)
* System: security (보안)
* Helper: paginate (페이지 네비게이션)
* Helper: gnuboard, gnuboard.config, gnuboard.lib (그누보드 설정 및 라이브러리 연동)
* Helper: vworld (국토교통부 vworld 연동)
* Helper: wprest (워드프레스[wordpress] REST API 클라이언트)
* Hepler: webpagetool (Proxy 설정, UA 설정, JSON/DOM 파서를 지원하는 HTTP 클라이언트)
* Helper: noreporting, allreporting (오류 출력 범위를 설정)
* Helper: isemail.lnk (is_email 지원 -> /vendor/isemail)
* Helper: metaparser.lnk (HTML META 데이터 파싱 지원 -> /vendor/PHP-MetaParser)
* Helper: simple_html_dom (HTML DOM 처리기)
* Helper: oracle (오라클 데이터베이스 접속 및 쿼리)
* Helper: exectool (PHP 명령행 실행 지원)
* 그 외 다양한 사양 지원을 위한 모듈들
## 오픈소스 라이선스 * System: base (시스템 기반)
* 이 프로젝트는 LGPL 3.0 오픈소스 라이선스 하에 배포됨.
* System: config (시스템 설정)
* System: database (데이터베이스)
* System: logger (로그)
* System: uri (URI 및 URL 제어)
* System: security (보안)
* Helper: paginate (페이지 네비게이션)
* Helper: gnuboard, gnuboard.config, gnuboard.lib (그누보드 설정 및 라이브러리 연동)
* Helper: vworld (국토교통부 vworld 연동)
* Helper: wprest (워드프레스[wordpress] REST API 클라이언트)
* Hepler: webpagetool (Proxy 설정, UA 설정, JSON/DOM 파서를 지원하는 HTTP 클라이언트)
* Helper: noreporting, allreporting (오류 출력 범위를 설정)
* Helper: isemail.lnk (is_email 지원 -> /vendor/isemail)
* Helper: metaparser.lnk (HTML META 데이터 파싱 지원 -> /vendor/PHP-MetaParser)
* Helper: simple_html_dom (HTML DOM 처리기)
* Helper: oracle (오라클 데이터베이스 접속 및 쿼리)
* Helper: exectool (PHP 명령행 실행 지원)
## 기술지원
* Website: https://exts.kr/go/home
* E-mail: support@exts.kr
## 저작권
* LGPL (별도의 오픈소스 라이센스 문서에 기입 요망)
## 최근변경 ## 최근변경
* 2024-05-30
## 정적 파일 호스팅 관련 지침 (카페24 CDN 또는 Amazon S3) * 2018-07-22
본 지침은 버전 v1.6.8를 기준으로 한다.
### 정적 파일 호스팅 서비스의 예시
- 카페24 ([10G 광아우토반 FullSSD+](https://hosting.cafe24.com/?controller=new_product_page&page=autobahn) 웹 호스팅 상품 기준)
- Amazon S3
- Object Storage
### 카페24 정적 파일 호스팅 사용자
1. 카페24(cafe24.com) 관리자 페이지에 로그인하여, CDN/스트리밍 도메인 정보를 얻는다.
1. 메인 웹 사이트 로그인 -> `나의서비스관리` 클릭
2. 좌측 메뉴에서 `서비스 접속관리` -> `서비스 접속 정보` 클릭
3. CDN/스트리밍 정보 확인
```
*** CDN ***
CDN 하드 용량: 200M
CDN 트래픽 용량: 500M
FTP 주소: iup.cdn2.cafe24.com
FTP 포트: 21
FTP 아이디: [사용자 아이디]
*** 스트리밍 ***
스트리밍 하드 용량: 200M
스트리밍 트래픽 용량: 500M
FTP 주소: wm-004.cafe24.com
FTP 포트: 5565
FTP 아이디: [사용자 아이디]
```
4. CDN의 경우, `https://[사용자 아이디].cdn2.cafe24.com`(예시)가 접속 주소가 된다.
5. 스트리밍의 경우, `mms://wm-004.cafe24.com/[사용자 아이디]/abc.mp3`(예시)가 접속 주소가 된다.
2. ResonableFramework v1.6.8 설치 및 CDN/스트리밍 설정
1. [깃허브 저장소](https://github.com/gnh1201/reasonableframework) 접속 후 `Release` 탭을 누르고 `v1.6.8` 또는 최신 버전을 내려받는다.
2. `storage/config/uri.ini.php` 파일의 CDN/스트리밍 관련 부분을 아래와 같이 수정한다.
```
base_cdn_url = https://[사용자 아이디].cdn2.cafe24.com
base_vod_url = mms://wm-004.cafe24.com/[사용자 아이디]
```
3. `route` 폴더 밑에 `cdntest.php` 이름의 빈 파일을 만들고, 아래와 같이 입력 후 저장한다.
```
<?php
$data = array(
"imageurl" => get_cdn_link("/picture.jpg");
);
renderView("view_cdntest", $data);
```
4. `view` 폴더 밑에 `view_cdntest.php` 이름의 빈 파일을 만들고, 아래와 같이 입력 후 저장한다.
```
<img src="<?php echo $imageurl; ?>" alt="this is cdn test">
```
5. 사용하고 있는 웹 호스팅에 reasonableframework-master 폴더 아래의 모든 파일을 업로드한다.
6. 1번에서 얻은 FTP 정보를 이용하여, CDN 서버에 `picture.jpg` 이름으로 임의의 JPG 그림 파일을 업로드한다.
7. 웹 브라우저를 열고 `http://[웹 호스팅 주소]/?route=cdntest`에 접속하여 그림이 잘 뜨는지 확인한다.
### Amazon S3 또는 Object Storage 사용자
- 해당 정적 파일 호스팅 업체에서 제공하는 공통 링크를 확인한 뒤, 해당 링크를 `storage/config/uri.ini.php` 파일의 `base_cdn_url`에 반영한다.
## 기술지원 및 문의사항
- 웹사이트: https://catswords.social/@catswords_oss
- 이메일: abuse@catswords.net

108
README.md
View File

@ -1,18 +1,15 @@
# ReasonableFramework # ReasonableFramework
![License LGPLv3](https://img.shields.io/github/license/gnh1201/reasonableframework.svg) - ReasonableFramework is `RVHM` structured PHP Web Framework, Securely, Compatibility.
[![DOI](https://zenodo.org/badge/114566493.svg)](https://zenodo.org/doi/10.5281/zenodo.11392416) - Prefix code: `RSF` (ReasonableFramework)
- Old prefix code `VSPF` (Very Simple PHP Framework)
ReasonableFramework is RVHM structured PHP framework. aka, RSF, VSPF, C-2020-018490 ## Donate us (or if you need technical support)
- https://www.patreon.com/posts/25380536
## Specifications
- Various types of database connection drivers. e.g, PHP PDO, MySQLi, Legacy MySQL, MySQL over the shell, Oracle(OCI) ## Specification
- No OOP, Just `RVHM` structure - Database connection (via PDO, MySQLi (MySQL Improved), MySQL Tranditional, MySQL CLI, Oracle(OCI))
- R is Route. like as `controller` - RVHM Structure: `R` is Route (like as `controller`), `V` is View, `H` is Helper (like as `import` on Python/Go/NodeJS), `M` is Model and implemented with `KV bind`(like as `Map` data structure), Modal is optional.
- V is View - AppJail(WebApp Sandbox): You can use legacy apps without modifying the source code.
- H is Helper. like a `import` on Python, Go, NodeJS
- M is Model. it implemented with `KV bind`(like as `Map` data structure), Model is optional.
- Controllable shared variables: Minimize abuse of global variables. Inspired by the `scope` of AngularJS, and `SharedPreferences` of Android Framework
- CGI style compatibility prepared for industrial applications: This framework can utilize both the latest object-oriented style and the CGI style required in industrial applications.
## Compatible ## Compatible
- Tested in PHP 5.3.3 - Tested in PHP 5.3.3
@ -28,61 +25,46 @@ ReasonableFramework is RVHM structured PHP framework. aka, RSF, VSPF, C-2020-018
## Map of structure ## Map of structure
![Map of structure](https://github.com/gnh1201/reasonableframework/raw/master/assets/img/reasonableframework.jpg) ![Map of structure](https://github.com/gnh1201/reasonableframework/raw/master/assets/img/reasonableframework.jpg)
## Roadmap: Support legacy
- Support critical legacy web server (old: PHP 4.x ~ modern: 7.x)
- Support critical old browser (old: IE 6 ~ modern: IE 11)
- Do Clean & Modern PHP without hard studies.
## Contact me
- Go Namhyeon <gnh1201@gmail.com>
- Website: https://exts.kr/go/home
## Quick Start ## Quick Start
1. git clone https://github.com/gnh1201/reasonableframework.git 1. git clone https://github.com/gnh1201/reasonableframework.git
2. edit database configuration: `/storage/config/database.ini.php` 2. set up database configuration: `/storage/config/database.ini.php`
3. create new file: `/route/example.php` 3. touch(make new file): `/route/example.php`
4. go to `http://:base_url/?route=example` or `http://:base_url/example/`(if set `.htaccess`) in the web browser. 4. go to `http://[base_url]/?route=example` or `http://[base_url]/example/`(if set `.htaccess`) in your web browser.
5. code it. 5. enjoy it.
## Use cases ## Examples
- [Send severities from Zabbix to Grafana](https://gist.github.com/gnh1201/792964e9719d2f62157cf46e394888f5) - [REST API Integration (Naver Papago Translation REST API)](https://gist.github.com/gnh1201/081484e6f5e10bd3be819093ba5f49c8)
- [REST API Integration (Papago Translation REST API)](https://gist.github.com/gnh1201/081484e6f5e10bd3be819093ba5f49c8) - [Payment Gateway Integration (KCP)](https://github.com/gnh1201/reasonableframework/blob/master/route/orderpay.pgkcp.php)
- [Payment Gateway Integration](https://github.com/gnh1201/reasonableframework/blob/master/route/orderpay.pgkcp.php) - [Gnuboard CMS Integration (version 4, version 5)](https://github.com/gnh1201/reasonableframework/blob/master/route/api.gnuboard.php)
## Remote logging ## How to use CLI
- Remote logging feature based on [RFC3164(The BSD Syslog Protocol)](https://tools.ietf.org/html/rfc3164)
## Tested on free web hostings
| Provider | Pass? | Tested version | Note
| ---------------------- | ------ | -------------- | -------------------------- |
| [vultr.com](https://catswords.re.kr/go/vultr) (Vultr Holdings Co.) | :heavy_check_mark: Passed | v1.6.5.2 | Paid, Pre-configured LAMP server |
| cafe24.com (Cafe24 Inc.) | :heavy_check_mark: Passed | v1.6.2 | Paid |
| woobi.co.kr (MyCGI) | :heavy_check_mark: Passed | v1.6.2 | |
| dothome.co.kr (Anysecure Inc.) | :heavy_check_mark: Passed | v1.5 | |
| ivyro.net (Smileserv Inc.) | :heavy_check_mark: Passed | v1.5 | |
| 000webhost.com | :warning: Warn | v1.5 | Advertising logo |
| freewebhostingarea.com | :heavy_check_mark: Passed | v1.5 | |
| infinityfree.net | :warning: Warn | v1.5 | Anti-crawling |
| freehosting.io | :heavy_check_mark: Passed | v1.5 | |
| freehostingeu.com | :warning: Warn | v1.5 | CURL blocked |
| freehostingnoads.net | :warning: Warn | v1.5 | CURL blocked |
| awardspace.com | :warning: Warn | v1.5 | CURL blocked |
## How to use CLI (Command-line interface)
``` ```
$ php cli.php --route :route --session-id :session_id $ php cli.php --route [route name]
``` ```
## Comment about PSR standards ## 한국어(Korean)
Many people are saying that this project seems to be distant from the [PSR](https://www.php-fig.org/psr/) standards, and that claim is correct. - Resonable PHP Framework(이유있는 PHP 프레임워크)는 한국의 웹 개발 환경에 적합한 PHP 프레임워크입니다.
- 일부 북미, 유럽권 무료 웹 호스팅에서도 안정적인 운영이 가능합니다.
- Composer를 포함한 별도의 개발 보조 도구, PHP 플러그인, PHP 프레임워크가 사용 불가능한 환경에 적합합니다.
- 개발 팀원을 대상으로 객체지향(OOP) 교육이 이루어지지 않아도, 그에 준하는 생존주기(Life cycle)를 보장합니다.
- Resonable PHP Framework는 CSRF, XSS, SQL Injection 보안 조치를 기본적으로 가지고 있습니다.
- 한국에서 사용되는 각종 CMS와 API와 연동되어 한국 환경에서 사용 빈도가 높은 구현 유형을 작성하는데 적합합니다.
- RVHM 구조는 MVC 구조와 함께 사용하실 수 있으며, 기존 개발 스킬로도 사용할 수 있도록 더 유연한 구조를 가집니다.
- 한국에서 공식 기술 지원 담당은 `캐츠워즈 커뮤니티`가 맡고 있습니다. [카카오톡 오픈채팅방 입장](https://open.kakao.com/o/gWvNF1B)
The coding convention of this project is similar to the CGI style that was widely used in the early 2000s. Moreover, this style is still observed in solutions written in PHP that are sold in markets such as [WordPress](https://wordpress.org/) plugins, [a local-optimized CMS](https://github.com/gnuboard/gnuboard5), or [Codecanyon](https://codecanyon.net/) in 2023. ## English
- It is stable in free web hosting, or other restrictive shared web hosting.
Although this project hardly uses object-oriented concepts and does not use package managers like Composer much, it still incorporates concepts such as Model, View, Controller, Router, and Helper that are proposed in modern frameworks, and we have made efforts to provide a similar experience as much as possible. - Ideal for environments where separate development aids, including Composer, PHP extensions, and the famous PHP framework are not available.
- Ensures a life-cycle similar to that of an object-oriented programming (OOP) level without trained developers.
We made efforts to address common security vulnerabilities (XSS, CSRF, SQL injection) in web applications, and included many code snippets that were designed to minimize reliance on specific DBMS or communication drivers. - The Reasonable PHP Framework has CSRF, XSS, and SQL Injection security protection as defaults.
- Compatible with various CMS and API used with REST API, it is suitable to create implementation type that is frequently used in various environment.
The specifications that this project offers are still in demand in enterprise environments, so it can be a useful solution if you happen to be in such a situation. - RVHM structure can be used with MVC structure, and has more flexible structure to use as existing development skill.
Whenever this project was introduced, I received a lot of questions about PSR, and I also made efforts to find customers who were willing to pay for a PSR version, such as holding conferences for existing customers. However, there is still no good news. Until good news comes, my plan is to mainly maintain this project.
If you want to comply with the PSR standards and your colleagues are also ready to learn them humbly, we recommend that you consider [Codeigniter](https://github.com/bcit-ci/CodeIgniter) (which has a similar structure to this project) or [Silm Framework](https://github.com/slimphp/Slim).
## Security Policy
- [Security policy](SECURITY.md)
## Contact us
- abuse@catswords.net
- ActivityPub [@catswords_oss@catswords.social](https://catswords.social/@catswords_oss)

View File

@ -1,23 +0,0 @@
# Security Policy
## Supported Versions
Use this section to tell people about which versions of your project are
currently being supported with security updates.
| Version | Supported |
| ------- | ------------------------------------------ |
| 1.6.x | :white_check_mark: (Current) |
| 1.5.x | :x: (EOL: 2020-08-25) |
| < 1.5 | :x: |
## Reporting a Vulnerability
Use this section to tell people how to report a vulnerability.
Tell them where to go, how often they can expect to get an update on a
reported vulnerability, what to expect if the vulnerability is accepted or
declined, etc.
## Contact us
* ActivityPub [@catswords_oss@catswords.social](https://catswords.social/@catswords_oss)
* abuse@catswords.net

2
VERSION.MD Normal file
View File

@ -0,0 +1,2 @@
# Confirmed version
Last confirmed: 2018-03-09 22:00 (KST, GMT+09:00, Seoul)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 187 KiB

View File

@ -1,107 +1,85 @@
function payman_get_check_msgs() { function payman_get_check_msgs() {
return { return {
"good_name": "상품명을 기재하여야 합니다.", "good_name": "상품명을 기재하여야 합니다.",
"good_mny": "가격을 기재하여야 합니다.", "good_mny": "가격을 기재하여야 합니다.",
"buyr_name": "구매자 이름이 없습니다.\n\n로그인하시거나 회원 정보에서 반드시 등록하여 주세요.", "buyr_name": "구매자 이름이 없습니다.\n\n로그인하시거나 회원 정보에서 반드시 등록하여 주세요.",
"buyr_mail": "구매자 이메일이 없습니다.\n\n로그인하시거나 회원 정보에서 반드시 등록하여 주세요.", "buyr_mail": "구매자 이메일이 없습니다.\n\n로그인하시거나 회원 정보에서 반드시 등록하여 주세요.",
"buyr_tel1": "구매자 전화번호가 없습니다.\n\n로그인하시거나 회원 정보에서 반드시 등록하여 주세요." "buyr_tel1": "구매자 전화번호가 없습니다.\n\n로그인하시거나 회원 정보에서 반드시 등록하여 주세요."
}; };
} }
function payman_load_widget(data) { function payman_load_widget(data) {
var is_available = true; var is_available = true;
var req_data = { var req_data = {
"route": "orderform.widget", "route": "orderform.widget",
"redirect_url": window.location.href "redirect_url": window.location.href
}; };
var check_msgs = payman_get_check_msgs(); var check_msgs = payman_get_check_msgs();
var allows_zero = ["good_mny", "redirect_url"]; var allows_zero = ["good_mny"];
for(var k in check_msgs) { for(var k in check_msgs) {
if( !(k in data) || (allows_zero.indexOf(k) < 0 && data[k] == "") ) { if( !(k in data) || (allows_zero.indexOf(k) < 0 && data[k] == "") ) {
alert(check_msgs[k]); alert(check_msgs[k]);
is_available = false; is_available = false;
break; break;
} else { } else {
req_data[k] = data[k]; req_data[k] = data[k];
} }
}
if("redirect_url" in data) {
req_data['redirect_url'] = data['redirect_url'];
} }
if(is_available == true) { if(is_available == true) {
$.ajax({ $.ajax({
type: "post", type: "post",
dataType: "text", dataType: "text",
url: "/payman/", url: "/payman/",
data: req_data, data: req_data,
success: function(req) { success: function(req) {
$("#area_payman").html(req); $("#area_payman").html(req);
} }
}); });
} }
return is_available; return is_available;
} }
function payman_set_data(name, data) { function payman_set_data(name, data) {
$("#payman_" + name).val(data); $("#payman_" + name).val(data);
} }
function payman_get_data(name) { function payman_get_data(name) {
return $("#payman_" + name).val(); return $("#payman_" + name).val();
} }
function payman_set_base64(name, data) { function payman_set_base64(name, data) {
var req_data = { var req_data = {
"route": "base64", "route": "base64",
"action": "encode", "action": "encode",
"data": data "data": data
}; };
$.ajax({ $.ajax({
type: "post", type: "post",
dataType: "json", dataType: "json",
url: "/payman/", url: "/payman/",
data: req_data, data: req_data,
success: function(req) { success: function(req) {
payman_set_data(name, req.result); payman_set_data(name, req.result);
} }
}); });
} }
function payman_submit() { function payman_submit() {
var check_msgs = payman_get_check_msgs(); var check_msgs = payman_get_check_msgs();
for(var k in check_msgs) { for(var k in check_msgs) {
if(payman_get_data(k) == "") { if(payman_get_data(k) == "") {
alert(check_msgs[k]); alert(check_msgs[k]);
return false; return false;
} }
} }
$("#payman_orderform").submit(); $("#payman_orderform").submit();
return true; return true;
}
function payman_submit_nw() {
var check_msgs = payman_get_check_msgs();
for(var k in check_msgs) {
if(payman_get_data(k) == "") {
alert(check_msgs[k]);
return false;
}
}
var $obj = $("#payman_orderform");
var nw = window.open("", "payman_window", "height=600,width=786,modal=yes,alwaysRaised=yes");
$obj.attr("target", "payman_window");
$obj.submit();
nw.focus();
return true;
} }

3
bootstrap.707.sh Normal file
View File

@ -0,0 +1,3 @@
#!/bin/bash
chmod -R 707 .
cp ./storage/example/_.htaccess ./.htaccess

View File

@ -1,5 +1,4 @@
#!/bin/bash #!/bin/bash
#find . -type d -exec chmod 0755 {} \; find . -type d -exec chmod 0755 {} \;
#find . -type f -exec chmod 0644 {} \; find . -type f -exec chmod 0644 {} \;
chmod -R u+rwX,go+rX,go-w .
cp ./storage/example/_.htaccess ./.htaccess cp ./storage/example/_.htaccess ./.htaccess

112
cli.php
View File

@ -2,53 +2,43 @@
<?php <?php
/** /**
* @file cli.php * @file cli.php
* @created_on 2018-07-22 * @date 2018-07-22
* @created_on 2020-04-20 * @author Go Namhyeon <gnh1201@gmail.com>
* @author Go Namhyeon <abuse@catswords.net>
* @brief ReasonableFramework CLI mode * @brief ReasonableFramework CLI mode
* @cvs http://github.com/gnh1201/reasonableframework * @cvs http://github.com/gnh1201/reasonableframework
*/ */
// example: php cli.php --route=welcome
define("_DEF_VSPF_", true); // compatible to VSPF define("_DEF_VSPF_", true); // compatible to VSPF
define("_DEF_RSF_", true); // compatible to RSF define("_DEF_RSF_", true); // compatible to RSF
define("APP_DEVELOPMENT", false); // set the status of development define("APP_DEVELOPMENT", false); // set the status of development
define("DOC_EOL", "\r\n"); // set the 'end of line' define("DOC_EOL", "\r\n"); // set the 'end of line' commonly
// development mode // check if current status is development
if(APP_DEVELOPMENT == true) { if(APP_DEVELOPMENT == true) {
error_reporting(E_ALL); error_reporting(E_ALL);
@ini_set("log_errors", 1); ini_set("display_errors", 1);
@ini_set("error_log", sprintf("%s/storage/sandbox/logs/error.log", getcwd()));
} else {
error_reporting(E_ERROR | E_PARSE);
} }
@ini_set("display_errors", 1);
// set shared vars // set empty scope
$shared_vars = array(); $scope = array();
// define system modules // define system modules
$load_systems = array("base", "storage", "config", "security", "database", "uri", "logger"); $load_systems = array("base", "storage", "config", "security", "database", "uri");
// load system modules // load system modules
foreach($load_systems as $system_name) { foreach($load_systems as $system_name) {
$system_inc_file = "./system/" . $system_name . ".php"; $system_inc_file = "./system/" . $system_name . ".php";
if(file_exists($system_inc_file)) { if(file_exists($system_inc_file)) {
if($system_name == "base") { if($system_name == "base") {
include($system_inc_file); include($system_inc_file);
register_loaded("system", $system_inc_file); register_loaded("system", $system_inc_file);
} else { } else {
loadModule($system_name); loadModule($system_name);
} }
} else { }
echo "ERROR: Dose not exists " . $system_inc_file;
exit;
}
} }
// get config // get configurations
$config = get_config(); $config = get_config();
// set max_execution_time // set max_execution_time
@ -56,42 +46,58 @@ $max_execution_time = get_value_in_array("max_execution_time", $config, 0);
@ini_set("max_execution_time", $max_execution_time); @ini_set("max_execution_time", $max_execution_time);
//@set_time_limit($max_execution_time); //@set_time_limit($max_execution_time);
// set memory limit
$memory_limit = get_value_in_array("memory_limit", $config, "");
if(!empty($memory_limit)) {
@ini_set("memory_limit", $memory_limit);
@ini_set("suhosin.memory_limit", $memory_limit);
}
// autoload module // autoload module
if(!array_key_empty("enable_autoload", $config)) { if(!array_key_empty("enable_autoload", $config)) {
set_autoloader(); set_autoloader();
} }
// set timezone // set timezone
$default_timezone = get_value_in_array("timezone", $config, "UTC"); $default_timezone = get_value_in_array("timezone", $config, "UTC");
date_default_timezone_set($default_timezone); date_default_timezone_set($default_timezone);
// set default route // default route
$route = "welcome"; $route = "welcome";
// set arguments of command line // parse arguments
$opts = getopt("r::h::", array("route::", "host::")); $num_of_args = count($argv);
if(!empty($opts['route'])) { if($num_of_args > 1) {
$route = $opts['route']; foreach($argv as $k=>$v) {
switch($v) {
case "--route":
if($k < ($num_of_args - 1)) {
$route = $argv[$k + 1];
} else {
set_error("invaild argument");
show_errors();
}
break;
case "--static-ip":
if($k < ($num_of_args - 1)) {
$host = $argv[$k + 1];
set_scope("static_ip", $host);
} else {
set_error("invaild argument");
show_errors();
}
break;
}
}
} else {
set_error("not enough arguments");
show_errors();
} }
// set global variables // load route
set_shared_var("route", $route); if(empty($route)) {
set_shared_var("host", $opts['host']); $route = get_value_in_array("default_route", $config, "welcome");
} else {
// get PID(Process ID) $route_names = explode('/', $route);
set_shared_var("mypid", getmypid()); if(count($route_names) > 1) {
$route = $route_names[0];
// set database connection }
set_shared_var("dbc", get_db_connect()); }
// load route file // load route file
if(!loadRoute($route, $shared_vars)) { if(!loadRoute($route, $scope)) {
loadRoute("errors/404", $shared_vars); loadRoute("errors/404", $scope);
} }

View File

@ -1,14 +1,21 @@
{ {
"name": "gnh1201/reasonableframework", "name": "gnh1201/reasonableframework",
"description": "ReasonableFramework is RVHM structured PHP framework with common security", "description": "ReasonableFramework is RVHM structured PHP Web Framework, Securely, Compatibility.",
"license": "LGPL-3.0", "license": "LGPL-3.0",
"authors": [ "authors": [
{ {
"name": "Go Namhyeon", "name": "Go Namhyeon",
"email": "abuse@catswords.net" "email": "gnh1201@gmail.com"
}
],
"repositories": [
{
"type": "vcs",
"url": "https://github.com/bozhinov/pChart2.0-for-PHP7"
} }
], ],
"require": { "require": {
"phpoffice/phpspreadsheet": "~1.8" "bozhinov/pChart2.0-for-PHP7": "dev-master",
"phpoffice/phpspreadsheet": "dev-master"
} }
} }

View File

@ -17,87 +17,87 @@ Simplified BSD (aka FreeBSD) license. See LICENSE.
* @version 0.5.0 * @version 0.5.0
*/ */
class JSLoader { class JSLoader {
protected $cfg = array(); protected $cfg = array();
protected $scripts = array(); protected $scripts = array();
protected $output; protected $output;
public function __construct($cfg = array()) { public function __construct($cfg = array()) {
$this->cfg = array_merge($this->get_default_cfg() , $cfg); $this->cfg = array_merge($this->get_default_cfg() , $cfg);
} }
protected function get_default_cfg(){ protected function get_default_cfg(){
$default_cfg = array( $default_cfg = array(
'file_system_path' => "./", 'file_system_path' => "./",
'concat' => false, 'concat' => false,
'function_wrapper' => false, 'function_wrapper' => false,
'indent_string' => " ", 'indent_string' => " ",
// False for an external script or for concatenating output from multiple // False for an external script or for concatenating output from multiple
// instances. // instances.
'script_wrapper' => true, 'script_wrapper' => true,
'with_header' => true 'with_header' => true
); );
return $default_cfg; return $default_cfg;
} }
public function parse_scripts($scripts) { public function parse_scripts($scripts) {
$scripts = explode("\n", $scripts); $scripts = explode("\n", $scripts);
foreach($scripts as $script_i => & $script) { foreach($scripts as $script_i => & $script) {
if (!strlen($script = trim($script)) || $script[0] === "#") { if (!strlen($script = trim($script)) || $script[0] === "#") {
unset($scripts[$script_i]); unset($scripts[$script_i]);
} }
} }
return $scripts; return $scripts;
} }
public function set_scripts($scripts, $cfg = array()) { public function set_scripts($scripts, $cfg = array()) {
$default_cfg = array( $default_cfg = array(
'add' => false 'add' => false
); );
$cfg = array_merge($default_cfg, $cfg); $cfg = array_merge($default_cfg, $cfg);
if (!is_array($scripts)) { if (!is_array($scripts)) {
$scripts = $this->parse_scripts($scripts); $scripts = $this->parse_scripts($scripts);
} }
if (!$cfg['add']) { if (!$cfg['add']) {
$this->scripts = array(); $this->scripts = array();
} }
$this->scripts = array_merge($this->scripts, $scripts); $this->scripts = array_merge($this->scripts, $scripts);
} }
public function add_scripts($scripts) public function add_scripts($scripts)
{ {
$this->set_scripts($scripts, array( $this->set_scripts($scripts, array(
'add' => true 'add' => true
)); ));
} }
public function get_output() { public function get_output() {
$scripts = $this->scripts ? $this->scripts : array(); $scripts = $this->scripts ? $this->scripts : array();
if ($this->cfg['concat']) { if ($this->cfg['concat']) {
foreach($scripts as & $script) { foreach($scripts as & $script) {
$file = $script; $file = $script;
$file = rtrim($this->cfg['file_system_path'], "/") . "/{$file}"; $file = rtrim($this->cfg['file_system_path'], "/") . "/{$file}";
$script = file_get_contents($file); $script = file_get_contents($file);
} }
$scripts = join("\n\n", $scripts); $scripts = join("\n\n", $scripts);
if ($this->cfg['function_wrapper']) { if ($this->cfg['function_wrapper']) {
$scripts = explode("\n", $scripts); $scripts = explode("\n", $scripts);
foreach($scripts as & $line) { foreach($scripts as & $line) {
if ($line !== "") { if ($line !== "") {
$line = "{$this->cfg['indent_string']}{$line}"; $line = "{$this->cfg['indent_string']}{$line}";
} }
} }
$scripts = join("\n", $scripts); $scripts = join("\n", $scripts);
$scripts = <<<DOCHERE $scripts = <<<DOCHERE
( function () { ( function () {
{$scripts} {$scripts}
@ -105,35 +105,35 @@ class JSLoader {
} )(); } )();
DOCHERE; DOCHERE;
} }
// if // if
if ($this->cfg['script_wrapper']) { if ($this->cfg['script_wrapper']) {
$scripts = <<<DOCHERE $scripts = <<<DOCHERE
<script> <script>
{$scripts} {$scripts}
</script> </script>
DOCHERE; DOCHERE;
} elseif ($this->cfg['with_header']) { } elseif ($this->cfg['with_header']) {
header("Content-Type: text/javascript"); header("Content-Type: text/javascript");
} }
$scripts = array( $scripts = array(
$scripts $scripts
); );
} }
else { else {
foreach($scripts as & $script) { foreach($scripts as & $script) {
$script = <<<DOCHERE $script = <<<DOCHERE
<script src="{$script}"></script> <script src="{$script}"></script>
DOCHERE; DOCHERE;
} }
} }
$this->output = join("\n\n\n", $scripts); $this->output = join("\n\n\n", $scripts);
return $this->output; return $this->output;
} }
} }

View File

@ -1,86 +0,0 @@
<?php
// https://stackoverflow.com/questions/3464113/is-it-possible-to-read-ssl-information-in-php-from-any-website
if(!class_exists("SSL")) {
class SSL {
public $domain, $validFrom, $validTo, $issuer, $validity, $validitytot, $crtValRemaining;
private static function instantiate($url, $info) {
$obj = new static;
$obj->domain = $url;
$obj->validFrom = $info['validFrom'];
$obj->validTo = $info['validTo'];
$obj->issuer = $info['issuer'];
$obj->validity = $info['validity'];
$obj->validitytot = $info['validitytot'];
$obj->crtValRemaining = $info['crtValRemaining'];
return $obj;
}
public static function getSSLinfo($url, $port=443) {
$ssl_info = [];
$certinfo = static::getCertificateDetails($url, $port);
$validFrom_time_t_m = static::dateFormatMonth($certinfo['validFrom_time_t']);
$validTo_time_t_m = static::dateFormatMonth($certinfo['validTo_time_t']);
$validFrom_time_t = static::dateFormat($certinfo['validFrom_time_t']);
$validTo_time_t = static::dateFormat($certinfo['validTo_time_t']);
$current_t = static::dateFormat(time());
$ssl_info['validFrom'] = $validFrom_time_t_m;
$ssl_info['validTo'] = $validTo_time_t_m;
$ssl_info['issuer'] = $certinfo['issuer']['O'];
$ssl_info['validity'] = static::diffDate($current_t, $validTo_time_t)." days";
$ssl_info['validitytot'] = (static::diffDate($validFrom_time_t, $validTo_time_t)-1).' days';
$ssl_info['crtValRemaining'] = $certinfo['validTo_time_t'];
return static::instantiate($url, $ssl_info); // return an object
}
private static function getCertificateDetails($url, $port=443) {
$urlStr = strtolower(trim($url));
$parsed = parse_url($urlStr);// add http://
if (empty($parsed['scheme'])) {
$urlStr = 'http://' . ltrim($urlStr, '/');
}
$orignal_parse = parse_url($urlStr, PHP_URL_HOST);
$get = stream_context_create(array("ssl" => array("capture_peer_cert" => TRUE)));
$read = stream_socket_client("ssl://".$orignal_parse.":".$port, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $get);
$cert = stream_context_get_params($read);
$certinfo = openssl_x509_parse($cert['options']['ssl']['peer_certificate']);
return $certinfo;
}
private static function dateFormat($stamp) {
return strftime("%Y-%m-%d", $stamp);
}
private static function dateFormatMonth($stamp) {
return strftime("%Y-%b-%d", $stamp);
}
private static function diffDate($from, $to) {
$date1=date_create($from);
$date2=date_create($to);
$diff=date_diff($date1,$date2);
return ltrim($diff->format("%R%a"), "+");
}
}
}
/*
## Example
```
$certInfo = SSL::getSSLinfo('stackoverflow.com');
echo $certInfo->validFrom .'<br>';
echo $certInfo->validTo .'<br>';
echo $certInfo->issuer .'<br>';
echo $certInfo->validity .'<br>';
echo $certInfo->validitytot .'<br>';
echo $certInfo->crtValRemaining .'<br>';
```
*/

View File

@ -12,146 +12,143 @@
* @author Andrew Moore * @author Andrew Moore
* @link http://www.php.net/manual/en/function.uniqid.php#94959 * @link http://www.php.net/manual/en/function.uniqid.php#94959
*/ */
if(!class_exists("UUID")) class UUID
{ {
class UUID /**
{ * Generate v3 UUID
/** *
* Generate v3 UUID * Version 3 UUIDs are named based. They require a namespace (another
* * valid UUID) and a value (the name). Given the same namespace and
* Version 3 UUIDs are named based. They require a namespace (another * name, the output is always the same.
* valid UUID) and a value (the name). Given the same namespace and *
* name, the output is always the same. * @param uuid $namespace
* * @param string $name
* @param uuid $namespace */
* @param string $name public static function v3($namespace, $name)
*/ {
public static function v3($namespace, $name) if(!self::is_valid($namespace)) return false;
{
if(!self::is_valid($namespace)) return false;
// Get hexadecimal components of namespace // Get hexadecimal components of namespace
$nhex = str_replace(array('-','{','}'), '', $namespace); $nhex = str_replace(array('-','{','}'), '', $namespace);
// Binary Value // Binary Value
$nstr = ''; $nstr = '';
// Convert Namespace UUID to bits // Convert Namespace UUID to bits
for($i = 0; $i < strlen($nhex); $i+=2) for($i = 0; $i < strlen($nhex); $i+=2)
{ {
$nstr .= chr(hexdec($nhex[$i].$nhex[$i+1])); $nstr .= chr(hexdec($nhex[$i].$nhex[$i+1]));
} }
// Calculate hash value // Calculate hash value
$hash = md5($nstr . $name); $hash = md5($nstr . $name);
return sprintf('%08s-%04s-%04x-%04x-%12s', return sprintf('%08s-%04s-%04x-%04x-%12s',
// 32 bits for "time_low" // 32 bits for "time_low"
substr($hash, 0, 8), substr($hash, 0, 8),
// 16 bits for "time_mid" // 16 bits for "time_mid"
substr($hash, 8, 4), substr($hash, 8, 4),
// 16 bits for "time_hi_and_version", // 16 bits for "time_hi_and_version",
// four most significant bits holds version number 3 // four most significant bits holds version number 3
(hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x3000, (hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x3000,
// 16 bits, 8 bits for "clk_seq_hi_res", // 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low", // 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1 // two most significant bits holds zero and one for variant DCE1.1
(hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000, (hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000,
// 48 bits for "node" // 48 bits for "node"
substr($hash, 20, 12) substr($hash, 20, 12)
); );
} }
/** /**
* *
* Generate v4 UUID * Generate v4 UUID
* *
* Version 4 UUIDs are pseudo-random. * Version 4 UUIDs are pseudo-random.
*/ */
public static function v4() public static function v4()
{ {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
// 32 bits for "time_low" // 32 bits for "time_low"
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff),
// 16 bits for "time_mid" // 16 bits for "time_mid"
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
// 16 bits for "time_hi_and_version", // 16 bits for "time_hi_and_version",
// four most significant bits holds version number 4 // four most significant bits holds version number 4
mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x0fff) | 0x4000,
// 16 bits, 8 bits for "clk_seq_hi_res", // 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low", // 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1 // two most significant bits holds zero and one for variant DCE1.1
mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0x3fff) | 0x8000,
// 48 bits for "node" // 48 bits for "node"
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
); );
} }
/** /**
* Generate v5 UUID * Generate v5 UUID
* *
* Version 5 UUIDs are named based. They require a namespace (another * Version 5 UUIDs are named based. They require a namespace (another
* valid UUID) and a value (the name). Given the same namespace and * valid UUID) and a value (the name). Given the same namespace and
* name, the output is always the same. * name, the output is always the same.
* *
* @param uuid $namespace * @param uuid $namespace
* @param string $name * @param string $name
*/ */
public static function v5($namespace, $name) public static function v5($namespace, $name)
{ {
if(!self::is_valid($namespace)) return false; if(!self::is_valid($namespace)) return false;
// Get hexadecimal components of namespace // Get hexadecimal components of namespace
$nhex = str_replace(array('-','{','}'), '', $namespace); $nhex = str_replace(array('-','{','}'), '', $namespace);
// Binary Value // Binary Value
$nstr = ''; $nstr = '';
// Convert Namespace UUID to bits // Convert Namespace UUID to bits
for($i = 0; $i < strlen($nhex); $i+=2) for($i = 0; $i < strlen($nhex); $i+=2)
{ {
$nstr .= chr(hexdec($nhex[$i].$nhex[$i+1])); $nstr .= chr(hexdec($nhex[$i].$nhex[$i+1]));
} }
// Calculate hash value // Calculate hash value
$hash = sha1($nstr . $name); $hash = sha1($nstr . $name);
return sprintf('%08s-%04s-%04x-%04x-%12s', return sprintf('%08s-%04s-%04x-%04x-%12s',
// 32 bits for "time_low" // 32 bits for "time_low"
substr($hash, 0, 8), substr($hash, 0, 8),
// 16 bits for "time_mid" // 16 bits for "time_mid"
substr($hash, 8, 4), substr($hash, 8, 4),
// 16 bits for "time_hi_and_version", // 16 bits for "time_hi_and_version",
// four most significant bits holds version number 5 // four most significant bits holds version number 5
(hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x5000, (hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x5000,
// 16 bits, 8 bits for "clk_seq_hi_res", // 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low", // 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1 // two most significant bits holds zero and one for variant DCE1.1
(hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000, (hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000,
// 48 bits for "node" // 48 bits for "node"
substr($hash, 20, 12) substr($hash, 20, 12)
); );
} }
public static function is_valid($uuid) public static function is_valid($uuid) {
{ return preg_match('/^\{?[0-9a-f]{8}\-?[0-9a-f]{4}\-?[0-9a-f]{4}\-?'.
return preg_match('/^\{?[0-9a-f]{8}\-?[0-9a-f]{4}\-?[0-9a-f]{4}\-?'. '[0-9a-f]{4}\-?[0-9a-f]{12}\}?$/i', $uuid) === 1;
'[0-9a-f]{4}\-?[0-9a-f]{12}\}?$/i', $uuid) === 1; }
}
}
} }
?>

View File

@ -1,32 +0,0 @@
<?php
/**
* @file api.whois.kr.php
* @date 2019-05-26
* @author Go Namhyeon <abuse@catswords.net>
* @brief KISA Whois/Domain/IP/AS Query Helper (https://whois.kr)
*/
if(!is_fn("get_whois_kr")) {
function get_whois_kr($name, $key, $type="whois") {
$response = false;
switch($type) {
case "whois":
$response = get_web_json("http://whois.kisa.or.kr/openapi/whois.jsp", "get.cache", array(
"query" => $name,
"key" => $key,
"answer" => "json",
));
break;
case "ipascc":
$response = get_web_json("http://whois.kisa.or.kr/openapi/ipascc.jsp", "get.cache", array(
"query" => $name,
"key" => $key,
"answer" => "json",
));
break;
}
}
return $response;
}

3
helper/archivetool.php Normal file
View File

@ -0,0 +1,3 @@
<?php
// archivetool.php
// todo

View File

@ -1,58 +0,0 @@
<?php
/**
* @file catsplit.format.php
* @date 2019-05-28
* @author Go Namhyeon <abuse@catswords.net>
* @brief Catsplit format encoder
* @documentation https://github.com/gnh1201/catsplit-format
*/
if(!is_fn("catsplit_unescape")) {
function catsplit_unescape($data) {
return trim($data);
}
}
if(!is_fn("casplit_escape")) {
function casplit_escape($data) {
return htmlspecialchars($data);
}
}
if(!is_fn("catsplit_encode")) {
function catsplit_encode($data) {
$_ks = array();
$_vs = array();
foreach($data as $k=>$v) {
$_ks[] = $k;
$_vs[] = make_safe_argument($v);
}
$_ks = array_map("casplit_escape", $_ks);
$_vs = array_map("casplit_escape", $_vs);
return sprintf("('%s')<=(%s)", implode("','", $_vs), implode(",", $_ks));
}
}
if(!is_fn("catsplit_decode")) {
function catsplit_decode($data) {
$s_final = array();
// step 1
$s1 = explode(")<=(", substr($data, 1, -1));
// step 2
$s2a = array_map("catsplit_unescape", explode(",", $s1[0]));
$s2b = array_map("catsplit_unescape", explode(",", $s1[1]));
// step 3
$s3 = array_combine($s2b, $s2a);
// step 4
foreach($s3 as $k=>$v) {
$s_final[$k] = substr(stripslashes($v), 1, -1);
}
return $s_final;
}
}

View File

@ -1,38 +0,0 @@
<?php
// Go Namhyeon <abuse@catswords.net>
// 2019-09-25
if(!is_fn("decode_colona_format")) {
function decode_colona_format($data) {
$lines = explode_by_line(remove_utf8_bom($data));
$jobargs = array();
$eof = false;
$delimiter = ":";
$jobkey = "";
$jobvalue = "";
foreach($lines as $line) {
$pos = strpos($line, $delimiter);
if($eof) {
if($line == "EOF;") {
$jobargs[$jobkey] = $jobvalue;
$eof = false;
} else {
$jobvalue .= $line;
}
} elseif($pos !== false) {
$jobkey = rtrim(substr($line, 0, $pos));
$jobvalue = ltrim(substr($line, $pos + strlen($delimiter)));
if($jobvalue == "<<<EOF") {
$jobvalue = "";
$eof = true;
} else {
$jobargs[$jobkey] = $jobvalue;
}
}
}
return $jobargs;
}
}

View File

@ -1,31 +0,0 @@
<?php
// @date 2019-10-13
// @author Go Namhyeon <abuse@catswords.net>
if(!is_fn("unzip")) {
function unzip($src, $dst, $options=array()) {
$flag = false;
$method = get_value_in_array("method", $options, "ZipArchive");
switch($method) {
case "ZipArchive":
$handle = new ZipArchive;
$res = $handle->open($src);
if ($res === TRUE) {
$zip->extractTo($dst);
$zip->close();
$flag = true;
}
break;
case "unzip":
if(loadHelper("exectool")) {
exec_command(sprintf("unzip -d '%s' '%s'", make_safe_argument($src), make_safe_argument($dst)));
$flag = true;
}
break;
}
return $flag;
}
}

View File

@ -2,50 +2,50 @@
/** /**
* @file country.kr.php * @file country.kr.php
* @date 2018-04-15 * @date 2018-04-15
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Country Helper (Korean) * @brief Country Helper (Korean)
*/ */
// parse telephone number // parse telephone number
if(!is_fn("get_kr_parsed_tel_number")) { if(!check_function_exists("get_kr_parsed_tel_number")) {
function get_kr_parsed_tel_number($tel) { function get_kr_parsed_tel_number($tel) {
$output = preg_replace("/[^0-9]/", "", $tel); // 숫자 이외 제거 $output = preg_replace("/[^0-9]/", "", $tel); // 숫자 이외 제거
$local_code = substr($tel, 0, 2); $local_code = substr($tel, 0, 2);
if ($local_code == '02') { if ($local_code == '02') {
$output = preg_replace("/([0-9]{2})([0-9]{3,4})([0-9]{4})$/", "\\1-\\2-\\3", $tel); $output = preg_replace("/([0-9]{2})([0-9]{3,4})([0-9]{4})$/", "\\1-\\2-\\3", $tel);
} elseif (strlen($tel) == '8' && in_array($local_code, array('15', '16', '18'))) { } elseif (strlen($tel) == '8' && in_array($local_code, array('15', '16', '18'))) {
$output = preg_replace("/([0-9]{4})([0-9]{4})$/", "\\1-\\2", $tel); // 지능망 번호이면 $output = preg_replace("/([0-9]{4})([0-9]{4})$/", "\\1-\\2", $tel); // 지능망 번호이면
} else { } else {
$output = preg_replace("/([0-9]{3})([0-9]{3,4})([0-9]{4})$/", "\\1-\\2-\\3", $tel); $output = preg_replace("/([0-9]{3})([0-9]{3,4})([0-9]{4})$/", "\\1-\\2-\\3", $tel);
} }
return $output; return $output;
} }
} }
if(!is_fn("get_kr_get_lastname")) { if(!check_function_exists("get_kr_get_lastname")) {
function get_kr_get_lastname() function get_kr_get_lastname()
if(loadHelper("string.utils")) { if(loadHelper("string.utils")) {
$words = read_storage_file_by_line("kr.lastname.txt", array( $words = read_storage_file_by_line("kr.lastname.txt", array(
"storage_type" => "country", "storage_type" => "country",
))); )));
return $words[get_random_index($words)]; return $words[get_random_index($words)];
} }
} }
} }
if(!is_fn("get_kr_get_firstname")) { if(!check_function_exists("get_kr_get_firstname")) {
function get_kr_get_firstname() { function get_kr_get_firstname() {
if(loadHelper("string.utils")) { if(loadHelper("string.utils")) {
$words = read_storage_file_by_line("kr.firstname.txt", array( $words = read_storage_file_by_line("kr.firstname.txt", array(
"storage_type" => "country", "storage_type" => "country",
))); )));
return $words[get_random_index($words)]; return $words[get_random_index($words)];
} }
} }
} }
if(!is_fn("get_kr_get_generated_name")) { if(!check_function_exists("get_kr_get_generated_name")) {
function get_kr_get_generated_name() { function get_kr_get_generated_name() {
return sprintf("%s%s", get_kr_get_lastname(), get_kr_get_firstname()); return sprintf("%s%s", get_kr_get_lastname(), get_kr_get_firstname());
} }
} }

View File

@ -1,41 +0,0 @@
<?php
// Coupang Products Search API
// https://coupa.ng/bZ3Kba
// https://developers.coupangcorp.com/hc/ko/articles/360033461914-HMAC-Signature-%EC%83%9D%EC%84%B1
loadHelper("webpagetool");
if(!is_fn("coupang_get_signature")) {
function coupang_get_signature($method, $path, $query, $ACCESS_KEY, $SECRET_KEY) {
$datetime = date("ymd") . 'T' . date("His") . 'Z';
$message = $datetime . strtoupper($method) . str_replace("?", "", $path) . http_build_query($query);
$algorithm = "HmacSHA256";
$signature = hmacsha256_sign_message($message, $SECRET_KEY);
return "CEA algorithm=HmacSHA256, access-key=" . $ACCESS_KEY . ", signed-date=" . $datetime . ", signature=" . $signature;
}
}
if(!is_fn("coupang_search_items")) {
function coupang_search_items($keyword, $ACCESS_KEY, $SECRET_KEY) {
$URL_PARTS = array("https://api-gateway.coupang.com", "/v2/providers/affiliate_open_api/apis/openapi/v1", "/products/search");
$BASE_URL = $URL_PARTS[0] . $URL_PARTS[1];
$method = "get";
$path = $URL_PARTS[1] . $URL_PARTS[2];
$query = array(
"keyword" => $keyword,
"limit" => 20, // default is 20
//"subId" => "" // default is null
);
$response = get_web_page($BASE_URL . $URL_PARTS[2], $method, array(
"headers" => array(
"Authorization" => coupang_get_signature($method, $path, $query, $ACCESS_KEY, $SECRET_KEY)
),
"data" => $query
));
var_dump($response);
}
}

View File

@ -2,132 +2,132 @@
/** /**
* @file database.alt.php * @file database.alt.php
* @date 2018-09-10 * @date 2018-09-10
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Database alternative driver switcher * @brief Database alternative driver switcher
*/ */
if(!is_fn("exec_db_alt_callback")) { if(!check_function_exists("exec_db_alt_callback")) {
function exec_db_alt_callback($rules, $params=array(), $driver="") { function exec_db_alt_callback($rules, $params=array(), $driver="") {
$result = false; $result = false;
$db_driver = empty($driver) ? get_db_driver() : $driver; $db_driver = empty($driver) ? get_db_driver() : $driver;
foreach($rules as $rule) { foreach($rules as $rule) {
if($rule['driver'] == $db_driver) { if($rule['driver'] == $db_driver) {
if(loadHelper(sprintf("database.%s", $rule['driver']))) { if(loadHelper(sprintf("database.%s", $rule['driver']))) {
if(is_fn($rule['callback'])) { if(check_function_exists($rule['callback'])) {
if(is_array($params) && count($params) > 0) { if(is_array($params) && count($params) > 0) {
$result = call_user_func_array($rule['callback'], $params); $result = call_user_func_array($rule['callback'], $params);
} else { } else {
$result = call_user_func($rule['callback']); $result = call_user_func($rule['callback']);
} }
} }
} else { } else {
set_error(sprintf("Can not load %s database driver.", $rule['driver'])); set_error(sprintf("Can not load %s database driver.", $rule['driver']));
show_errors(); show_errors();
} }
break; break;
} }
} }
return $result; return $result;
} }
} }
if(!is_fn("get_db_alt_connect")) { if(!check_function_exists("get_db_alt_connect")) {
function get_db_alt_connect($driver) { function get_db_alt_connect($driver) {
$conn = false; $conn = false;
$config = get_config(); $config = get_config();
$rules = array( $rules = array(
array("driver" => "mysql.pdo", "callback" => "get_db_mysql_pdo_connect"), array("driver" => "mysql.pdo", "callback" => "get_db_mysql_pdo_connect"),
array("driver" => "mysql.imp", "callback" => "get_db_mysql_imp_connect"), array("driver" => "mysql.imp", "callback" => "get_db_mysql_imp_connect"),
array("driver" => "mysql.old", "callback" => "get_db_mysql_old_connect"), array("driver" => "mysql.old", "callback" => "get_db_mysql_old_connect"),
array("driver" => "mysql.cmd", "callback" => "get_db_mysql_cmd_connect"), array("driver" => "mysql.cmd", "callback" => "get_db_mysql_cmd_connect"),
array("driver" => "oracle", "callback" => "get_db_oracle_connect"), array("driver" => "oracle", "callback" => "get_db_oracle_connect"),
array("driver" => "pgsql", "callback" => "get_db_pgsql_connect"), array("driver" => "pgsql", "callback" => "get_db_pgsql_connect"),
array("driver" => "mssql.pdo", "callback" => "get_db_mssql_pdo_connect"), array("driver" => "mssql.pdo", "callback" => "get_db_mssql_pdo_connect"),
); );
$conn = exec_db_alt_callback($rules, array(), $driver); $conn = exec_db_alt_callback($rules, array(), $driver);
return $conn; return $conn;
} }
} }
if(!is_fn("exec_db_alt_query")) { if(!check_function_exists("exec_db_alt_query")) {
function exec_db_alt_query($sql, $bind=array(), $options=array()) { function exec_db_alt_query($sql, $bind=array(), $options=array()) {
$result = false; $result = false;
// allow custom db connection object // allow custom db connection object
if(array_key_empty("dbc", $options)) { if(array_key_empty("dbc", $options)) {
if(!array_key_empty("driver", $options)) { if(!array_key_empty("driver", $options)) {
$options['dbc'] = get_db_alt_connect($options['driver']); $options['dbc'] = get_db_alt_connect($options['driver']);
} else { } else {
$options['dbc'] = get_dbc_object(); $options['dbc'] = get_dbc_object();
} }
} }
$rules = array( $rules = array(
array("driver" => "mysql.pdo", "callback" => "exec_db_mysql_pdo_query"), array("driver" => "mysql.pdo", "callback" => "exec_db_mysql_pdo_query"),
array("driver" => "mysql.imp", "callback" => "exec_db_mysql_imp_query"), array("driver" => "mysql.imp", "callback" => "exec_db_mysql_imp_query"),
array("driver" => "mysql.old", "callback" => "exec_db_mysql_old_query"), array("driver" => "mysql.old", "callback" => "exec_db_mysql_old_query"),
array("driver" => "mysql.cmd", "callback" => "exec_db_mysql_cmd_query"), array("driver" => "mysql.cmd", "callback" => "exec_db_mysql_cmd_query"),
array("driver" => "oracle", "callback" => "exec_db_oracle_query"), array("driver" => "oracle", "callback" => "exec_db_oracle_query"),
array("driver" => "pgsql", "callback" => "exec_db_pgsql_query"), array("driver" => "pgsql", "callback" => "exec_db_pgsql_query"),
array("driver" => "mssql.pdo", "callback" => "exec_db_mssql_pdo_query"), array("driver" => "mssql.pdo", "callback" => "exec_db_mssql_pdo_query"),
); );
$result = exec_db_alt_callback($rules, array($sql, $bind, $options), $driver); $result = exec_db_alt_callback($rules, array($sql, $bind, $options), $driver);
return $result; return $result;
} }
} }
if(!is_fn("exec_db_alt_fetch_all")) { if(!check_function_exists("exec_db_alt_fetch_all")) {
function exec_db_alt_fetch_all($sql, $bind=array(), $options=array()) { function exec_db_alt_fetch_all($sql, $bind=array(), $options=array()) {
$rows = array(); $rows = array();
$driver = get_value_in_array("driver", $options, ""); $driver = get_value_in_array("driver", $options, "");
$rules = array( $rules = array(
array("driver" => "mysql.pdo", "callback" => "exec_db_mysql_pdo_fetch_all"), array("driver" => "mysql.pdo", "callback" => "exec_db_mysql_pdo_fetch_all"),
array("driver" => "mysql.imp", "callback" => "exec_db_mysql_imp_fetch_all"), array("driver" => "mysql.imp", "callback" => "exec_db_mysql_imp_fetch_all"),
array("driver" => "mysql.old", "callback" => "exec_db_mysql_old_fetch_all"), array("driver" => "mysql.old", "callback" => "exec_db_mysql_old_fetch_all"),
array("driver" => "mysql.cmd", "callback" => "exec_db_mysql_cmd_fetch_all"), array("driver" => "mysql.cmd", "callback" => "exec_db_mysql_cmd_fetch_all"),
array("driver" => "oracle", "callback" => "exec_db_oracle_fetch_all"), array("driver" => "oracle", "callback" => "exec_db_oracle_fetch_all"),
array("driver" => "pgsql", "callback" => "exec_db_pgsql_fetch_all"), array("driver" => "pgsql", "callback" => "exec_db_pgsql_fetch_all"),
array("driver" => "mssql.pdo", "callback" => "exec_db_mssql_fetch_all"), array("driver" => "mssql.pdo", "callback" => "exec_db_mssql_fetch_all"),
); );
$rows = exec_db_alt_callback($rules, array($sql, $bind, $options), $driver); $rows = exec_db_alt_callback($rules, array($sql, $bind, $options), $driver);
return $rows; return $rows;
} }
} }
if(!is_fn("exec_db_alt_fetch")) { if(!check_function_exists("exec_db_alt_fetch")) {
function exec_db_alt_fetch($sql, $bind) { function exec_db_alt_fetch($sql, $bind) {
$fetched = false; $fetched = false;
$rows = exec_db_alt_fetch_all($sql, $bind); $rows = exec_db_alt_fetch_all($sql, $bind);
foreach($rows as $row) { foreach($rows as $row) {
$fetched = $row; $fetched = $row;
break; break;
} }
return $fetched; return $fetched;
} }
} }
if(!is_fn("get_db_alt_last_id")) { if(!check_function_exists("get_db_alt_last_id")) {
function get_db_alt_last_id($driver) { function get_db_alt_last_id($driver) {
$last_id = false; $last_id = false;
if($driver == "mysql.imp") { if($driver == "mysql.imp") {
$last_id = @mysqli_insert_id(); $last_id = @mysqli_insert_id();
} elseif($driver == "mysql.old") { } elseif($driver == "mysql.old") {
$last_id = @mysql_insert_id(); $last_id = @mysql_insert_id();
} }
return $last_id; return $last_id;
} }
} }

View File

@ -1,56 +1,56 @@
<?php <?php
// database.mssql.pdo.php // database.mssql.pdo.php
if(!is_fn("get_db_mssql_pdo_connect")) { if(!check_function_exists("get_db_mssql_pdo_connect")) {
function get_db_mssql_pdo_connect() { function get_db_mssql_pdo_connect() {
$conn = false; $conn = false;
$config = get_config(); $config = get_config();
try { try {
$conn = new PDO( $conn = new PDO(
sprintf( sprintf(
"dblib:host=%s;dbname=%s", "dblib:host=%s;dbname=%s",
$config['db_mssql_host'], $config['db_mssql_host'],
$config['db_mssql_name'] $config['db_mssql_name']
), ),
$config['db_mssql_username'], $config['db_mssql_username'],
$config['db_mssql_password'] $config['db_mssql_password']
); );
$conn->exec("SET CHARACTER SET utf8"); $conn->exec("SET CHARACTER SET utf8");
$conn->query("SET ANSI_NULLS ON"); $conn->query("SET ANSI_NULLS ON");
$conn->query("SET ANSI_WARNINGS ON"); $conn->query("SET ANSI_WARNINGS ON");
} catch(PDOException $e) { } catch(PDOException $e) {
set_error($e->getMessage()); set_error($e->getMessage());
show_errors(); show_errors();
} }
return $conn; return $conn;
} }
} }
if(!is_fn("exec_db_mssql_pdo_query")) { if(!check_function_exists("exec_db_mssql_pdo_query")) {
function exec_db_mssql_pdo_query($sql, $bind=array(), $options=array()) { function exec_db_mssql_pdo_query($sql, $bind=array(), $options=array()) {
$dbc = get_value_in_array("dbc", $options, get_dbc_object()); $dbc = get_value_in_array("dbc", $options, get_dbc_object());
if($dbc !== false) { if($dbc !== false) {
$binded_sql = get_db_binded_sql($sql, $bind); $binded_sql = get_db_binded_sql($sql, $bind);
$sth = $dbc->prepare($binded_sql); $sth = $dbc->prepare($binded_sql);
$sth->execute(); $sth->execute();
} }
return $sth; return $sth;
} }
} }
if(!is_fn("exec_db_mssql_pdo_fetch_all")) { if(!check_function_exists("exec_db_mssql_pdo_fetch_all")) {
function exec_db_mssql_pdo_fetch_all($sql, $bind=array(), $options=array()) { function exec_db_mssql_pdo_fetch_all($sql, $bind=array(), $options=array()) {
$rows = array(); $rows = array();
$sth = exec_db_mssql_pdo_query($sql, $bind, $options); $sth = exec_db_mssql_pdo_query($sql, $bind, $options);
$sth->setFetchMode(PDO::FETCH_ASSOC); $sth->setFetchMode(PDO::FETCH_ASSOC);
$rows = $sth->fetchAll(); $rows = $sth->fetchAll();
return $rows; return $rows;
} }
} }

View File

@ -2,77 +2,29 @@
/** /**
* @file database.mysql.cmd.php * @file database.mysql.cmd.php
* @date 2019-04-06 * @date 2019-04-06
* @auther Go Namhyeon <abuse@catswords.net> * @auther Go Namhyeon <gnh1201@gmail.com>
* @brief MySQL(MariaDB) command line driver * @brief MySQL(MariaDB) command line driver
*/ */
if(!is_fn("get_db_mysql_cmd_connect")) { if(function_exists("exec_db_mysql_cmd_query")) {
function get_db_mysql_cmd_connect() { function exec_db_mysql_cmd_query($sql, $bind) {
$result = false; $result = false;
$config = get_config(); $config = get_config();
if(loadHelper("exectool")) { $args = array("mysql");
$args = array("mysql"); $sql = get_db_binded_sql($sql, $bind);
$args[] = sprintf("-u'%s'", $config['db_username']);
$args[] = sprintf("-p'%s'", $config['db_password']); if(loadHelper("exectool")) {
$args[] = sprintf("-h'%s'", $config['db_host']); $args[] = sprintf("-u%s", $config['db_username']);
$args[] = "-s"; // --slient $args[] = sprintf("-p%s", $config['db_password']);
$args[] = "-N"; // --skip-column-names $args[] = sprintf("-h%s", $config['db_host']);
$args[] = "-e'select 1'"; $args[] = sprintf("-D %s", $config['db_name']);
$args[] = sprintf("-e '%s'", make_safe_argument($sql));
$cmd = implode(" ", $args);
$result = exec_command($cmd); $cmd = trim(implode(" ", $args));
} $result = exec_command($cmd);
}
return $result;
} return $result;
} }
if(!is_fn("exec_db_mysql_cmd_query")) {
function exec_db_mysql_cmd_query($sql, $bind) {
$result = false;
$config = get_config();
$sql = get_db_binded_sql($sql, $bind);
if(loadHelper("exectool")) {
$args = array("mysql");
$args[] = sprintf("-u'%s'", $config['db_username']);
$args[] = sprintf("-p'%s'", $config['db_password']);
$args[] = sprintf("-h'%s'", $config['db_host']);
$args[] = "-s"; // --slient
$args[] = sprintf("-D'%s'", $config['db_name']);
$args[] = sprintf("-e'%s'", make_safe_argument($sql));
$cmd = implode(" ", $args);
$result = exec_command($cmd);
}
return $result;
}
}
if(!is_fn("exec_db_mysql_cmd_fetch_all")) {
function exec_db_mysql_cmd_fetch_all($sql, $bind) {
$result = false;
$tsvData = exec_db_mysql_cmd_query($sql, $bind);
$lines = explode(DOC_EOL, $tsvData);
$rows = array();
if(is_fn("str_getcsv")) {
foreach($lines as $line) {
$rows[] = str_getcsv($line, "\t");
}
} else {
foreach($lines as $line) {
$rows[] = explode("\t", $line);
}
}
if(count($rows) > 0) {
$result = $rows;
}
return $result;
}
} }

View File

@ -2,55 +2,55 @@
/** /**
* @file database.mysql.imp.php * @file database.mysql.imp.php
* @date 2018-09-10 * @date 2018-09-10
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief MySQLi database helper * @brief MySQLi database helper
*/ */
if(!is_fn("get_db_mysql_imp_connect")) { if(!check_function_exists("get_db_mysql_imp_connect")) {
function get_db_mysql_imp_connect() { function get_db_mysql_imp_connect() {
$conn = false; $conn = false;
$config = get_config(); $config = get_config();
$conn = @mysqli_connect($config['db_host'], $config['db_username'], $config['db_password'], $config['db_name']); $conn = @mysqli_connect($config['db_host'], $config['db_username'], $config['db_password'], $config['db_name']);
$errno = @mysqli_connect_errno(); $errno = @mysqli_connect_errno();
if($errno) { if($errno) {
set_error(sprintf("Failed to connect to MySQL: %s", $errno)); set_error(sprintf("Failed to connect to MySQL: %s", $errno));
show_errors(); show_errors();
} }
return $conn; return $conn;
} }
} }
if(!is_fn("exec_db_mysql_imp_query")) { if(!check_function_exists("exec_db_mysql_imp_query")) {
function exec_db_mysql_imp_query($sql, $bind) { function exec_db_mysql_imp_query($sql, $bind) {
$result = false; $result = false;
$dbc = get_dbc_object(); $dbc = get_dbc_object();
$binded_sql = get_db_binded_sql($sql, $bind); $binded_sql = get_db_binded_sql($sql, $bind);
$result = @mysqli_query($dbc, $binded_sql); $result = @mysqli_query($dbc, $binded_sql);
return $result; return $result;
} }
} }
if(!is_fn("exec_db_mysql_imp_fetch_all")) { if(!check_function_exists("exec_db_mysql_imp_fetch_all")) {
function exec_db_mysql_imp_fetch_all($sql, $bind) { function exec_db_mysql_imp_fetch_all($sql, $bind) {
$rows = array(); $rows = array();
$result = exec_db_mysql_imp_query($sql, $bind); $result = exec_db_mysql_imp_query($sql, $bind);
while($row = mysqli_fetch_array($result)) { while($row = mysqli_fetch_array($result)) {
$rows[] = $row; $rows[] = $row;
} }
return $rows; return $rows;
} }
} }
if(!is_fn("close_db_mysql_imp_connect")) { if(!check_function_exists("close_db_mysql_imp_connect")) {
function close_db_mysql_imp_connect() { function close_db_mysql_imp_connect() {
$dbc = get_shared_var("dbc"); $dbc = get_scope("dbc");
return mysqli_close($dbc); return mysqli_close($dbc);
} }
} }

View File

@ -2,58 +2,58 @@
/** /**
* @file database.mysql.old.php * @file database.mysql.old.php
* @date 2018-09-14 * @date 2018-09-14
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief MySQL-old (lower than 5.4) database helper * @brief MySQL-old (lower than 5.4) database helper
*/ */
if(!is_fn("get_db_mysql_old_connect")) { if(!check_function_exists("get_db_mysql_old_connect")) {
function get_db_mysql_old_connect() { function get_db_mysql_old_connect() {
$conn = false; $conn = false;
$config = get_config(); $config = get_config();
$conn = @mysql_connect($config['db_host'], $config['db_username'], $config['db_password']); $conn = @mysql_connect($config['db_host'], $config['db_username'], $config['db_password']);
if(!$conn) { if(!$conn) {
set_error("Could not connect: " . @mysql_error()); set_error("Could not connect: " . @mysql_error());
show_errors(); show_errors();
} }
if(!@mysql_select_db($config['db_name'], $conn)) { if(!@mysql_select_db($config['db_name'], $conn)) {
set_error("Could not select database."); set_error("Could not select database.");
show_errors(); show_errors();
} }
return $conn; return $conn;
} }
} }
if(!is_fn("exec_db_mysql_old_query")) { if(!check_function_exists("exec_db_mysql_old_query")) {
function exec_db_mysql_old_query($sql, $bind) { function exec_db_mysql_old_query($sql, $bind) {
$result = false; $result = false;
$dbc = get_dbc_object(); $dbc = get_dbc_object();
$binded_sql = get_db_binded_sql($sql, $bind); $binded_sql = get_db_binded_sql($sql, $bind);
$result = @mysql_query($dbc, $binded_sql); $result = @mysql_query($dbc, $binded_sql);
return $result; return $result;
} }
} }
if(!is_fn("exec_db_mysql_old_fetch_all")) { if(!check_function_exists("exec_db_mysql_old_fetch_all")) {
function exec_db_mysql_old_fetch_all($sql, $bind) { function exec_db_mysql_old_fetch_all($sql, $bind) {
$rows = array(); $rows = array();
$result = exec_db_mysql_old_query($sql, $bind); $result = exec_db_mysql_old_query($sql, $bind);
while($row = @mysql_fetch_array($result)) { while($row = @mysql_fetch_array($result)) {
$rows[] = $row; $rows[] = $row;
} }
return $rows; return $rows;
} }
} }
if(!is_fn("close_db_mysql_old_connect")) { if(!check_function_exists("close_db_mysql_old_connect")) {
function close_db_mysql_old_connect() { function close_db_mysql_old_connect() {
$dbc = get_shared_var("dbc"); $dbc = get_scope("dbc");
return mysql_close($dbc); return mysql_close($dbc);
} }
} }

View File

@ -2,140 +2,140 @@
/** /**
* @file oracle.php * @file oracle.php
* @date 2018-03-27 * @date 2018-03-27
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Oracle database helper for ReasonableFramework * @brief Oracle database helper for ReasonableFramework
*/ */
if(!is_fn("check_db_oracle_installed")) { if(!check_function_exists("check_db_oracle_installed")) {
function check_db_oracle_installed() { function check_db_oracle_installed() {
$fn = check_invalid_function(array( $fn = check_invalid_function(array(
"NO_FUNCTION_OCI_PARSE" => "oci_parse", "NO_FUNCTION_OCI_PARSE" => "oci_parse",
"NO_FUNCTION_OCI_EXECUTE" => "oci_execute", "NO_FUNCTION_OCI_EXECUTE" => "oci_execute",
"NO_FUNCTION_OCI_FETCH_ASSOC" => "oci_fetch_assoc", "NO_FUNCTION_OCI_FETCH_ASSOC" => "oci_fetch_assoc",
"NO_FUNCTION_OCI_FREE_STATEMENT" => "oci_free_statement", "NO_FUNCTION_OCI_FREE_STATEMENT" => "oci_free_statement",
"NO_FUNCTION_OCI_CLOSE" => "oci_close", "NO_FUNCTION_OCI_CLOSE" => "oci_close",
)); ));
$is_installed = ($fn == -1); $is_installed = ($fn == -1);
if(!$is_installed) { if(!$is_installed) {
set_error($fn); set_error($fn);
} }
return $is_installed; return $is_installed;
} }
} }
if(!is_fn("get_db_orable_binded_sql")) { if(!check_function_exists("get_db_orable_binded_sql")) {
function get_db_orable_binded_sql($sql, $bind) { function get_db_orable_binded_sql($sql, $bind) {
return get_db_binded_sql($sql, $bind); return get_db_binded_sql($sql, $bind);
} }
} }
if(!is_fn("get_db_oracle_stmt")) { if(!check_function_exists("get_db_oracle_stmt")) {
function get_db_oracle_stmt($sql, $bind) { function get_db_oracle_stmt($sql, $bind) {
$stmt = NULL; $stmt = NULL;
if(!check_db_oracle_installed()) { if(!check_db_oracle_installed()) {
show_errors(); show_errors();
} }
$sql = get_db_orable_binded_sql($sql, $bind); $sql = get_db_orable_binded_sql($sql, $bind);
$stmt = oci_parse($conn, $sql); $stmt = oci_parse($conn, $sql);
return $stmt; return $stmt;
} }
} }
if(!is_fn("exec_db_oracle_connect")) { if(!check_function_exists("exec_db_oracle_connect")) {
function exec_db_oracle_connect($host, $port, $user, $password, $options=array()) { function exec_db_oracle_connect($host, $port, $user, $password, $options=array()) {
$conn = NULL; $conn = NULL;
$envs = get_value_in_array("envs", $options, array()); $envs = get_value_in_array("envs", $options, array());
if(!check_db_oracle_installed()) { if(!check_db_oracle_installed()) {
show_errors(); show_errors();
} }
if(array_key_empty("NLS_LANG", $envs)) { if(array_key_empty("NLS_LANG", $envs)) {
$envs["NLS_LANG"] = "KOREAN_KOREA.AL32UTF8"; $envs["NLS_LANG"] = "KOREAN_KOREA.AL32UTF8";
} }
// set environment variables // set environment variables
foreach($envs as $env) { foreach($envs as $env) {
putenv($env); putenv($env);
} }
// get oracle db connection info // get oracle db connection info
$dbs_id = read_storage_file("tnsname.orax", array( $dbs_id = read_storage_file("tnsname.orax", array(
"storage_type" => "example", "storage_type" => "example",
)); ));
// set replace rules // set replace rules
$dbs_rules = array( $dbs_rules = array(
"protocol" => get_value_in_array("service_name", $options, "TCP"), "protocol" => get_value_in_array("service_name", $options, "TCP"),
"service_name" => get_value_in_array("service_name", $options, "ORCL"), "service_name" => get_value_in_array("service_name", $options, "ORCL"),
"host" => $host, "host" => $host,
"port" => $port, "port" => $port,
"server_type" => "DEDICATED" "server_type" => "DEDICATED"
); );
// parse db connection info // parse db connection info
foreach($dbs_rules as $k=>$v) { foreach($dbs_rules as $k=>$v) {
$dbs_id = str_replace("%" . $k . "%", $v, $dbs_id); $dbs_id = str_replace("%" . $k . "%", $v, $dbs_id);
} }
// set db connection // set db connection
$conn = @oci_connect($user, $password, $dbs_id); $conn = @oci_connect($user, $password, $dbs_id);
return $conn; return $conn;
} }
} }
if(!is_fn("exec_db_oracle_fetch_all")) { if(!check_function_exists("exec_db_oracle_fetch_all")) {
function exec_db_oracle_fetch_all($sql, $bind, $conn) { function exec_db_oracle_fetch_all($sql, $bind, $conn) {
$rows = array(); $rows = array();
if(!check_db_oracle_installed()) { if(!check_db_oracle_installed()) {
show_errors(); show_errors();
} }
$stmt = get_db_oracle_stmt($sql, $bind); $stmt = get_db_oracle_stmt($sql, $bind);
oci_execute($stmt); oci_execute($stmt);
while($row = oci_fetch_assoc($stmt)) { while($row = oci_fetch_assoc($stmt)) {
$rows[] = $row; $rows[] = $row;
} }
oci_free_statement($stmt); oci_free_statement($stmt);
return $rows; return $rows;
} }
} }
if(!is_fn("exec_db_oracle_query")) { if(!check_function_exists("exec_db_oracle_query")) {
function exec_db_oracle_query($sql, $bind, $conn) { function exec_db_oracle_query($sql, $bind, $conn) {
$flag = false; $flag = false;
if(!check_db_oracle_installed()) { if(!check_db_oracle_installed()) {
show_errors(); show_errors();
} }
$stmt = get_db_oracle_stmt($sql, $bind); $stmt = get_db_oracle_stmt($sql, $bind);
$flag = oci_execute($stmt); $flag = oci_execute($stmt);
oci_free_statement($stmt); oci_free_statement($stmt);
return $flag; return $flag;
} }
} }
if(!is_fn("close_db_oracle_connect")) { if(!check_function_exists("close_db_oracle_connect")) {
function close_db_oracle_connect() { function close_db_oracle_connect() {
$dbc = get_shared_var("dbc"); $dbc = get_scope("dbc");
if(!check_db_oracle_installed()) { if(!check_db_oracle_installed()) {
show_errors(); show_errors();
} }
return @oci_close($dbc); return @oci_close($dbc);
} }
} }

View File

@ -1,9 +1,8 @@
<?php <?php
/** /**
* @file exectool.php * @file exectool.php
* @created_on 2018-07-22 * @date 2018-07-22
* @updated_on 2020-07-10 * @author Go Namhyeon <gnh1201@gmail.com>
* @author Go Namhyeon <abuse@catswords.net>
* @forked from https://github.com/scipag/PHPUtilities * @forked from https://github.com/scipag/PHPUtilities
* @brief ExecTool helper * @brief ExecTool helper
*/ */
@ -14,7 +13,7 @@
* in the webserver configuration. The function execTests returns an array, which * in the webserver configuration. The function execTests returns an array, which
* contains names of all successful tested PHP functions. * contains names of all successful tested PHP functions.
*/ */
if(!is_fn("exec_test")) { if(!check_function_exists("exec_test")) {
function exec_test() { function exec_test() {
$cmd = "whoami"; $cmd = "whoami";
$cmdPath = "/usr/bin/whoami"; $cmdPath = "/usr/bin/whoami";
@ -104,7 +103,7 @@ if(!is_fn("exec_test")) {
/* /*
* exec_command() executes a command (like "whoami") with the submited method * exec_command() executes a command (like "whoami") with the submited method
*/ */
if(!is_fn("exec_command")) { if(!check_function_exists("exec_command")) {
function exec_command($command, $method="shell_exec", $options=array()) { function exec_command($command, $method="shell_exec", $options=array()) {
$return = false; $return = false;
@ -134,12 +133,7 @@ if(!is_fn("exec_command")) {
return $return; return $return;
} }
// An 'async' option will be return PID if ($method == "") {
if(array_key_equals("async", $options, true)) {
$command = sprintf("%s 1>/dev/null 2>&1 & echo $!;", $command);
}
if (empty($method)) {
// ob_start() will turn on output buffering to collect all output from // ob_start() will turn on output buffering to collect all output from
// exec_test() and ob_end_clean() will clean the buffer afterwards ("garbage collection") // exec_test() and ob_end_clean() will clean the buffer afterwards ("garbage collection")
ob_start(); ob_start();
@ -163,6 +157,7 @@ if(!is_fn("exec_command")) {
case "exec": case "exec":
exec($command, $output); exec($command, $output);
var_dump($output);
break; break;
case "shell_exec": case "shell_exec":
@ -206,11 +201,6 @@ if(!is_fn("exec_command")) {
$return = ob_get_clean(); $return = ob_get_clean();
// PID is integer
if(array_key_equals("async", $options, true)) {
$return = intval(rtrim($return));
}
return $return; return $return;
} }
} }

View File

@ -2,297 +2,297 @@
/** /**
* @file gnuboard.php * @file gnuboard.php
* @date 2018-05-27 * @date 2018-05-27
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Database Helper for Gnuboard 4, Gnuboard 5 * @brief Database Helper for Gnuboard 4, Gnuboard 5
*/ */
// get database prefix // get database prefix
if(!is_fn("gnb_get_db_prefix")) { if(!check_function_exists("gnb_get_db_prefix")) {
function gnb_get_db_prefix($version=4) { function gnb_get_db_prefix($version=4) {
return ($version > 4) ? "g5_" : "g4_"; return ($version > 4) ? "g5_" : "g4_";
} }
} }
// get table // get table
if(!is_fn("gnb_get_db_table")) { if(!check_function_exists("gnb_get_db_table")) {
function gnb_get_db_table($tablename) { function gnb_get_db_table($tablename) {
return (gnb_get_db_prefix() . $tablename); return (gnb_get_db_prefix() . $tablename);
} }
} }
// get write table // get write table
if(!is_fn("gnb_get_write_table")) { if(!check_function_exists("gnb_get_write_table")) {
function gnb_get_write_table($tablename, $version=4) { function gnb_get_write_table($tablename, $version=4) {
$write_prefix = gnb_get_db_prefix() . "write_"; $write_prefix = gnb_get_db_prefix() . "write_";
$write_table = $write_prefix . $tablename; $write_table = $write_prefix . $tablename;
return $write_table; return $write_table;
} }
} }
// get write next // get write next
if(!is_fn("gnb_get_write_next")) { if(!check_function_exists("gnb_get_write_next")) {
function gnb_get_write_next($tablename) { function gnb_get_write_next($tablename) {
$row = exec_db_fetch("select min(wr_num) as min_wr_num from " . gnb_get_write_table($tablename)); $row = exec_db_fetch("select min(wr_num) as min_wr_num from " . gnb_get_write_table($tablename));
return (intval(get_value_in_array("min_wr_num", $row, 0)) - 1); return (intval(get_value_in_array("min_wr_num", $row, 0)) - 1);
} }
} }
// write post // write post
if(!is_fn("gnb_write_post")) { if(!check_function_exists("gnb_write_post")) {
function gnb_write_post($tablename, $data=array(), $version=4) { function gnb_write_post($tablename, $data=array(), $version=4) {
$result = 0; $result = 0;
$write_table = gnb_get_write_table($tablename); $write_table = gnb_get_write_table($tablename);
$mb_id = get_current_user_name(); $mb_id = get_current_user_name();
// load helpers // load helpers
loadHelper("networktool"); loadHelper("networktool");
loadHelper("naturename.kr"); loadHelper("naturename.kr");
$write_fields = array(); $write_fields = array();
$write_default_fields = array( $write_default_fields = array(
"mb_id" => $mb_id, "mb_id" => $mb_id,
"wr_num" => gnb_get_write_next($tablename), "wr_num" => gnb_get_write_next($tablename),
"wr_reply" => "", "wr_reply" => "",
"wr_parent" => "", "wr_parent" => "",
"wr_comment_reply" => "", "wr_comment_reply" => "",
"ca_name" => "", "ca_name" => "",
"wr_option" => "", "wr_option" => "",
"wr_subject" => make_random_id(), "wr_subject" => make_random_id(),
"wr_content" => make_random_id(), "wr_content" => make_random_id(),
"wr_link1" => "", "wr_link1" => "",
"wr_link2" => "", "wr_link2" => "",
"wr_link1_hit" => 0, "wr_link1_hit" => 0,
"wr_link2_hit" => 0, "wr_link2_hit" => 0,
"wr_trackback" => "", "wr_trackback" => "",
"wr_hit" => 0, "wr_hit" => 0,
"wr_good" => 0, "wr_good" => 0,
"wr_nogood" => 0, "wr_nogood" => 0,
"wr_password" => gnb_get_password(make_random_id()), "wr_password" => gnb_get_password(make_random_id()),
"wr_name" => naturename_kr_get_generated_name(), "wr_name" => naturename_kr_get_generated_name(),
"wr_email" => "", "wr_email" => "",
"wr_homepage" => "", "wr_homepage" => "",
"wr_datetime" => get_current_datetime(), "wr_datetime" => get_current_datetime(),
"wr_last" => get_current_datetime(), "wr_last" => get_current_datetime(),
"wr_ip" => get_network_client_addr(), "wr_ip" => get_network_client_addr(),
"wr_1" => "", "wr_1" => "",
"wr_2" => "", "wr_2" => "",
"wr_3" => "", "wr_3" => "",
"wr_4" => "", "wr_4" => "",
"wr_5" => "", "wr_5" => "",
"wr_6" => "", "wr_6" => "",
"wr_7" => "", "wr_7" => "",
"wr_8" => "", "wr_8" => "",
"wr_9" => "", "wr_9" => "",
"wr_10" => "", "wr_10" => "",
); );
foreach($write_default_fields as $k=>$v) { foreach($write_default_fields as $k=>$v) {
if(in_array($k, array("mb_id", "wr_num"))) { if(in_array($k, array("mb_id", "wr_num"))) {
$write_fields[$k] = $v; $write_fields[$k] = $v;
} else { } else {
$write_fields[$k] = array_key_empty($k, $data) ? $v : $data[$k]; $write_fields[$k] = array_key_empty($k, $data) ? $v : $data[$k];
} }
} }
foreach($data as $k=>$v) { foreach($data as $k=>$v) {
if(!in_array($k, $write_default_fields)) { if(!in_array($k, $write_default_fields)) {
$write_fields[$k] = $v; $write_fields[$k] = $v;
} }
} }
if(count($write_fields) > 0) { if(count($write_fields) > 0) {
$sql = get_bind_to_sql_insert($write_table, $write_fields); $sql = get_bind_to_sql_insert($write_table, $write_fields);
if(exec_db_query($sql, $write_fields)) { if(exec_db_query($sql, $write_fields)) {
$result = get_db_last_id(); $result = get_db_last_id();
} }
} }
return $result; return $result;
} }
} }
if(!is_fn("gnb_get_posts")) { if(!check_function_exists("gnb_get_posts")) {
function gnb_get_posts($table_name, $page=1, $limit=20, $options=array()) { function gnb_get_posts($table_name, $page=1, $limit=20, $options=array()) {
$sql = "select * from " . gnb_get_write_table($table_name) . " order by wr_id desc" . get_page_range($page, $limit); $sql = "select * from " . gnb_get_write_table($table_name) . " order by wr_id desc" . get_page_range($page, $limit);
return exec_db_fetch_all($sql); return exec_db_fetch_all($sql);
} }
} }
if(!is_fn("gnb_get_post_by_id")) { if(!check_function_exists("gnb_get_post_by_id")) {
function gnb_get_post_by_id($table_name, $post_id) { function gnb_get_post_by_id($table_name, $post_id) {
$sql = "select * from " . gnb_get_write_table($table_name) . " where wr_id = :wr_id"; $sql = "select * from " . gnb_get_write_table($table_name) . " where wr_id = :wr_id";
return exec_db_fetch($sql, array( return exec_db_fetch($sql, array(
"wr_id" => $post_id "wr_id" => $post_id
)); ));
} }
} }
if(!is_fn("gnb_set_post_parameters")) { if(!check_function_exists("gnb_set_post_parameters")) {
function gnb_set_post_parameters($tablename, $wr_id, $bind=array()) { function gnb_set_post_parameters($tablename, $wr_id, $bind=array()) {
$flag = false; $flag = false;
$excludes = array("wr_id"); $excludes = array("wr_id");
$write_table = gnb_get_write_table($tablename); $write_table = gnb_get_write_table($tablename);
$bind['wr_id'] = get_value_in_array("wr_id", $bind, $wr_id); $bind['wr_id'] = get_value_in_array("wr_id", $bind, $wr_id);
$sql = "update " . $write_table . " set " . get_bind_to_sql_update_set($bind, $excludes) . " where wr_id = :wr_id"; $sql = "update " . $write_table . " set " . get_bind_to_sql_update_set($bind, $excludes) . " where wr_id = :wr_id";
$flag = exec_db_query($sql, $bind); $flag = exec_db_query($sql, $bind);
return $flag; return $flag;
} }
} }
// get member data // get member data
if(!is_fn("gnb_get_member")) { if(!check_function_exists("gnb_get_member")) {
function gnb_get_member($user_name, $tablename="member") { function gnb_get_member($user_name, $tablename="member") {
$result = array(); $result = array();
$bind = array( $bind = array(
"mb_id" => $user_name, "mb_id" => $user_name,
); );
$member_table = gnb_get_db_table($tablename); $member_table = gnb_get_db_table($tablename);
$result = exec_db_fetch("select * from " . $member_table . " where mb_id = :mb_id", $bind); $result = exec_db_fetch("select * from " . $member_table . " where mb_id = :mb_id", $bind);
return $result; return $result;
} }
} }
// get password // get password
if(!is_fn("gnb_get_password")) { if(!check_function_exists("gnb_get_password")) {
function gnb_get_password($password) { function gnb_get_password($password) {
$bind = array( $bind = array(
"password" => $password, "password" => $password,
); );
$row = exec_db_fetch("select password(:password) as pass", $bind); $row = exec_db_fetch("select password(:password) as pass", $bind);
return get_value_in_array("pass", $row, ""); return get_value_in_array("pass", $row, "");
} }
} }
// get config // get config
if(!is_fn("gnb_get_config")) { if(!check_function_exists("gnb_get_config")) {
function gnb_get_config($tablename="config") { function gnb_get_config($tablename="config") {
$result = array(); $result = array();
$config_table = gnb_get_db_table($tablename); $config_table = gnb_get_db_table($tablename);
$result = exec_db_fetch("select * from " . $config_table); $result = exec_db_fetch("select * from " . $config_table);
return $result; return $result;
} }
} }
// run login process // run login process
if(!is_fn("gnb_process_safe_login")) { if(!check_function_exists("gnb_process_safe_login")) {
function gnb_process_safe_login($user_name, $user_password) { function gnb_process_safe_login($user_name, $user_password) {
$result = false; $result = false;
$mb = gnb_get_member($user_name); $mb = gnb_get_member($user_name);
if(!array_key_empty("mb_id", $mb)) { if(!array_key_empty("mb_id", $mb)) {
$user_profile = array( $user_profile = array(
"user_id" => $mb['mb_no'], "user_id" => $mb['mb_no'],
"user_password" => get_password(gnb_get_password($mb['mb_password'])), "user_password" => get_password(gnb_get_password($mb['mb_password'])),
); );
$result = process_safe_login($mb['mb_id'], gnb_get_password($mb['mb_password']), $user_profile); $result = process_safe_login($mb['mb_id'], gnb_get_password($mb['mb_password']), $user_profile);
} }
return $result; return $result;
} }
} }
// run join member // run join member
if(!is_fn("gnb_join_member")) { if(!check_function_exists("gnb_join_member")) {
function gnb_join_member($user_name, $user_password, $data=array(), $tablename="member") { function gnb_join_member($user_name, $user_password, $data=array(), $tablename="member") {
$result = false; $result = false;
$member_table = gnb_get_db_table($tablename); $member_table = gnb_get_db_table($tablename);
$gnb_config = gnb_get_config(); $gnb_config = gnb_get_config();
// load helpers // load helpers
loadHelper("networktool"); loadHelper("networktool");
loadHelper("naturename.kr"); loadHelper("naturename.kr");
// get member info // get member info
$mb = gnb_get_member($user_name); $mb = gnb_get_member($user_name);
// allow join if not exists duplicated members // allow join if not exists duplicated members
if(array_key_empty("mb_id", $mb)) { if(array_key_empty("mb_id", $mb)) {
$member_fields = array(); $member_fields = array();
$member_default_fields = array( $member_default_fields = array(
"mb_id" => $user_name, "mb_id" => $user_name,
"ug_id" => "", "ug_id" => "",
"mb_password" => gnb_get_password($user_password), "mb_password" => gnb_get_password($user_password),
"mb_name" => naturename_kr_get_generated_name(), "mb_name" => naturename_kr_get_generated_name(),
"mb_jumin" => "", "mb_jumin" => "",
"mb_sex" => "", "mb_sex" => "",
"mb_birth" => "", "mb_birth" => "",
"mb_nick" => get_generated_name(), "mb_nick" => get_generated_name(),
"mb_nick_date" => "", "mb_nick_date" => "",
"mb_password_q" => "", "mb_password_q" => "",
"mb_password_a" => "", "mb_password_a" => "",
"mb_email" => "", "mb_email" => "",
"mb_homepage" => "", "mb_homepage" => "",
"mb_tel" => "", "mb_tel" => "",
"mb_hp" => "", "mb_hp" => "",
"mb_zip1" => "", "mb_zip1" => "",
"mb_zip2" => "", "mb_zip2" => "",
"mb_addr1" => "", "mb_addr1" => "",
"mb_addr2" => "", "mb_addr2" => "",
"mb_addr3" => "", "mb_addr3" => "",
"mb_addr_jibeon" => "", "mb_addr_jibeon" => "",
"mb_signature" => "", "mb_signature" => "",
"mb_profile" => "", "mb_profile" => "",
"mb_today_login" => get_current_datetime(), "mb_today_login" => get_current_datetime(),
"mb_datetime" => get_current_datetime(), "mb_datetime" => get_current_datetime(),
"mb_ip" => get_network_client_addr(), "mb_ip" => get_network_client_addr(),
"mb_level" => get_value_in_array("cf_register_level", $gnb_config), "mb_level" => get_value_in_array("cf_register_level", $gnb_config),
"mb_recommend" => "", "mb_recommend" => "",
"mb_login_ip" => get_network_client_addr(), "mb_login_ip" => get_network_client_addr(),
"mb_mailling" => "", "mb_mailling" => "",
"mb_sms" => "", "mb_sms" => "",
"mb_open" => "", "mb_open" => "",
"mb_open_date" => get_current_datetime(), "mb_open_date" => get_current_datetime(),
"mb_1" => "", "mb_1" => "",
"mb_2" => "", "mb_2" => "",
"mb_3" => "", "mb_3" => "",
"mb_4" => "", "mb_4" => "",
"mb_5" => "", "mb_5" => "",
"mb_6" => "", "mb_6" => "",
"mb_7" => "", "mb_7" => "",
"mb_8" => "", "mb_8" => "",
"mb_9" => "", "mb_9" => "",
"mb_10" => "", "mb_10" => "",
); );
foreach($member_default_fields as $k=>$v) { foreach($member_default_fields as $k=>$v) {
if(in_array($k, array("mb_id", "mb_password"))) { if(in_array($k, array("mb_id", "mb_password"))) {
$member_fields[$k] = $v; $member_fields[$k] = $v;
} else { } else {
$member_fields[$k] = array_key_empty($k, $data) ? $v : $data[$k]; $member_fields[$k] = array_key_empty($k, $data) ? $v : $data[$k];
} }
} }
foreach($data as $k=>$v) { foreach($data as $k=>$v) {
if(!in_array($k, $member_default_fields)) { if(!in_array($k, $member_default_fields)) {
$member_fields[$k] = $v; $member_fields[$k] = $v;
} }
} }
if(count($member_fields) > 0) { if(count($member_fields) > 0) {
$sql = get_bind_to_sql_insert($member_table, $member_fields); $sql = get_bind_to_sql_insert($member_table, $member_fields);
$result = exec_db_query($sql, $member_fields); $result = exec_db_query($sql, $member_fields);
} }
} }
return $result; return $result;
} }
} }
if(!is_fn("gnb_make_pipelined_data")) { if(!check_function_exists("gnb_make_pipelined_data")) {
function gnb_make_pipelined_data($data, $delimiter="|") { function gnb_make_pipelined_data($data, $delimiter="|") {
foreach($data as $k=>$v) { foreach($data as $k=>$v) {
$data[$k] = str_replace($delimiter, " ", $v); $data[$k] = str_replace($delimiter, " ", $v);
} }
return implode($delimiter, $data); return implode($delimiter, $data);
} }
} }

View File

@ -1,24 +0,0 @@
<?php
/**
* @file hiddentool.php
* @created_on 2021-05-24
* @updated_on 2022-09-13
* @author Go Namhyeon <abuse@catswords.net>
* @brief Tools for Hidden Services (e.g. Tor, I2P, etc...)
*/
if (!is_fn("detect_hidden_service")) {
function detect_hidden_service() {
$score = 0;
$suffixes = array("onion", "i2p", "crypto");
$forwarded_host = get_header_value("X-Forwarded-Host");
if (!empty($forwarded_host)) {
if (in_array(end(explode('.', $forwarded_host)), $suffixes)) {
$score += 1;
}
}
return $score;
};
}

View File

@ -2,77 +2,77 @@
/** /**
* @file hybridauth.dbt.php * @file hybridauth.dbt.php
* @date 2018-04-15 * @date 2018-04-15
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief HybridAuth DB Helper * @brief HybridAuth DB Helper
*/ */
if(!is_fn("store_hybridauth_session")) { if(!check_function_exists("store_hybridauth_session")) {
function store_hybridauth_session($data, $user_id) { function store_hybridauth_session($data, $user_id) {
$connection_id = false; $connection_id = false;
$bind = array( $bind = array(
"user_id" => $user_id, "user_id" => $user_id,
"hybridauth_session" => $data "hybridauth_session" => $data
); );
$sql = get_bind_to_sql_insert("users_connections", $bind); $sql = get_bind_to_sql_insert("users_connections", $bind);
if(exec_db_query($sql, $bind)) { if(exec_db_query($sql, $bind)) {
$connection_id = get_db_last_id(); $connection_id = get_db_last_id();
} }
return $connection_id; return $connection_id;
} }
} }
if(!is_fn("get_stored_hybridauth_session")) { if(!check_function_exists("get_stored_hybridauth_session")) {
function get_stored_hybridauth_session($connection_id) { function get_stored_hybridauth_session($connection_id) {
$stored_session = false; $stored_session = false;
$bind = array( $bind = array(
"connection_id" => $connection_id "connection_id" => $connection_id
); );
$sql = get_bind_to_sql_select("users_connections", $bind); $sql = get_bind_to_sql_select("users_connections", $bind);
$row = exec_db_fetch($sql, $bind); $row = exec_db_fetch($sql, $bind);
$stored_session = get_value_in_array("hybridauth_session", $row, $stored_session); $stored_session = get_value_in_array("hybridauth_session", $row, $stored_session);
return $stored_session; return $stored_session;
} }
} }
if(!is_fn("get_hybridauth_connection_info")) { if(!check_function_exists("get_hybridauth_connection_info")) {
function get_hybridauth_connection_info($connection_id) { function get_hybridauth_connection_info($connection_id) {
$connection_info = false; $connection_info = false;
$bind = array( $bind = array(
"connection_id" => $connection_id "connection_id" => $connection_id
); );
$sql = get_bind_to_sql_select("users_connections", $bind); $sql = get_bind_to_sql_select("users_connections", $bind);
$row = exec_db_fetch($sql, $bind); $row = exec_db_fetch($sql, $bind);
if(!array_key_empty("connection_id", $row)) { if(!array_key_empty("connection_id", $row)) {
$connection_info = $row; $connection_info = $row;
} }
return $connection_info; return $connection_info;
} }
} }
if(!is_fn("get_hybridauth_connection_id")) { if(!check_function_exists("get_hybridauth_connection_id")) {
function get_hybridauth_connection_id($user_id) { function get_hybridauth_connection_id($user_id) {
$connection_id = false; $connection_id = false;
$bind = array( $bind = array(
"user_id" => $user_id "user_id" => $user_id
); );
$sql = get_bind_to_sql_select("users_connections", $bind, array( $sql = get_bind_to_sql_select("users_connections", $bind, array(
"setorders" => array("connection_id desc"), "setorders" => array("connection_id desc"),
"setpage" => 1, "setpage" => 1,
"setlimit" => 1 "setlimit" => 1
)); ));
$row = exec_db_fetch($sql, $bind); $row = exec_db_fetch($sql, $bind);
$connection_id = get_value_in_array("connection_id", $row, $connection_id); $connection_id = get_value_in_array("connection_id", $row, $connection_id);
return $connection_id; return $connection_id;
} }
} }

View File

@ -2,67 +2,67 @@
/** /**
* @file hybridauth.lnk.php * @file hybridauth.lnk.php
* @date 2018-09-26 * @date 2018-09-26
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief HybridAuth library RSF Linker * @brief HybridAuth library RSF Linker
***/ ***/
if(!is_fn("hybridauth_load")) { if(!check_function_exists("hybridauth_load")) {
function hybridauth_load($provider="") { function hybridauth_load($provider="") {
$result = false; $result = false;
$configfile = "./vendor/hybridauth/hybridauth/config.php"; $configfile = "./vendor/hybridauth/hybridauth/config.php";
$required_files = array( $required_files = array(
"hybridauth/hybridauth/Hybrid/Auth", "hybridauth/hybridauth/Hybrid/Auth",
"hybridauth/hybridauth/Hybrid/Endpoint" "hybridauth/hybridauth/Hybrid/Endpoint"
); );
// support facebook (php graph api v5) // support facebook (php graph api v5)
$provider = strtolower($provider); $provider = strtolower($provider);
switch($provider) { switch($provider) {
case "facebook": case "facebook":
$required_files[] = "facebook-sdk-v5/src/Facebook/autoload"; $required_files[] = "facebook-sdk-v5/src/Facebook/autoload";
break; break;
} }
// load required files // load required files
foreach($required_files as $file) { foreach($required_files as $file) {
$inc_file = "./vendor/" . $file . ".php"; $inc_file = "./vendor/" . $file . ".php";
if(!file_exists($inc_file)) { if(!file_exists($inc_file)) {
set_error("File not exists. " . $inc_file); set_error("File not exists. " . $inc_file);
show_errors(); show_errors();
} else { } else {
include("./vendor/" . $file . ".php"); include("./vendor/" . $file . ".php");
} }
} }
if(file_exists($configfile)) { if(file_exists($configfile)) {
$result = $configfile; $result = $configfile;
} }
return $result; return $result;
} }
} }
if(!is_fn("hybridauth_check_redirect")) { if(!check_function_exists("hybridauth_check_redirect")) {
function hybridauth_check_redirect() { function hybridauth_check_redirect() {
$flag = false; $flag = false;
$requests = get_requests(); $requests = get_requests();
if(loadHelper("string.utils")) { if(loadHelper("string.utils")) {
foreach($requests['_ALL'] as $k=>$v) { foreach($requests['_ALL'] as $k=>$v) {
if(startsWith($k, "hauth")) { if(startsWith($k, "hauth")) {
$flag = true; $flag = true;
break; break;
} }
} }
} }
return $flag; return $flag;
} }
} }
if(!is_fn("hybridauth_process")) { if(!check_function_exists("hybridauth_process")) {
function hybridauth_process() { function hybridauth_process() {
Hybrid_Endpoint::process(); Hybrid_Endpoint::process();
} }
} }

View File

@ -2,13 +2,13 @@
/** /**
* @file isemail.lnk.php * @file isemail.lnk.php
* @date 2018-03-02 * @date 2018-03-02
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief IsEmail library linker * @brief IsEmail library linker
*/ */
if(!is_fn("is_email")) { if(!check_function_exists("is_email")) {
$inc_file = "./vendor/_dist/isemail/is_email.php"; $inc_file = "./vendor/isemail/is_email.php";
if(file_exists($inc_file)) { if(file_exists($inc_file)) {
include($inc_file); include($inc_file);
} }
} }

View File

@ -1,32 +0,0 @@
<?php
/**
* @file jCryption.lnk.php
* @date 2018-09-30
* @author Go Namhyeon <abuse@catswords.net>
* @brief jCryption (alternative HTTPS on javascript) Helper
*/
if(!is_fn("jCryption_load")) {
function jCryption_load() {
$required_files = array(
"jCryption/sqAES",
"jCryption/JCryption"
);
foreach($required_files as $file) {
$inc_file = get_current_working_dir() . "/vendor/_dist/" . $file . ".php";
if(file_exists($inc_file)) {
include($inc_file);
}
}
}
}
if(!is_fn("jCryption_get")) {
function jCryption_get($idx=0, $selector="") {
$s = array();
$s[] = "JCryption::decrypt();";
$s[] = sprintf("$(function(){$(\"%s\").jCryption();});", $selector);
$s[] = sprintf("%s/vendor/_dist/jCryption/js/jquery.jcryption.3.1.0.js", base_url());
return $s[$idx];
}
}

42
helper/jcryption.lnk.php Normal file
View File

@ -0,0 +1,42 @@
<?php
/**
* @file jcryption.lnk.php
* @date 2018-09-30
* @author Go Namhyeon <gnh1201@gmail.com>
* @brief jCryption (alternative HTTPS on javascript) Helper
*/
if(!check_function_exists("jcryption_load")) {
function jcryption_load() {
$required_files = array(
"jCryption/sqAES",
"jCryption/JCryption"
);
foreach($required_files as $file) {
$inc_file = get_current_working_dir() . "/vendor/" . $file . ".php";
if(file_exists($inc_file)) {
include($inc_file);
}
}
}
}
if(!check_function_exists("jcryption_get_code")) {
function jcryption_get_code() {
return "JCryption::decrypt();";
}
}
if(!check_function_exists("jcryption_get_jscode")) {
function jcryption_get_jscode($selector) {
return "$(function() { $(" . $selector . ").jCryption(); });";
}
}
if(!check_function_exists("jcryption_get_js_url")) {
function jcryption_get_js_url() {
return "JCryption::decrypt();";
}
return base_url() . "vendor/jCryption/js/jquery.jcryption.3.1.0.js";
}
}

View File

@ -1,69 +0,0 @@
<?php
// @created_on 2019-10-13
// @updated_on 2020-01-27
// @author Go Namhyeon <abuse@catswords.net>
if(!is_fn("json_decode_ex")) {
function json_decode_ex($data, $options=array()) {
$result = false;
$is_assoc = array_key_equals("assoc", $options, true);
$invalid_fn = array(
"NO_FUNCTION_JSON_DECODE" => "json_decode",
"NO_FUNCTION_JSON_LAST_ERROR" => "json_last_error",
);
$error = check_invalid_function($invalid_fn);
if($error == JSON_ERROR_NONE) {
if($is_assoc) {
$result = json_decode($data, true);
} else {
$result = json_decode($data);
}
} else {
$result = new stdClass();
$result->error = $error;
}
return $result;
}
}
if(!is_fn("json_encode_ex")) {
function json_encode_ex($data, $options=array()) {
$result = false;
$is_adaptive = array_key_equals("adaptive", $options, true);
$is_pretty = array_key_equals("pretty", $options, true);
$invalid_fn = array(
"NO_FUNCTION_JSON_ENCODE" => "json_decode",
"NO_FUNCTION_JSON_LAST_ERROR" => "json_last_error",
);
$error = check_invalid_function($invalid_fn);
if($error == JSON_ERROR_NONE) {
if($is_adaptive) {
// 2018-06-01: Adaptive JSON is always quotes without escape non-ascii characters
$lines = array();
foreach($data as $k=>$v) {
if(is_array($v)) {
$lines[] = sprintf("\"%s\":%s", make_safe_argument($k), get_adaptive_json($v));
} else {
$lines[] = sprintf("\"%s\":\"%s\"", make_safe_argument($k), make_safe_argument($v));
}
}
$result = "{" . implode(",", $lines) . "}";
} else {
if($is_pretty) {
$result = json_encode($data, JSON_PRETTY_PRINT);
} else {
$result = json_encode($data);
}
}
} else {
$result = sprintf("{\"error\": \"%s\"}", $error);
}
return $result;
}
}

View File

@ -2,7 +2,7 @@
/** /**
* @file kimsboard7.dbt.php * @file kimsboard7.dbt.php
* @date 2018-08-20 * @date 2018-08-20
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Database Helper for Kimsboard 7 (experimental) * @brief Database Helper for Kimsboard 7 (experimental)
*/ */

View File

@ -1,75 +0,0 @@
<?php
/**
* @file lguplus.api.php
* @date 2019-10-07
* @author Go Namhyeon <abuse@catswords.net>
* @brief `LGU+`or `LGUPlus` is trandmark of LGUPlus Co. Ltd.
*/
require_once("./vendor/_dist/lguplus/openapi/message.php");
use openapi\message;
function lguplus_get_config() {
$config = get_config();
return array(
"enabled" => $config['lguplus_enabled'],
"key" => $config['lguplus_key'],
"secret" => $config['lguplus_secret'],
"from" => $config['lguplus_from'],
"country" => $config['lguplus_country'],
"subject" => $config['lguplus_subject']
);
}
function lguplus_send_message($message, $to="") {
$cnf = lguplus_get_config();
$data = array(
"response" => false,
"error" => false
);
if(!array_key_equals("enabled", $cnf, 1)) {
$data['error'] = "this is disabled. please set lguplus_enabled to 1";
return $data;
}
try {
$API_KEY = $cnf['key'];
$API_PWD = $cnf['secret'];
$msg = new message($API_KEY, $API_PWD, 1, false);
$ch = $msg->getHandle( "/v1/send" );
$data = array(
"send_type" => "S", // 발송형태(R:예약,S:즉시)
"msg_type" => "S", // SMS : S, LMS : L, MMS : M
"to" => $to, // 수신자번호, ","으로 구분하여 100개까지 지정 가능하다.
"from" => get_value_in_array("from", $cnf, "01000000000"), // 발신자 번호, 발신자 번호는 사전등록된 번호여야 한다.
"subject" => get_value_in_array("subject", $cnf, "Untitled text message"), // LMS, MMS 의 경우, 제목을 입력할 수 있다.
"msg" => $message, // 메시지 본문 내용
"device_id" => "", // 디바이스 아이디를 지정하여 특정 디바이스를 발송제어할 수 있다.
"datetime" => "", // 예약시간(YYYYMMDDHH24MI)
"country" => get_value_in_array("country", $cnf, "82"), // 국가 코드
);
$msg->setData( $ch, $data );
$response = $msg->sendPost($ch);
$data['response'] = $response;
if ($response === FALSE) {
$data['error'] = array(
"code" => curl_error($ch),
"message" => "CURL_ERROR"
);
}
} catch(Exception $e) {
$data['error'] = array(
"code" => $e->getCode(),
"message" => $e->getMessage()
);
}
return $data;
}

View File

@ -1,22 +0,0 @@
<?php
/**
* @file lguplus.install.php
* @date 2019-10-13
* @author Go Namhyeon <abuse@catswords.net>
* @brief `LGU+`or `LGUPlus` is trandmark of LGUPlus Co. Ltd.
*/
if(!defined("_DEF_RSF_")) set_error_exit("do not allow access");
if(!is_fn("lguplus_install")) {
function lguplus_install() {
$response = get_web_page("https://openapi.sms.uplus.co.kr/sdkFile/php_sdk.zip");
$fw = write_storage_file($response['content'], array(
"extension" => "zip"
));
@unzip($fw, get_storage_path());
// todo
}
}

View File

@ -2,12 +2,12 @@
/** /**
* @file mailgun.api.php * @file mailgun.api.php
* @date 2019-04-12 * @date 2019-04-12
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Mailgun REST API interface module * @brief Mailgun REST API interface module
* @documentation https://documentation.mailgun.com/en/latest/api-sending.html * @documentation https://documentation.mailgun.com/en/latest/api-sending.html
*/ */
if(!is_fn("mailgun_get_config")) { if(!check_function_exists("mailgun_get_config")) {
function mailgun_get_config() { function mailgun_get_config() {
$config = get_config(); $config = get_config();
@ -20,7 +20,7 @@ if(!is_fn("mailgun_get_config")) {
} }
} }
if(!is_fn("mailgun_send_message")) { if(!check_function_exists("mailgun_send_message")) {
function mailgun_send_message($content, $to, $subject="Untitled") { function mailgun_send_message($content, $to, $subject="Untitled") {
$response = false; $response = false;

View File

@ -2,15 +2,15 @@
/** /**
* @file metaparser.lnk.php * @file metaparser.lnk.php
* @date 2018-03-21 * @date 2018-03-21
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief PHP-Metaparser library linker * @brief PHP-Metaparser library linker
*/ */
if(!class_exists("MetaParser")) { if(!class_exists("MetaParser")) {
$usenames = array( $usenames = array(
"PHP-MetaParser/MetaParser.class" "PHP-MetaParser/MetaParser.class"
); );
foreach($usenames as $name) { foreach($usenames as $name) {
include("./vendor/" . $name . ".php"); include("./vendor/" . $name . ".php");
} }
} }

View File

@ -1,21 +0,0 @@
<?php
// @file migrate.1.5.php
// migration helper from ResaonbleFramework 1.5
if(!is_fn("check_function_exists")) {
function check_function_exists($fn) {
return is_fn($fn);
}
}
if(!is_fn("set_scope")) {
function set_scope($k, $v) {
return set_shared_var($k, $v);
}
}
if(!is_fn("get_scope")) {
function get_scope($k) {
return get_shared_var($k);
}
}

View File

@ -2,12 +2,12 @@
/** /**
* @file mobiletool.php * @file mobiletool.php
* @date 2019-04-29 * @date 2019-04-29
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Mobile Tool * @brief Mobile Tool
* @documentation https://www.w3.org/Mobile/training/device-detection/mobile_detector.txt * @documentation https://www.w3.org/Mobile/training/device-detection/mobile_detector.txt
*/ */
if(!is_fn("detect_mobile")) { if(!check_function_exists("detect_mobile")) {
function detect_mobile() { function detect_mobile() {
// This function returns the value of a local variable ($dm) // This function returns the value of a local variable ($dm)
// that is 0 if a desktop client is detected and > 0 for mobile. // that is 0 if a desktop client is detected and > 0 for mobile.

View File

@ -1,13 +1,12 @@
<?php <?php
/** /**
* @file networktool.php * @file networktool.php
* @created_on 2018-04-11 * @date 2018-04-11
* @updated_on 2022-09-16 * @author Go Namhyeon <gnh1201@gmail.com>
* @author Go Namhyeon <abuse@catswords.net>
* @brief Network tool helper * @brief Network tool helper
*/ */
if(!is_fn("get_network_event")) { if(!check_function_exists("get_network_event")) {
function get_network_event() { function get_network_event() {
$config = get_config(); $config = get_config();
@ -25,7 +24,7 @@ if(!is_fn("get_network_event")) {
} }
} }
if(!is_fn("get_network_client_addr")) { if(!check_function_exists("get_network_client_addr")) {
function get_network_client_addr() { function get_network_client_addr() {
$addr = ''; $addr = '';
if (isset($_SERVER['HTTP_CLIENT_IP'])) if (isset($_SERVER['HTTP_CLIENT_IP']))
@ -48,7 +47,7 @@ if(!is_fn("get_network_client_addr")) {
} }
} }
if(!is_fn("get_network_server_addr")) { if(!check_function_exists("get_network_server_addr")) {
function get_network_server_addr() { function get_network_server_addr() {
$addr = ''; $addr = '';
if(isset($_SERVER['SERVER_ADDR']) && isset($_SERVER['SERVER_PORT'])) { if(isset($_SERVER['SERVER_ADDR']) && isset($_SERVER['SERVER_PORT'])) {
@ -57,7 +56,7 @@ if(!is_fn("get_network_server_addr")) {
$addr = $_SERVER['SERVER_ADDR']; $addr = $_SERVER['SERVER_ADDR'];
} else if(isset($_SERVER['LOCAL_ADDR'])) { } else if(isset($_SERVER['LOCAL_ADDR'])) {
$addr = $_SERVER['LOCAL_ADDR']; $addr = $_SERVER['LOCAL_ADDR'];
} else if(is_fn(array("gethostname", "gethostbyname"))) { } else if(check_function_exists(array("gethostname", "gethostbyname"))) {
$host = gethostname(); $host = gethostname();
$addr = gethostbyname($host); $addr = gethostbyname($host);
} else { } else {
@ -67,14 +66,14 @@ if(!is_fn("get_network_server_addr")) {
} }
} }
if(!is_fn("get_network_hostname")) { if(!check_function_exists("get_network_hostname")) {
function get_network_hostname() { function get_network_hostname() {
$host = ''; $host = '';
if(isset($_SERVER['HTTP_HOST'])) { if(isset($_SERVER['HTTP_HOST'])) {
$host = $_SERVER['HTTP_HOST']; $host = $_SERVER['HTTP_HOST'];
} else if(isset($_SERVER['SERVER_NAME'])) { } else if(isset($_SERVER['SERVER_NAME'])) {
$host = $_SERVER['SERVER_NAME']; $host = $_SERVER['SERVER_NAME'];
} else if(!is_fn('gethostname')) { } else if(!check_function_exists('gethostname')) {
$host = gethostname(); $host = gethostname();
} else { } else {
$host = 'UNKNOWN'; $host = 'UNKNOWN';
@ -84,54 +83,46 @@ if(!is_fn("get_network_hostname")) {
} }
} }
if(!is_fn("check_secure_protocol")) { if(!check_function_exists("check_secure_protocol")) {
function check_secure_protocol() { function check_secure_protocol() {
return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443; return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443;
} }
} }
if(!is_fn("get_os_platform")) { if(!check_function_exists("get_os_platform")) {
function get_os_platform() { function get_os_platform() {
$os = ""; $os = "";
if(defined("PHP_OS")) { if(defined("PHP_OS")) {
$os = PHP_OS; $os = PHP_OS;
} else { } else {
$os = php_uname(s); $os = php_uname(s);
} }
return $os; return $os;
} }
} }
if(!is_fn("get_network_outbound_addr")) { if(!check_function_exists("get_network_outbound_addr")) {
function get_network_outbound_addr($protocol="") { function get_network_outbound_addr($protocol="") {
$addr = false; $addr = false;
$config = get_config(); $config = get_config();
// via icanhazip.com // via icanhazip.com
if(loadHelper("webpagetool")) { if(loadHelper("webpagetool")) {
$remote_host = "http://" . ($protocol == "ipv6" ? "ipv6." : "") . "icanhazip.com"; $remote_host = "http://" . ($protocol == "ipv6" ? "ipv6." : "") . "icanhazip.com";
$response = get_web_page($remote_host, "get.cache"); $response = get_web_page($remote_host, "get.cache");
$addr = get_value_in_array("content", $response, $addr); $addr = get_value_in_array("content", $response, $addr);
} }
// via opendns.com // via opendns.com
if(!$addr && loadHelper("exectool")) { if(!$addr && loadHelper("exectool")) {
$cmd = "dig +short myip.opendns.com @resolver1.opendns.com"; $cmd = "dig +short myip.opendns.com @resolver1.opendns.com";
$addr = exec_command($cmd, "shell_exec", array( $addr = exec_command($cmd, "shell_exec", array(
"cache" => true "cache" => true
)); ));
} }
return $addr; return $addr;
} }
}
if(!is_fn("detect_perf_agent")) {
function detect_perf_agent() {
$evt = get_network_event();
$agent = $evt['agent'];
return preg_match('(PingdomPageSpeed|GTmetrix)', $agent) === 1;
}
} }

View File

@ -2,19 +2,19 @@
/** /**
* @file obfuscator.php * @file obfuscator.php
* @date 2018-10-21 * @date 2018-10-21
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief PHP Obfuscator for ReasonableFramework * @brief PHP Obfuscator for ReasonableFramework
*/ */
if(!is_fn("get_obfuscator")) { if(!check_function_exists("get_obfuscator")) {
function get_obfuscator() { function get_obfuscator() {
$obfuscator = rand(1, 15); $obfuscator = rand(1, 15);
set_shared_var("obfuscator", $obfuscator); set_scope("obfuscator", $obfuscator);
return $obfuscator; return $obfuscator;
} }
} }
if(!is_fn("get_obfuscated_result")) { if(!check_function_exists("get_obfuscated_result")) {
function get_obfuscated_result($raw) { function get_obfuscated_result($raw) {
$result = false; $result = false;

5
helper/pChart2.lnk.php Normal file
View File

@ -0,0 +1,5 @@
<?php
loadVender("pChart2/");

View File

@ -2,98 +2,98 @@
/** /**
* @file pagenate.php * @file pagenate.php
* @date 2018-01-01 * @date 2018-01-01
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Page navigation helper * @brief Page navigation helper
*/ */
if(!is_fn("paginate_get_current_page")) { if(!check_function_exists("paginate_get_current_page")) {
function paginate_get_current_page($page=1) { function paginate_get_current_page($page=1) {
$current_page = 1; $current_page = 1;
if($page > 0) { if($page > 0) {
$current_page = $page; $current_page = $page;
} }
return $current_page; return $current_page;
} }
} }
if(!is_fn("paginate_get_total_pages")) { if(!check_function_exists("paginate_get_total_pages")) {
function paginate_get_total_pages($item_per_page=1.0, $total_records=1.0) { function paginate_get_total_pages($item_per_page=1.0, $total_records=1.0) {
$total_pages = 1; $total_pages = 1;
if($item_per_page > 0) { if($item_per_page > 0) {
$total_pages = ceil($total_records / $item_per_page); $total_pages = ceil($total_records / $item_per_page);
} }
return $total_pages; return $total_pages;
} }
} }
if(!is_fn("paginate_get_query_string")) { if(!check_function_exists("paginate_get_query_string")) {
function paginate_get_query_string() { function paginate_get_query_string() {
loadHelper("networktool"); loadHelper("networktool");
$net_event = get_network_event(); $net_event = get_network_event();
return get_value_in_array("query", $net_event, ""); return get_value_in_array("query", $net_event, "");
} }
} }
// https://www.sanwebe.com/2011/05/php-pagination-function // https://www.sanwebe.com/2011/05/php-pagination-function
if(!is_fn("paginate_make_html")) { if(!check_function_exists("paginate_make_html")) {
function paginate_make_html($item_per_page, $current_page, $total_records, $total_pages, $page_url, $qry='') { function paginate_make_html($item_per_page, $current_page, $total_records, $total_pages, $page_url, $qry='') {
$pagination = ''; $pagination = '';
if($total_pages > 0 && $total_pages != 1 && $current_page <= $total_pages) { //verify total pages and current page number if($total_pages > 0 && $total_pages != 1 && $current_page <= $total_pages) { //verify total pages and current page number
$pagination .= '<ul class="pagination justify-content-end">'; $pagination .= '<ul class="pagination justify-content-end">';
$right_links = $current_page + 3; $right_links = $current_page + 3;
$previous = $current_page - 3; //previous link $previous = $current_page - 3; //previous link
$next = $current_page + 1; //next link $next = $current_page + 1; //next link
$first_link = true; //boolean var to decide our first link $first_link = true; //boolean var to decide our first link
// prevent minus page number // prevent minus page number
if($previous < 0) { if($previous < 0) {
$previous = 1; $previous = 1;
} }
$qry_url = ''; $qry_url = '';
if(!empty($qry)) { if(!empty($qry)) {
$qry_url = '?' . $qry; $qry_url = '?' . $qry;
} }
if($current_page > 1) { if($current_page > 1) {
$previous_link = ($previous == 0) ? 1 : $previous; $previous_link = ($previous == 0) ? 1 : $previous;
$pagination .= '<li class="page-item first"><a class="page-link" href="' . $page_url . '1' . $qry_url.'" title="First">&laquo;</a></li>'; //first link $pagination .= '<li class="page-item first"><a class="page-link" href="' . $page_url . '1' . $qry_url.'" title="First">&laquo;</a></li>'; //first link
$pagination .= '<li class="page-item"><a class="page-link" href="' . $page_url . $previous_link . $qry_url.'" title="Previous">&lt;</a></li>'; //previous link $pagination .= '<li class="page-item"><a class="page-link" href="' . $page_url . $previous_link . $qry_url.'" title="Previous">&lt;</a></li>'; //previous link
for($i = ($current_page-2); $i < $current_page; $i++) { //Create left-hand side links for($i = ($current_page-2); $i < $current_page; $i++) { //Create left-hand side links
if($i > 0) { if($i > 0) {
$pagination .= '<li class="page-item"><a class="page-link" href="' . $page_url . $i . $qry_url . '">' . $i . '</a></li>'; $pagination .= '<li class="page-item"><a class="page-link" href="' . $page_url . $i . $qry_url . '">' . $i . '</a></li>';
} }
} }
$first_link = false; //set first link to false $first_link = false; //set first link to false
} }
if($first_link) { //if current active page is first link if($first_link) { //if current active page is first link
$pagination .= '<li class="page-item first active"><a class="page-link" href="#">' . $current_page . '</a></li>'; $pagination .= '<li class="page-item first active"><a class="page-link" href="#">' . $current_page . '</a></li>';
} elseif($current_page == $total_pages) { //if it's the last active link } elseif($current_page == $total_pages) { //if it's the last active link
$pagination .= '<li class="page-item last active"><a class="page-link" href="#">' . $current_page . '</a></li>'; $pagination .= '<li class="page-item last active"><a class="page-link" href="#">' . $current_page . '</a></li>';
} else { //regular current link } else { //regular current link
$pagination .= '<li class="page-item active"><a class="page-link" href="#">' . $current_page . '</a></li>'; $pagination .= '<li class="page-item active"><a class="page-link" href="#">' . $current_page . '</a></li>';
} }
for($i = $current_page+1; $i < $right_links ; $i++) { //create right-hand side links for($i = $current_page+1; $i < $right_links ; $i++) { //create right-hand side links
if($i <= $total_pages) { if($i <= $total_pages) {
$pagination .= '<li class="page-item"><a class="page-link" href="' . $page_url . $i . $qry_url.'">' . $i . '</a></li>'; $pagination .= '<li class="page-item"><a class="page-link" href="' . $page_url . $i . $qry_url.'">' . $i . '</a></li>';
} }
} }
if($current_page < $total_pages) { if($current_page < $total_pages) {
$next_link = ($i > $total_pages) ? $total_pages : $i; $next_link = ($i > $total_pages) ? $total_pages : $i;
$pagination .= '<li class="page-item"><a class="page-link" href="'. $page_url . $next_link . $qry_url.'" >&gt;</a></li>'; //next link $pagination .= '<li class="page-item"><a class="page-link" href="'. $page_url . $next_link . $qry_url.'" >&gt;</a></li>'; //next link
$pagination .= '<li class="page-item last"><a class="page-link" href="' . $page_url . $total_pages . $qry_url.'" title="Last">&raquo;</a></li>'; //last link $pagination .= '<li class="page-item last"><a class="page-link" href="' . $page_url . $total_pages . $qry_url.'" title="Last">&raquo;</a></li>'; //last link
} }
$pagination .= '</ul>'; $pagination .= '</ul>';
} }
return $pagination; //return pagination links return $pagination; //return pagination links
} }
} }

View File

@ -1,68 +0,0 @@
<?php
/**
* @file perftool.php
* @created_on 2020-02-19
* @updated_on 2020-02-24
* @author Go Namhyeon <abuse@catswords.net>
* @brief PerfTool helper
*/
if(!is_fn("get_cpu_idle")) {
function get_cpu_idle() {
$idle = false;
if(loadHelper("exectool")) {
$idle = floatval(trim(exec_command("top -n 1 -b | grep -i Cpu\(s\) | awk '{print \$8}'"))) / 100.0;
}
return $idle;
}
}
if(!is_fn("get_cpu_idle2")) {
function get_cpu_idle2() {
$idle = false;
if(loadHelper("exectool")) {
$idle = floatval(trim(exec_command("grep 'cpu ' /proc/stat | awk '{idle=(\$5)/(\$2+\$4+\$5)} END {print idle}'")));
}
return $idle;
}
}
if(!is_fn("set_min_cpu_idle")) {
function set_min_cpu_idle($ratio=0.01) {
$wait = 0;
// default (cpu_sleep_time): 3 seconds
$cpu_sleep_time = floatval(get_value_in_array("cpu_sleep_time", $config, 3));
if($ratio > 0 && $ratio < 1) {
while(get_cpu_idle() < $ratio) {
if($wait == 0) {
write_common_log("CPU usage exceeded. wait a few seconds...", "helper/preftool");
}
sleep($cpu_sleep_time);
$wait++;
}
}
if($wait > 0) {
write_common_log(sprintf("CPU usage recovered. waited %s seconds ago", ($wait * $cpu_sleep_time)), "helper/preftool");
}
}
}
if(!is_fn("set_cpu_usage_limit")) {
function set_cpu_usage_limit($ratio=0.9) {
$config = get_config();
$num_cores = get_value_in_array("cpu_num_cores", $config, 1);
$pid = get_shared_var("mypid");
if(!empty($pid) && loadHelper("exectool")) {
write_common_log(sprintf("Limited CPU usage (%s, %s)<=(PID, LIMIT)", $pid, ($ratio * $num_cores) * 100), "helper/perftool");
exec_command(sprintf("cpulimit --pid %s --limit %s", $pid, ($ratio * $num_cores) * 100));
}
}
}

View File

@ -1,39 +0,0 @@
<?php
/**
* @file pgkcp.install.php
* @date 2019-10-13
* @author Go Namhyeon <abuse@catswords.net>
* @brief KCP PG(Payment Gateway) Auto-Install Tool
*/
if(!defined("_DEF_RSF_")) set_error_exit("do not allow access");
loadHelper("pgkcp.lnk");
if(!is_fn("install_pgkcp")) {
function install_pgkcp() {
$response = get_web_page("https://admin8.kcp.co.kr/assist/download/sampleDownload", "get", array(
"type1" => "FM01",
"type2" => "FS04"
));
// step 1
$fw = write_storage_file($response['content'], array(
"extension" => "zip"
));
@unzip($fw, get_storage_path());
// step 2
$fw = write_storage_file("", array(
"mode" => "fake",
"filename" => sprintf("NHNKCP_PAYMENT_STANDARD_PHP/NHNKCP_PAYMENT_STANDARD_LINUX_PHP.zip"),
));
@unzip($fw, get_storage_path());
// step 3
exec_command("cp -r %s/NHNKCP_PAYMENT_STANDARD_LINUX_PHP/* %s/", get_storage_path(), get_pgkcp_dir());
// if success, directory exists
return is_dir(get_pgkcp_dir());
}
}

View File

@ -1,106 +1,93 @@
<?php <?php
/** /**
* @file pgkcp.lnk.php * @file pgkcp.lnk.php
* @created_on 2018-08-25 * @date 2018-08-25
* @updated_on 2020-01-13 * @author Go Namhyeon <gnh1201@gmail.com>
* @author Go Namhyeon <abuse@catswords.net>
* @brief KCP PG(Payment Gateway) Helper * @brief KCP PG(Payment Gateway) Helper
*/ */
if(!defined("_DEF_RSF_")) set_error_exit("do not allow access"); if(!defined("_DEF_RSF_")) set_error_exit("do not allow access");
loadHelper("json.format"); if(!check_function_exists("get_pgkcp_config")) {
loadHelper("webpagetool"); function get_pgkcp_config() {
loadHelper("compress.zip"); $pgkcp_config = array();
loadHelper("exectool");
if(!is_fn("get_pgkcp_config")) { // include configuration file
function get_pgkcp_dir() { $inc_file = get_current_working_dir() . "/vendor/pgkcp/cfg/site_conf_inc.php";
return get_current_working_dir() . "/vendor/_dist/pgkcp"; if(file_exists($inc_file)) {
} include($inc_file);
$pgkcp_config = array(
"g_conf_home_dir" => $g_conf_home_dir,
"g_conf_log_path" => $g_conf_log_path,
"g_conf_gw_url" => $g_conf_gw_url,
"g_conf_js_url" => $g_conf_js_url,
"g_wsdl" => $g_wsdl,
"g_conf_site_cd" => $g_conf_site_cd,
"g_conf_site_key" => $g_conf_site_key,
"g_conf_site_name" => $g_conf_site_name,
"g_conf_log_level" => $g_conf_log_level,
"g_conf_gw_port" => $g_conf_gw_port,
"module_type" => $module_type,
);
// read configuration file
$fr = read_storage_file("api.config.pgkcp.json", array(
"storage_type" => "payman"
));
if(!empty($fr)) {
$api_config = json_decode($fr, true);
$api_config_fields = array("g_conf_gw_url", "g_conf_js_url", "g_conf_site_cd", "g_conf_site_key", "g_conf_site_name");
foreach($api_config_fields as $name) {
$pgkcp_config[$name] = get_value_in_array($name, $api_config, $pgkcp_config[$name]);
}
}
} else {
set_error("PGKCP configuration file does not exists.");
show_errors();
}
// check installed platform
$platform = get_pgkcp_platform($pgkcp_config);
if(empty($platform)) {
set_error("pp_cli or pp_cli.exe file not found");
show_errors();
} else {
$pgkcp_config['g_conf_platform'] = $platform;
}
return $pgkcp_config;
}
} }
if(!is_fn("get_pgkcp_config")) { if(!check_function_exists("get_pgkcp_platform")) {
function get_pgkcp_config() { function get_pgkcp_platform($pgkcp_config) {
$pgkcp_config = array(); $platform = false;
// include configuration file $exe_files = array(
$inc_file = get_pgkcp_dir() . "/cfg/site_conf_inc.php"; "default" => $pgkcp_config['g_conf_home_dir'] . "/bin/pp_cli",
if(file_exists($inc_file)) { "win32" => $pgkcp_config['g_conf_home_dir'] . "/bin/pp_cli.exe"
include($inc_file); );
$pgkcp_config = array( foreach($exe_files as $k=>$v) {
"g_conf_home_dir" => $g_conf_home_dir, if(file_exists($v)) {
"g_conf_log_path" => $g_conf_log_path, $platform = $k;
"g_conf_gw_url" => $g_conf_gw_url, break;
"g_conf_js_url" => $g_conf_js_url, }
"g_wsdl" => $g_wsdl, }
"g_conf_site_cd" => $g_conf_site_cd,
"g_conf_site_key" => $g_conf_site_key,
"g_conf_site_name" => $g_conf_site_name,
"g_conf_log_level" => $g_conf_log_level,
"g_conf_gw_port" => $g_conf_gw_port,
"module_type" => $module_type,
);
// read configuration file
$fr = read_storage_file("api.config.pgkcp.json", array(
"storage_type" => "payman"
));
if(!empty($fr)) {
$_pgkcp_config = json_decode($fr);
$pgkcp_config['g_conf_gw_url'] = get_property_value("g_conf_gw_url", $_pgkcp_config);
$pgkcp_config['g_conf_js_url'] = get_property_value("g_conf_js_url", $_pgkcp_config);
$pgkcp_config['g_conf_site_cd'] = get_property_value("g_conf_site_cd", $_pgkcp_config);
$pgkcp_config['g_conf_site_key'] = get_property_value("g_conf_site_key", $_pgkcp_config);
$pgkcp_config['g_conf_site_name'] = get_property_value("g_conf_site_name", $_pgkcp_config);
}
} else {
set_error("PGKCP configuration file does not exists.");
show_errors();
}
// check installed platform return $platform;
$platform = get_pgkcp_platform($pgkcp_config); }
if(empty($platform)) {
set_error("pp_cli(pp_cli.exe) file is not found or executable");
show_errors();
} else {
$pgkcp_config['g_conf_platform'] = $platform;
}
return $pgkcp_config;
}
} }
if(!is_fn("get_pgkcp_platform")) { if(!check_function_exists("load_pgkcp_library")) {
function get_pgkcp_platform($pgkcp_config) { function load_pgkcp_library() {
$platform = false; $inc_file = get_current_working_dir() . "/vendor/pgkcp/res/pp_cli_hub_lib.php";
if(file_exists($inc_file)) {
$executables = array( include($inc_file);
"default" => $pgkcp_config['g_conf_home_dir'] . "/bin/pp_cli", } else {
"win32" => $pgkcp_config['g_conf_home_dir'] . "/bin/pp_cli.exe" set_error("PGKCP payment library file does not exists.");
); show_errors();
}
foreach($executables as $k=>$v) { }
if(file_exists($v) && is_executable($v)) {
$platform = $k;
break;
}
}
return $platform;
}
}
if(!is_fn("load_pgkcp_library")) {
function load_pgkcp_library() {
$inc_file = get_pgkcp_dir() . "/sample/pp_cli_hub_lib.php";
if(file_exists($inc_file)) {
include($inc_file);
} else {
set_error("PGKCP payment library file does not exists.");
show_errors();
}
}
} }

View File

@ -1,39 +0,0 @@
<?php
/*
* @file rfc3164.proto.php
* @author Go Namhyeon <abuse@catswords.net> (Modified)
* @author Troy Davis (@tory) - https://gist.github.com/troy/2220679 (Original)
* @brief Helper for RFC3164(The BSD Syslog Protocol) - https://tools.ietf.org/html/rfc3164
* @created_on 2018-03-02
* @updated_on 2020-01-23
*/
if(!is_fn("rfc3164_get_config")) {
function rfc3164_get_config() {
$config = get_config();
return array(
"enabled" => get_value_in_array("rfc3164_enabled", $config, ""),
"host" => get_value_in_array("rfc3164_host", $config, ""),
"port" => get_value_in_array("rfc3164_port", $config, "")
);
}
}
if(!is_fn("rfc3164_send_message")) {
function rfc3164_send_message($message, $component = "web", $program = "next_big_thing") {
$_config = rfc3164_get_config();
$enabled = array_key_equals("enabled", $_config, 1);
$host = get_value_in_array("host", $_config, "");
$port = get_value_in_array("port", $_config, "");
if($enabled !== false) {
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
foreach(explode("\n", $message) as $line) {
$syslog_message = "<22>" . date('M d H:i:s ') . $program . ' ' . $component . ': ' . $line;
socket_sendto($sock, $syslog_message, strlen($syslog_message), 0, $host, $port);
}
socket_close($sock);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -2,127 +2,127 @@
/** /**
* @file socialtools.php * @file socialtools.php
* @date 2018-09-27 * @date 2018-09-27
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief SocialTools (refactoring from SocioRouter) * @brief SocialTools (refactoring from SocioRouter)
*/ */
if(!is_fn("social_send_message")) { if(!check_function_exists("social_send_message")) {
function social_send_message($provider, $adapter, $message, $options=array()) { function social_send_message($provider, $adapter, $message, $options=array()) {
$response = false; $response = false;
$status = array( $status = array(
"message" => $message "message" => $message
); );
switch($provider) { switch($provider) {
case "facebook": case "facebook":
$status['link'] = get_value_in_array("link", $options, ""); $status['link'] = get_value_in_array("link", $options, "");
$status['picture'] = get_value_in_array("picture", $options, ""); $status['picture'] = get_value_in_array("picture", $options, "");
$response = $adapter->setUserStatus($status); $response = $adapter->setUserStatus($status);
break; break;
case "linkedin": case "linkedin":
$status['content'] = array( $status['content'] = array(
"title" => get_value_in_array("title", $options, ""), "title" => get_value_in_array("title", $options, ""),
"description" => get_value_in_array("description", $options, ""), "description" => get_value_in_array("description", $options, ""),
"submitted-url" => get_value_in_array("link", $options, ""), "submitted-url" => get_value_in_array("link", $options, ""),
"submitted-image-url" => get_value_in_array("picture", $options, "") "submitted-image-url" => get_value_in_array("picture", $options, "")
); );
$status['visibility'] = array( $status['visibility'] = array(
"code" => "anyone" "code" => "anyone"
); );
$response = $adapter->setUserStatus($status); $response = $adapter->setUserStatus($status);
break; break;
case "twitter": case "twitter":
$status['link'] = get_value_in_array("link", $options, ""); $status['link'] = get_value_in_array("link", $options, "");
$status['picture'] = get_value_in_array("picture", $options, ""); $status['picture'] = get_value_in_array("picture", $options, "");
$response = $adapter->setUserStatus($status); $response = $adapter->setUserStatus($status);
break; break;
default: default:
set_error("Unknown provider"); set_error("Unknown provider");
show_errors(); show_errors();
} }
return $response; return $response;
} }
} }
if(!is_fn("social_parse_object_id")) { if(!check_function_exists("social_parse_object_id")) {
function social_parse_object_id($provider, $response) { function social_parse_object_id($provider, $response) {
$object_id = false; $object_id = false;
switch($provider) { switch($provider) {
case "facebook": case "facebook":
$decodedBody = get_property_value("decodedBody", $response, true); $decodedBody = get_property_value("decodedBody", $response, true);
$object_id = $decodedBody['id']; $object_id = $decodedBody['id'];
break; break;
case "linkedin": case "linkedin":
$object_id = get_property_value("updateKey", $response); $object_id = get_property_value("updateKey", $response);
break; break;
case "twitter": case "twitter":
$object_id = get_property_value("id_str", $response); $object_id = get_property_value("id_str", $response);
break; break;
} }
return $object_id; return $object_id;
} }
} }
if(!is_fn("social_get_object")) { if(!check_function_exists("social_get_object")) {
function social_get_object($provider, $adapter, $object_id) { function social_get_object($provider, $adapter, $object_id) {
$result = false; $result = false;
$access_token = $adapter->getAccessToken(); $access_token = $adapter->getAccessToken();
switch($provider) { switch($provider) {
case "facebook": case "facebook":
$result = array( $result = array(
"post" => social_get_object_facebook($provider, $adapter, $object_id, "post"), "post" => social_get_object_facebook($provider, $adapter, $object_id, "post"),
"likes" => social_get_object_facebook($provider, $adapter, $object_id, "likes"), "likes" => social_get_object_facebook($provider, $adapter, $object_id, "likes"),
"comments" => social_get_object_facebook($provider, $adapter, $object_id, "comments"), "comments" => social_get_object_facebook($provider, $adapter, $object_id, "comments"),
"sharedposts" => social_get_object_facebook($provider, $adapter, $object_id, "sharedposts"), "sharedposts" => social_get_object_facebook($provider, $adapter, $object_id, "sharedposts"),
"reactions" => social_get_object_facebook($provider, $adapter, $object_id, "reactions"), "reactions" => social_get_object_facebook($provider, $adapter, $object_id, "reactions"),
); );
break; break;
} }
return $result; return $result;
} }
} }
if(!is_fn("social_get_object_facebook")) { if(!check_function_exists("social_get_object_facebook")) {
function social_get_object_facebook($adapter, $object_id, $type="post") { function social_get_object_facebook($adapter, $object_id, $type="post") {
$result = false; $result = false;
$response = false; $response = false;
try { try {
switch($object_type) { switch($object_type) {
case "post": case "post":
$response = $adapter->api()->get("/" . $object_id, $access_token); $response = $adapter->api()->get("/" . $object_id, $access_token);
break; break;
case "likes": case "likes":
$response = $adapter->api()->get("/" . $object_id . "/likes", $access_token); $response = $adapter->api()->get("/" . $object_id . "/likes", $access_token);
break; break;
case "comments": case "comments":
$response = $adapter->api()->get("/" . $object_id . "/comments", $access_token); $response = $adapter->api()->get("/" . $object_id . "/comments", $access_token);
break; break;
case "sharedposts": case "sharedposts":
$response = $adapter->api()->get("/" . $object_id . "/sharedposts", $access_token); $response = $adapter->api()->get("/" . $object_id . "/sharedposts", $access_token);
break; break;
case "reactions": case "reactions":
$response = $adapter->api()->get("/" . $object_id . "/reactions", $access_token); $response = $adapter->api()->get("/" . $object_id . "/reactions", $access_token);
break; break;
} }
} catch(Exception $e) { } catch(Exception $e) {
set_error($e->getMessage()); set_error($e->getMessage());
show_errors(); show_errors();
} }
// get response body // get response body
$body = get_property_value("body", $response, true); $body = get_property_value("body", $response, true);
$decoded_body = json_decode($body); $decoded_body = json_decode($body);
$result = $decoded_body; $result = $decoded_body;
return $result; return $result;
} }
} }

View File

@ -2,67 +2,67 @@
/** /**
* @file spreadsheet-reader.lnk.php * @file spreadsheet-reader.lnk.php
* @date 2018-09-20 * @date 2018-09-20
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Excel file parser * @brief Excel file parser
***/ ***/
if(!is_fn("parse_excel_file")) { if(!check_function_exists("parse_excel_file")) {
function parse_excel_file($filepath, $format="xlsx", $setColumnName=false) { function parse_excel_file($filepath, $format="xlsx", $setColumnName=false) {
$rows = array(); $rows = array();
$required_files = array( $required_files = array(
"spreadsheet-reader/php-excel-reader/excel_reader2", "spreadsheet-reader/php-excel-reader/excel_reader2",
"spreadsheet-reader/SpreadsheetReader", "spreadsheet-reader/SpreadsheetReader",
//"spreadsheet-reader/SpreadsheetReader_CSV", //"spreadsheet-reader/SpreadsheetReader_CSV",
//"spreadsheet-reader/SpreadsheetReader_XLSX", //"spreadsheet-reader/SpreadsheetReader_XLSX",
//"spreadsheet-reader/SpreadsheetReader_XLS", //"spreadsheet-reader/SpreadsheetReader_XLS",
//"spreadsheet-reader/SpreadsheetReader_ODS" //"spreadsheet-reader/SpreadsheetReader_ODS"
); );
foreach($required_files as $file) { foreach($required_files as $file) {
include("./vendor/_dist/" . $file . ".php"); include("./vendor/" . $file . ".php");
} }
$spreadsheet = false; $spreadsheet = false;
$columnNames = array(); $columnNames = array();
$fileFormat = strtolower($format);
/*
$fileFormat = strtolower($format);
if($fileFormat == "xlsx") {
$spreadsheet = new SpreadsheetReader_XLSX($filepath);
} elseif($fileFormat == "xls") {
$spreadsheet = new SpreadsheetReader_XLS($filepath);
} elseif($fileFormat == "csv") {
$spreadsheet = new SpreadsheetReader_CSV($filepath);
} elseif($fileFormat == "ods") {
$spreadsheet = new SpreadsheetReader_ODS($filepath);
} else {
$spreadsheet = new SpreadsheetReader($filepath);
}
*/
$spreadsheet = new SpreadsheetReader($filepath);
foreach($spreadsheet as $index=>$row) { /*
if(!$setColumnName) { if($fileFormat == "xlsx") {
$rows[] = $row; $spreadsheet = new SpreadsheetReader_XLSX($filepath);
} else { } elseif($fileFormat == "xls") {
if($index > 0) { $spreadsheet = new SpreadsheetReader_XLS($filepath);
$i = 0; } elseif($fileFormat == "csv") {
$cols = array(); $spreadsheet = new SpreadsheetReader_CSV($filepath);
foreach($row as $col) { } elseif($fileFormat == "ods") {
if((count($columnNames) - 1) > $i) { $spreadsheet = new SpreadsheetReader_ODS($filepath);
$cols[$columnNames[$i]] = $col; } else {
} else { $spreadsheet = new SpreadsheetReader($filepath);
$cols[] = $col; }
} */
$i++; $spreadsheet = new SpreadsheetReader($filepath);
}
$rows[] = $cols; foreach($spreadsheet as $index=>$row) {
} else { if(!$setColumnName) {
$columnNames = array_merge($columnNames, $row); $rows[] = $row;
} } else {
} if($index > 0) {
} $i = 0;
$cols = array();
foreach($row as $col) {
if((count($columnNames) - 1) > $i) {
$cols[$columnNames[$i]] = $col;
} else {
$cols[] = $col;
}
$i++;
}
$rows[] = $cols;
} else {
$columnNames = array_merge($columnNames, $row);
}
}
}
return $rows; return $rows;
} }
} }

View File

@ -1,7 +1,7 @@
/** /**
* @file staticgen.php * @file staticgen.php
* @date 2018-07-22 * @date 2018-07-22
* @auther Go Namhyeon <abuse@catswords.net> * @auther Go Namhyeon <gnh1201@gmail.com>
* @brief Static Web Generation Tool for ResaonableFramework * @brief Static Web Generation Tool for ResaonableFramework
*/ */

View File

@ -1,318 +1,203 @@
<?php <?php
/** /**
* @file string.utils.php * @file string.utils.php
* @created_on 2018-05-27 * @date 2018-05-27
* @updated_on 2020-02-21 * @author Go Namhyeon <gnh1201@gmail.com>
* @author Go Namhyeon <abuse@catswords.net>
* @brief String utility helper * @brief String utility helper
*/ */
if(!is_fn("get_converted_string")) { if(!check_function_exists("get_converted_string")) {
function get_converted_string($str, $to_charset="detect", $from_charset="detect") { function get_converted_string($str, $to_charset, $from_charset) {
$result = false; $result = false;
// detect charset (input) if($form_charset == "detect") {
if($form_charset == "detect") { if(check_function_exists(array("mb_detect_encoding", "mb_detect_order"))) {
if(is_fn(array("mb_detect_encoding", "mb_detect_order"))) { $from_charset = mb_detect_encoding($str, mb_detect_order(), true);
$from_charset = mb_detect_encoding($str, mb_detect_order(), true); } else {
} else { $from_charset = "ISO-8859-1";
$from_charset = "ISO-8859-1"; }
} }
}
// detect charset (output)
if($to_charset == "detect") {
if(is_fn("mb_internal_encoding")) {
$to_charset = mb_internal_encoding();
} elseif(is_fn("iconv_get_encoding")) {
$to_charset = iconv_get_encoding("internal_encoding");
} else {
$_candidates = array(
ini_get("default_charset"),
ini_get("iconv.internal_encoding"),
ini_get("mbstring.internal_encoding"),
"UTF-8"
);
foreach($_candidates as $_candidate) {
if(!empty($_candidate)) {
$to_charset = $_candidate;
break;
}
}
}
}
// normalize charset (UPPERCASE) if(check_function_exists("iconv")) {
$from_charset = strtoupper($from_charset); $result = iconv($from_charset, $to_charset, $str);
$to_charset = strtoupper($to_charset); } elseif(check_function_exists("mb_convert_encoding")) {
$result = mb_convert_encoding($str, $to_charset, $from_charset);
}
// test conditions return $result;
if($from_charset == $to_charset) { }
$result = $str; }
} elseif(is_fn("iconv")) {
$result = iconv($from_charset, $to_charset, $str);
} elseif(is_fn("mb_convert_encoding")) {
$result = mb_convert_encoding($str, $to_charset, $from_charset);
}
return $result; if(!check_function_exists("nl2p")) {
function nl2p($string) {
$paragraphs = '';
foreach (explode("\n", $string) as $line) {
if (trim($line)) {
$paragraphs .= '<p>' . $line . '</p>';
}
}
return $paragraphs;
}
}
if(!check_function_exists("br2nl")) {
function br2nl($string) {
return preg_replace('/\<br(\s*)?\/?\>/i', "\n", $string);
}
}
if(!check_function_exists("br2p")) {
function br2p($string) {
return nl2p(br2nl($string));
}
}
if(!check_function_exists("get_formatted_number")) {
function get_formatted_number($value) {
return number_format(floatval($value));
}
}
if(!check_function_exists("get_cutted_string")) {
function get_cutted_string($str, $start, $len=0, $charset="utf-8") {
$result = "";
if(check_function_exists("iconv_substr")) {
$result = iconv_substr($str, $start, $len, $charset);
} elseif(check_function_exists("mb_substr")) {
$result = mb_substr($str, $start, $len, $charset);
} else {
$result = substr($str, $start, $len);
}
return $result;
}
}
if(!check_function_exists("split_by_line")) {
function split_by_line($str) {
return preg_split('/\n|\r\n?/', $str);
}
}
if(!check_function_exists("read_storage_file_by_line")) {
function read_storage_file_by_line($filename, $options=array()) {
return split_by_line(read_storage_file($filename, $options));
}
}
// https://stackoverflow.com/questions/834303/startswith-and-endswith-functions-in-php
if(!check_function_exists("startsWith")) {
function startsWith($haystack, $needle) {
$length = strlen($needle);
return (substr($haystack, 0, $length) === $needle);
}
}
if(!check_function_exists("endsWith")) {
function endsWith($haystack, $needle) {
$length = strlen($needle);
if($length == 0) {
return true;
}
return (substr($haystack, -$length) === $needle);
}
}
// https://stackoverflow.com/questions/4955433/php-multiple-delimiters-in-explode/27767665#27767665
if(!check_function_exists("multi_explode")) {
function multi_explode($delimiters, $string) {
$ready = str_replace($delimiters, $delimiters[0], $string);
$launch = explode($delimiters[0], $ready);
return $launch;
}
}
if(!check_function_exists("multi_strpos")) {
function multi_strpos($string, $delimiters, $offset=0) {
$last_pos = strlen($string) - 1;
$pos = $last_pos;
if($offset > 0) {
$string = substr($offset);
}
foreach($delimiters as $s) {
$new_pos = strpos($string, $s);
if($new_pos !== false && $pos > $new_pos) {
$pos = $new_pos;
}
}
return (($pos < $last_pos) ? $pos : false);
}
}
if(!check_function_exists("multi_str_split")) {
function multi_str_split($string, $delimiters) {
$strings = array();
if(is_string($string)) {
$offset = 0;
$pos = -1;
while(!($pos !== false)) {
$offset = $pos + 1;
$pos = multi_strpos($string, $delimiters, $offset);
$strings[] = substr($string, $offset, $pos - $offset);
}
}
return $strings;
}
}
if(!check_function_exists("parse_pipelined_data")) {
function parse_pipelined_data($pipelined_data, $keynames=array()) {
$result = array();
$parsed_data = explode("|", $pipelined_data);
if(count($keynames) > 0) {
$i = 0;
foreach($keynames as $name) {
$result[$name] = $parsed_data[$i];
$i++;
}
} else {
$result = $parsed_data;
}
return $result;
}
}
if(!check_function_exists("get_tokenized_text")) {
function get_tokenized_text($text, $delimiters=array(",", " ", "|", "-", "+")) {
return array_filter(multi_explode($delimiters, $text));
}
}
if(!check_function_exists("get_highlighted_html_by_words")) {
function get_highlighted_html_by_word($word, $text, $delimiters=array(",", " ", "|", "-", "+")) {
$html = $text;
$words = get_tokenized_text($word, $delimiters);
if(check_array_length($words, 0) > 0) {
$html = preg_replace(sprintf("/%s/i", implode("|", $words)), "<strong class=\"highlight\">$0</strong>", $text);
}
return $html;
} }
} }
if(!is_fn("nl2p")) { if(!check_function_exists("eregi_compatible")) {
function nl2p($str) { function eregi_compatible($pattern, $subject, &$matches=NULL) {
$paragraphs = ""; return preg_match(sprintf("/%s/i", $pattern), $subject, $matches);
foreach(explode_by_line($str) as $line) { }
if(trim($line)) {
$paragraphs .= '<p>' . $line . '</p>';
}
}
return $paragraphs;
}
} }
if(!is_fn("br2nl")) { if(!check_function_exists("eregi_replace_compatible")) {
function br2nl($string) { function eregi_replace_compatible($pattern, $replacement, $subject) {
return preg_replace('/\<br(\s*)?\/?\>/i', DOC_EOL, $string); return preg_replace(sprintf("/%s/i", $pattern), $replacement, $subject);
} }
}
if(!is_fn("br2p")) {
function br2p($string) {
return nl2p(br2nl($string));
}
}
if(!is_fn("get_formatted_number")) {
function get_formatted_number($value) {
return number_format(floatval($value));
}
}
if(!is_fn("get_cutted_string")) {
function get_cutted_string($str, $start, $len=null, $charset="utf-8") {
$result = "";
if(is_fn("iconv_substr")) {
$result = iconv_substr($str, $start, $len, $charset);
} elseif(is_fn("mb_substr")) {
$result = mb_substr($str, $start, $len, $charset);
} else {
$result = substr($str, $start, $len);
}
return $result;
}
}
if(!is_fn("get_string_length")) {
function get_string_length($str, $charset="utf-8") {
$len = 0;
if(is_fn("iconv_strlen")) {
$len = iconv_strlen($str, $charset);
} elseif(is_fn("mb_strlen")) {
$len = mb_strlen($str, $charset);
} else {
$len = strlen($str);
}
return $len;
}
}
if(!is_fn("get_splitted_strings")) {
function get_splitted_strings($str, $len=32, $chsarset="utf-8") {
$strings = array();
$_len = get_string_length($str);
$_pos = 0;
if($len >= $_len) {
$strings[] = $str;
} else {
$__len = ceil($_len / $len);
for($i = 0; $i < $__len; $i++) {
$_pos = $len * $i;
$strings[] = get_cutted_string($str, $_pos, $len, $charset);
}
if($_len - $_pos > 0) {
$strings[] = $strings[] = get_cutted_string($str, $_pos);
}
}
return $strings;
}
}
if(!is_fn("explode_by_line")) {
function explode_by_line($str) {
return preg_split('/\n|\r\n?/', $str);
}
}
// Deprecated: split_by_line()
if(!is_fn("split_by_line")) {
function split_by_line($str) {
return explode_by_line($str);
}
}
if(!is_fn("explode_storage_file_by_line")) {
function explode_storage_file_by_line($filename, $options=array()) {
return explode_by_line(read_storage_file($filename, $options));
}
}
if(!is_fn("strlike")) {
function strlike($haystack, $needle) {
$flag = false;
$s = explode("%", $needle);
$d = count($s);
switch($d) {
case 3:
$flag = (strpos($haystack, $s[1]) !== false);
break;
case 2:
if($s[1] == "") {
//$flag = (strpos($haystack, $s[0]) === 0);
$flag = is_prefix($haystack, $s[0]);
} elseif($s[0] == "") {
//$flag = (strpos($haystack, $s[1]) !== false);
$flag = is_suffix($haystack, $s[1]);
}
break;
default:
$flag = ($needle === $haystack);
}
return $flag;
}
}
if(!is_fn("is_prefix")) {
function is_prefix($haystack, $needle) {
$length = strlen($needle);
return (substr($haystack, 0, $length) === $needle);
}
}
if(!is_fn("is_suffix")) {
function is_suffix($haystack, $needle) {
$length = strlen($needle);
if($length == 0) {
return true;
}
return (substr($haystack, -$length) === $needle);
}
}
if(!is_fn("multi_explode")) {
function multi_explode($delimiters, $string) {
$ready = str_replace($delimiters, $delimiters[0], $string);
$launch = explode($delimiters[0], $ready);
return $launch;
}
}
if(!is_fn("multi_strpos")) {
function multi_strpos($string, $delimiters, $offset=0) {
$last_pos = strlen($string) - 1;
$pos = $last_pos;
if($offset > 0) {
$string = substr($offset);
}
foreach($delimiters as $s) {
$new_pos = strpos($string, $s);
if($new_pos !== false && $pos > $new_pos) {
$pos = $new_pos;
}
}
return (($pos < $last_pos) ? $pos : false);
}
}
if(!is_fn("parse_pipelined_data")) {
function parse_pipelined_data($pipelined_data, $keynames=array()) {
$result = array();
$parsed_data = explode("|", $pipelined_data);
if(count($keynames) > 0) {
$i = 0;
foreach($keynames as $name) {
$result[$name] = $parsed_data[$i];
$i++;
}
} else {
$result = $parsed_data;
}
return $result;
}
}
// https://stackoverflow.com/questions/10290849/how-to-remove-multiple-utf-8-bom-sequences
if(!is_fn("remove_utf8_bom")) {
function remove_utf8_bom($text) {
$bom = pack('H*','EFBBBF');
$text = preg_replace("/^$bom/", '', $text);
return $text;
}
}
if(!is_fn("get_tokenized_text")) {
function get_tokenized_text($text, $delimiters=array()) {
if(count($delimiters) > 0) {
return array_values(array_filter(multi_explode($delimiters, $text)));
} else {
return preg_split('/\s+/', $text, -1, PREG_SPLIT_NO_EMPTY);
}
}
}
if(!is_fn("get_highlighted_html_by_words")) {
function get_highlighted_html_by_word($word, $text, $delimiters=array()) {
$html = $text;
$words = get_tokenized_text($word, $delimiters);
if(check_array_length($words, 0) > 0) {
$html = preg_replace(sprintf("/%s/i", implode("|", $words)), "<strong class=\"highlight\">$0</strong>", $text);
}
return $html;
}
}
if(!is_fn("get_floating_percentage")) {
function get_floating_percentage($x, $a=5) {
return round(floatval($x) / 100.0, $a);
}
}
// https://stackoverflow.com/questions/13108157
if(!is_fn("get_csv_from_array")) {
function get_csv_from_array($data, $delimiter = ',', $enclosure = '"', $escape_char = "\\") {
$f = fopen('php://memory', 'r+');
foreach ($data as $item) {
fputcsv($f, $item, $delimiter, $enclosure, $escape_char);
}
rewind($f);
return stream_get_contents($f);
}
}
if(!is_fn("eregi")) {
function eregi($pattern, $subject, &$matches=NULL) {
return preg_match(sprintf("/%s/i", $pattern), $subject, $matches);
}
}
if(!is_fn("eregi_replace")) {
function eregi_replace($pattern, $replacement, $subject) {
return preg_replace(sprintf("/%s/i", $pattern), $replacement, $subject);
}
} }

View File

@ -2,78 +2,78 @@
/** /**
* @file tablewiz.php * @file tablewiz.php
* @date 2018-02-26 * @date 2018-02-26
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief TableWiz helper * @brief TableWiz helper
*/ */
if(!is_fn("tablewiz_cut_str")) { if(!check_function_exists("tablewiz_cut_str")) {
function tablewiz_cut_str($str, $strlimit=0) { function tablewiz_cut_str($str, $strlimit=0) {
$plaintext = strip_tags($str); $plaintext = strip_tags($str);
// if use html, do not cut text // if use html, do not cut text
if($strlimit > 0 && $str != $plaintext) { if($strlimit > 0 && $str != $plaintext) {
$str = substr($str, 0, $strlimit); $str = substr($str, 0, $strlimit);
} }
return $str; return $str;
} }
} }
if(!is_fn("tablewiz_create")) { if(!check_function_exists("tablewiz_create")) {
function tablewiz_create($rows, $bind=array(), $domid="", $domclass="", $strlimit=0, $thead_html=array(), $tbody_html_list=array()) { function tablewiz_create($rows, $bind=array(), $domid="", $domclass="", $strlimit=0, $thead_html=array(), $tbody_html_list=array()) {
$html = ""; $html = "";
if(count($rows) == 0) { if(count($rows) == 0) {
return $html; return $html;
} }
$dom_element_name = make_random_id(10); $dom_element_name = make_random_id(10);
$domid = empty($domid) ? "tablewiz_id_" . $dom_element_name : $domid; $domid = empty($domid) ? "tablewiz_id_" . $dom_element_name : $domid;
$domclass = empty($domclass) ? "tablewiz_class_" . $dom_element_name : $domclass; $domclass = empty($domclass) ? "tablewiz_class_" . $dom_element_name : $domclass;
$html_th_elms = ""; $html_th_elms = "";
foreach($rows[0] as $k=>$v) { foreach($rows[0] as $k=>$v) {
$html_th_text = array_key_empty($k, $bind) ? $k : $bind[$k]; $html_th_text = array_key_empty($k, $bind) ? $k : $bind[$k];
$html_th_elms .= "<th>" . tablewiz_cut_str($html_th_text, $strlimit) . "</th>"; $html_th_elms .= "<th>" . tablewiz_cut_str($html_th_text, $strlimit) . "</th>";
} }
// append contents in thead // append contents in thead
foreach($thead_html as $k=>$v) { foreach($thead_html as $k=>$v) {
$html_th_elms .= "<th>" . tablewiz_cut_str($v, $strlimit) . "</th>"; $html_th_elms .= "<th>" . tablewiz_cut_str($v, $strlimit) . "</th>";
} }
$html_tr_elms = ""; $html_tr_elms = "";
foreach($rows as $idx=>$record) { foreach($rows as $idx=>$record) {
$html_tr_elms .= "<tr>"; $html_tr_elms .= "<tr>";
foreach($record as $k=>$v) { foreach($record as $k=>$v) {
$html_tr_elms .= "<td>" . tablewiz_cut_str($v, $strlimit) . "</td>"; $html_tr_elms .= "<td>" . tablewiz_cut_str($v, $strlimit) . "</td>";
} }
$html_tr_elms .= "</tr>"; $html_tr_elms .= "</tr>";
// append contents in tbody // append contents in tbody
if(count($tbody_html_list) > $idx) { if(count($tbody_html_list) > $idx) {
$tbody_html = $tbody_html_list[$idx]; $tbody_html = $tbody_html_list[$idx];
if(is_array($tbody_html)) { if(is_array($tbody_html)) {
foreach($tbody_html as $k=>$v) { foreach($tbody_html as $k=>$v) {
$html_tr_elms .= "<td>" . tablewiz_cut_str($v, $strlimit) . "</td>"; $html_tr_elms .= "<td>" . tablewiz_cut_str($v, $strlimit) . "</td>";
} }
} }
} }
} }
$html .= <<<EOF $html .= <<<EOF
<table id="$domid" class="$domclass" border="1" cellspacing="0"> <table id="$domid" class="$domclass" border="1" cellspacing="0">
<thead> <thead>
<tr> <tr>
$html_th_elms $html_th_elms
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
$html_tr_elms $html_tr_elms
</tbody> </tbody>
</table> </table>
EOF; EOF;
return $html; return $html;
} }
} }

View File

@ -1,36 +0,0 @@
<?php
if(!is_fn("get_youtube_thumbnail")) {
function get_youtube_thumbnail($vi) {
$ytimgs = array();
$ytimg_urls = array();
$ytimg_url = "http://img.youtube.com/vi/:vi/:rs.jpg";
$ytimg_types = array(
"t0" => "0",
"t1" => "1",
"t2" => "2",
"t3" => "3",
"de" => "default",
"mq" => "mqdefault",
"hq" => "hqdefault",
"sd" => "sddefault",
"mx" => "maxresdefault"
);
foreach($ytimg_types as $k=>$v) {
$url = get_web_binded_url($ytimg_url, array(
"vi" => $vi,
"rs" => $v
));
$response = get_web_page($url, "get.cache");
$ytimgs[$k] = $response['content'];
$fpath = write_storage_file($response['content'], array(
"filename" => $response['sha1']
));
$ytimg_urls[$k] = get_storage_url() . "/" . $response['sha1'];
}
return $ytimg_urls;
}
}

View File

@ -2,12 +2,12 @@
/** /**
* @file timetool.php * @file timetool.php
* @date 2018-09-26 * @date 2018-09-26
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Time tools * @brief Time tools
*/ */
/* Query a time server (C) 1999-09-29, Ralf D. Kloth (QRQ.software) <ralf at qrq.de> */ /* Query a time server (C) 1999-09-29, Ralf D. Kloth (QRQ.software) <ralf at qrq.de> */
if(!is_fn("query_time_server")) { if(!check_function_exists("query_time_server")) {
function query_time_server($timeserver, $socket) { function query_time_server($timeserver, $socket) {
// parameters: server, socket, error code, error text, timeout // parameters: server, socket, error code, error text, timeout
$fp = fsockopen($timeserver,$socket,$err,$errstr,5); $fp = fsockopen($timeserver,$socket,$err,$errstr,5);
@ -28,7 +28,7 @@ if(!is_fn("query_time_server")) {
} }
} }
if(!is_fn("get_server_time")) { if(!check_function_exists("get_server_time")) {
function get_server_time($timeserver="time.bora.net") { function get_server_time($timeserver="time.bora.net") {
$timestamp = false; $timestamp = false;
$timercvd = query_time_server($timeserver, 37); $timercvd = query_time_server($timeserver, 37);

View File

@ -2,96 +2,75 @@
/** /**
* @file twilio.api.php * @file twilio.api.php
* @date 2019-04-08 * @date 2019-04-08
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Twilio REST API interface module * @brief Twilio REST API interface module
* @documentation https://www.twilio.com/docs/sms/send-messages * @documentation https://www.twilio.com/docs/sms/send-messages
*/ */
if(!is_fn("twilio_get_config")) { if(!check_function_exists("twilio_get_config")) {
function twilio_get_config() { function twilio_get_config() {
$config = get_config(); $config = get_config();
return array( return array(
"sid" => get_value_in_array("twilio_sid", $config, ""), "sid" => get_value_in_array("twilio_sid", $config, ""),
"token" => get_value_in_array("twilio_token", $config, ""), "token" => get_value_in_array("twilio_token", $config, ""),
"from" => get_value_in_array("twilio_from", $config, ""), "from" => get_value_in_array("twilio_from", $config, ""),
"char_limit" => get_value_in_array("twilio_char_limit", $config, 160) );
); }
}
} }
if(!is_fn("twilio_get_message_blocks")) { if(!check_function_exists("twilio_send_message")) {
function twilio_parse_messages($message) { function twilio_send_message($message, $to) {
$strings = array(); $response = false;
$cnf = twilio_get_config(); $cnf = twilio_get_config();
if(loadHelper("string.utils")) { if(loadHelper("webpagetool")) {
$strings = get_splitted_strings($message, $cnf['char_limit']); $request_url = sprintf("https://api.twilio.com/2010-04-01/Accounts/%s/Messages.json", $sid);
} else { $response = get_web_json($request_url, "post", array(
$strings[] = substr($messages, 0, $cnf['char_limit']); "headers" => array(
} "Content-Type" => "application/x-www-form-urlencoded",
"Authentication" => array("Basic", $cnf['sid'], $cnf['token']),
),
"data" => array(
"Body" => $message,
"From" => $cnf['from'],
"To" => $to,
)
));
}
return $strings; return $response;
} }
} }
if(!is_fn("twilio_send_message")) { if(!check_function_exists("twilio_send_voice")) {
function twilio_send_message($message, $to) { function twilio_send_voice($message="", $to) {
$response = false; $response = false;
$cnf = twilio_get_config(); $cnf = twilio_get_config();
$messages = twilio_parse_messages($message); $url = "http://demo.twilio.com/docs/voice.xml";
if(loadHelper("webpagetool")) { var_dump($cnf);
$bind = array(
"sid" => $cnf['sid']
);
$request_url = get_web_binded_url("https://api.twilio.com/2010-04-01/Accounts/:sid/Messages.json", $bind);
foreach($messages as $_message) {
$response = get_web_json($request_url, "post.cmd", array(
"headers" => array(
"Content-Type" => "application/x-www-form-urlencoded",
"Authentication" => array("Basic", $cnf['sid'], $cnf['token']),
),
"data" => array(
"Body" => $_message,
"From" => $cnf['from'],
"To" => $to,
)
));
}
}
return $response;
} if(loadHelper("webpagetool")) {
} $request_url = sprintf("https://api.twilio.com/2010-04-01/Accounts/%s/Calls.json", $cnf['sid']);
$response = get_web_page($request_url, "post.cmd", array(
if(!is_fn("twilio_send_voice")) { "headers" => array(
function twilio_send_voice($message="", $to) { "Content-Type" => "application/x-www-form-urlencoded",
$response = false; "Authentication" => array("Basic", $cnf['sid'], $cnf['token']),
),
$cnf = twilio_get_config(); "data" => array(
$url = "http://catswords.re.kr/ep/storage/data/voice.xml"; "Url" => $url,
"From" => $cnf['from'],
if(loadHelper("webpagetool")) { "To" => $to,
$bind = array( ),
"sid" => $cnf['sid'] ));
); var_dump($response);
$request_url = sprintf("https://api.twilio.com/2010-04-01/Accounts/:sid/Calls.json", $bind);
$response = get_web_page($request_url, "post.cmd", array( }
"headers" => array(
"Content-Type" => "application/x-www-form-urlencoded", return $response;
"Authentication" => array("Basic", $cnf['sid'], $cnf['token']), }
),
"data" => array(
"Url" => $url,
"From" => $cnf['from'],
"To" => $to,
),
));
}
return $response;
}
} }

View File

@ -2,253 +2,253 @@
/** /**
* @file vworld.php * @file vworld.php
* @date 2018-01-11 * @date 2018-01-11
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Geo Helper based on vWorld (vworld.kr, molit.go.kr) * @brief Geo Helper based on vWorld (vworld.kr, molit.go.kr)
*/ */
if(!is_fn("vworld_utf8_replace")) { if(!check_function_exists("vworld_utf8_replace")) {
function vworld_utf8_replace($data) { function vworld_utf8_replace($data) {
$regex = <<<'END' $regex = <<<'END'
/ /
( (
(?: [\x00-\x7F] # single-byte sequences 0xxxxxxx (?: [\x00-\x7F] # single-byte sequences 0xxxxxxx
| [\xC0-\xDF][\x80-\xBF] # double-byte sequences 110xxxxx 10xxxxxx | [\xC0-\xDF][\x80-\xBF] # double-byte sequences 110xxxxx 10xxxxxx
| [\xE0-\xEF][\x80-\xBF]{2} # triple-byte sequences 1110xxxx 10xxxxxx * 2 | [\xE0-\xEF][\x80-\xBF]{2} # triple-byte sequences 1110xxxx 10xxxxxx * 2
| [\xF0-\xF7][\x80-\xBF]{3} # quadruple-byte sequence 11110xxx 10xxxxxx * 3 | [\xF0-\xF7][\x80-\xBF]{3} # quadruple-byte sequence 11110xxx 10xxxxxx * 3
){1,100} # ...one or more times ){1,100} # ...one or more times
) )
| . # anything else | . # anything else
/x /x
END; END;
if (is_array($data)) { if (is_array($data)) {
foreach ($data as $k=>$v) { foreach ($data as $k=>$v) {
$data[$k] = vworld_utf8_replace($v); $data[$k] = vworld_utf8_replace($v);
} }
} }
else if (is_string($data)) { else if (is_string($data)) {
$data = preg_replace($regex, '$1', $data); $data = preg_replace($regex, '$1', $data);
} }
return $data; return $data;
} }
} }
if(!is_fn("vworld_geocode_keyword")) { if(!check_function_exists("vworld_geocode_keyword")) {
function vworld_geocode_keyword($keyword, $category="Poi", $multiple=false) { function vworld_geocode_keyword($keyword, $category="Poi", $multiple=false) {
global $config; global $config;
$geopoint = array( $geopoint = array(
"address" => "", "address" => "",
"latitude" => "", // y-pos "latitude" => "", // y-pos
"longitude" => "" // x-pos "longitude" => "" // x-pos
); );
$req_urls = array( $req_urls = array(
"http://map.vworld.kr/search.do" // 키워드로 요청 "http://map.vworld.kr/search.do" // 키워드로 요청
); );
// Poi 는 장소 검색. Jibun은 지번주소 검색. Juso는 도로명주소 검색 // Poi 는 장소 검색. Jibun은 지번주소 검색. Juso는 도로명주소 검색
$poss_cates = array("Poi", "Jibun", "Juso"); $poss_cates = array("Poi", "Jibun", "Juso");
if(!in_array($category, $poss_cates)) { if(!in_array($category, $poss_cates)) {
$category = "Poi"; $category = "Poi";
} }
$callback = ""; $callback = "";
$q = $keyword; $q = $keyword;
$pageUnit = 1; $pageUnit = 1;
$output = "json"; $output = "json";
$pageIndex = 1; $pageIndex = 1;
$apiKey = $config['vworld_api_key']; $apiKey = $config['vworld_api_key'];
// 전송 내용 명시 // 전송 내용 명시
$req_data = array( $req_data = array(
"callback" => $callback, "callback" => $callback,
"q" => $q, "q" => $q,
"category" => $category, "category" => $category,
"pageUnit" => $pageUnit, "pageUnit" => $pageUnit,
"output" => $output, "output" => $output,
"pageIndex" => $pageIndex, "pageIndex" => $pageIndex,
"apiKey" => $apiKey "apiKey" => $apiKey
); );
$req_data_query = http_build_query($req_data); $req_data_query = http_build_query($req_data);
$req_props = ""; $req_props = "";
$req_cnt = 0; $req_cnt = 0;
$succ_flag = false; // 성공했는지 여부 $succ_flag = false; // 성공했는지 여부
foreach($req_urls as $base_url) { foreach($req_urls as $base_url) {
$req_props = ""; $req_props = "";
$req_real_url = $base_url . '?' . $req_data_query; $req_real_url = $base_url . '?' . $req_data_query;
// request addr2coord // request addr2coord
$ch = curl_init(); $ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $req_real_url); curl_setopt($ch,CURLOPT_URL, $req_real_url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch,CURLOPT_HEADER, false); // curl_setopt($ch,CURLOPT_HEADER, false);
if($req_output = curl_exec($ch)) { if($req_output = curl_exec($ch)) {
if(!empty(trim($req_output))) { if(!empty(trim($req_output))) {
$req_props = json_decode($req_output); $req_props = json_decode($req_output);
// 좌표만을 추출 // 좌표만을 추출
$geo_list = array(); $geo_list = array();
foreach($req_props->LIST as $req_row) { foreach($req_props->LIST as $req_row) {
$req_row = get_object_vars($req_row); $req_row = get_object_vars($req_row);
$geo_list[] = $req_row; $geo_list[] = $req_row;
} }
// 단일인지 복수인지 // 단일인지 복수인지
if(count($geo_list) > 0) { if(count($geo_list) > 0) {
if($multiple == false) { if($multiple == false) {
$req_props = $geo_list[0]; $req_props = $geo_list[0];
} else { } else {
$req_props = $geo_list; $req_props = $geo_list;
} }
$succ_flag = true; $succ_flag = true;
} else { } else {
$succ_flag = false; $succ_flag = false;
} }
} }
} }
curl_close($ch); curl_close($ch);
// 요청 횟수를 기록 // 요청 횟수를 기록
$req_cnt++; $req_cnt++;
// 성공했을 시 다음 주소로 넘어가지 않음 // 성공했을 시 다음 주소로 넘어가지 않음
if($succ_flag == true) { if($succ_flag == true) {
$xpos = $req_props['xpos']; $xpos = $req_props['xpos'];
$ypos = $req_props['ypos']; $ypos = $req_props['ypos'];
// store lat and lon // store lat and lon
if($ypos > 0 && $xpos > 0) { if($ypos > 0 && $xpos > 0) {
$geopoint['address'] = $req_props['juso']; $geopoint['address'] = $req_props['juso'];
$geopoint['latitude'] = $ypos; $geopoint['latitude'] = $ypos;
$geopoint['longitude'] = $xpos; $geopoint['longitude'] = $xpos;
} }
break; break;
} elseif($req_cnt = count($req_urls)) { } elseif($req_cnt = count($req_urls)) {
$req_props = array(); $req_props = array();
} else { } else {
$req_props = array(); $req_props = array();
} }
} }
return $geopoint; return $geopoint;
} }
} }
// get geocode from vworld // get geocode from vworld
if(!is_fn("vworld_geocode_addr2coord")) { if(!check_function_exists("vworld_geocode_addr2coord")) {
function vworld_geocode_addr2coord($addr) { function vworld_geocode_addr2coord($addr) {
global $config; global $config;
$geopoint = array( $geopoint = array(
"address" => "", "address" => "",
"latitude" => "", // y-pos "latitude" => "", // y-pos
"longitude" => "" // x-pos "longitude" => "" // x-pos
); );
// base url // base url
$req_urls = array( $req_urls = array(
"http://apis.vworld.kr/jibun2coord.do", // 구주소 요청 "http://apis.vworld.kr/jibun2coord.do", // 구주소 요청
"http://apis.vworld.kr/new2coord.do" // 신주소 요청 "http://apis.vworld.kr/new2coord.do" // 신주소 요청
); );
// 기본 설정 // 기본 설정
$apiKey = $config['vworld_api_key']; $apiKey = $config['vworld_api_key'];
$domain = $config['vworld_api_domain']; $domain = $config['vworld_api_domain'];
$output = "json"; $output = "json";
$epsg = "EPSG:4326"; // default is EPSG:4326 $epsg = "EPSG:4326"; // default is EPSG:4326
$callback = ""; $callback = "";
// 전송 내용 명시 // 전송 내용 명시
$req_data = array( $req_data = array(
"q" => $addr, "q" => $addr,
"apiKey" => $apiKey, "apiKey" => $apiKey,
"domain" => $domain, "domain" => $domain,
"output" => $output, "output" => $output,
"epsg" => $epsg, "epsg" => $epsg,
"callback" => $callback "callback" => $callback
); );
$req_data_query = http_build_query($req_data); $req_data_query = http_build_query($req_data);
$req_props = ""; $req_props = "";
$req_cnt = 0; $req_cnt = 0;
$succ_flag = false; // 성공했는지 여부 $succ_flag = false; // 성공했는지 여부
foreach($req_urls as $base_url) { foreach($req_urls as $base_url) {
$req_props = ""; $req_props = "";
$req_real_url = $base_url . '?' . $req_data_query; $req_real_url = $base_url . '?' . $req_data_query;
// request addr2coord // request addr2coord
$ch = curl_init(); $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $req_real_url); curl_setopt($ch, CURLOPT_URL, $req_real_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch,CURLOPT_HEADER, false); // curl_setopt($ch,CURLOPT_HEADER, false);
if($req_output = curl_exec($ch)) { if($req_output = curl_exec($ch)) {
if(!empty(trim($req_output))) { if(!empty(trim($req_output))) {
$req_props = json_decode($req_output); $req_props = json_decode($req_output);
if(count($req_props) > 0) { if(count($req_props) > 0) {
$req_props = get_object_vars($req_props); $req_props = get_object_vars($req_props);
$req_props = vworld_utf8_replace($req_props); $req_props = vworld_utf8_replace($req_props);
$succ_flag = true; $succ_flag = true;
} }
} }
} }
curl_close($ch); curl_close($ch);
// 요청 횟수를 기록 // 요청 횟수를 기록
$req_cnt++; $req_cnt++;
// 성공했을 시 다음 주소로 넘어가지 않음 // 성공했을 시 다음 주소로 넘어가지 않음
if($succ_flag == true) { if($succ_flag == true) {
$xpos = 0; $xpos = 0;
$ypos = 0; $ypos = 0;
switch($epsg) { switch($epsg) {
case "EPSG:900913": case "EPSG:900913":
$xpos = $req_props['EPSG_900913_X'] ; $xpos = $req_props['EPSG_900913_X'] ;
$ypos = $req_props['EPSG_900913_Y']; $ypos = $req_props['EPSG_900913_Y'];
if($xpos > 0 && $ypos> 0) { if($xpos > 0 && $ypos> 0) {
$geopoint['address'] = $req_props['JUSO']; $geopoint['address'] = $req_props['JUSO'];
$geopoint['latitude'] = $ypos; $geopoint['latitude'] = $ypos;
$geopoint['longitude'] = $xpos; $geopoint['longitude'] = $xpos;
} }
break; break;
case "EPSG:4326": // default is EPSG:4326 case "EPSG:4326": // default is EPSG:4326
default: default:
$xpos = $req_props['EPSG_4326_X']; $xpos = $req_props['EPSG_4326_X'];
$ypos = $req_props['EPSG_4326_Y']; $ypos = $req_props['EPSG_4326_Y'];
if($xpos > 0 && $ypos> 0) { if($xpos > 0 && $ypos> 0) {
$geopoint['address'] = $req_props['JUSO']; $geopoint['address'] = $req_props['JUSO'];
$geopoint['latitude'] = $ypos; $geopoint['latitude'] = $ypos;
$geopoint['longitude'] = $xpos; $geopoint['longitude'] = $xpos;
} }
break; break;
} }
break; break;
} elseif($req_cnt = count($req_urls)) { } elseif($req_cnt = count($req_urls)) {
$req_props = ""; $req_props = "";
} else { } else {
$req_props = ""; $req_props = "";
} }
} }
return $geopoint; return $geopoint;
} }
} }
if(!is_fn("vworld_adaptive_addr2coord")) { if(!check_function_exists("vworld_adaptive_addr2coord")) {
function vworld_adaptive_addr2coord($addr) { function vworld_adaptive_addr2coord($addr) {
$geopoint = array( $geopoint = array(
"address" => "", "address" => "",
"latitude" => "", // y-pos "latitude" => "", // y-pos
"longitude" => "" // x-pos "longitude" => "" // x-pos
); );
if(!empty($addr)) { if(!empty($addr)) {
$georesult = vworld_geocode_keyword($addr); $georesult = vworld_geocode_keyword($addr);
if(empty($georesult["address"])) { if(empty($georesult["address"])) {
$georesult = vworld_geocode_addr2coord($addr); $georesult = vworld_geocode_addr2coord($addr);
} }
if(empty($georesult["address"])) { if(empty($georesult["address"])) {
$addr_blocks = explode(' ', $addr); $addr_blocks = explode(' ', $addr);
$newaddr = implode(' ', array_slice($addr_blocks, 0, -1)); $newaddr = implode(' ', array_slice($addr_blocks, 0, -1));
$georesult = vworld_adaptive_addr2coord($newaddr); $georesult = vworld_adaptive_addr2coord($newaddr);
} }
} }
return $georesult; return $georesult;
} }
} }

View File

@ -2,7 +2,7 @@
/** /**
* @file webhooktool.php * @file webhooktool.php
* @date 2019-05-04 * @date 2019-05-04
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief WebhookTools * @brief WebhookTools
* @trademark * @trademark
* * `NateOn` is trademark of SK Communications Co Ltd., SK Planet Co Ltd., or other SK businesses. * * `NateOn` is trademark of SK Communications Co Ltd., SK Planet Co Ltd., or other SK businesses.
@ -10,65 +10,61 @@
* * `Slack` is trademark of Slack Technologies Inc. * * `Slack` is trademark of Slack Technologies Inc.
*/ */
if(!is_fn("send_web_hook")) { if(check_function_exists("send_web_hook")) {
function send_web_hook($message, $networkid, $options=array()) { function send_web_hook($message, $networkid, $options=array()) {
$response = false; $response = false;
$id = get_value_in_array("id", $options, "");
$id = get_value_in_array("id", $options, ""); switch($networkid) {
$username = get_value_in_array("username", $options, "ReasonableBot"); case "nateon":
$message = str_replace("http:", "hxxp:", $message); $request_url = sprintf("https://teamroom.nate.com/api/webhook/%s", $id);
if(loadHelper("webpagetool")) {
switch($networkid) { $response = get_web_page($request_url, "post", array(
case "nateon": "headers" => array(
$request_url = sprintf("https://teamroom.nate.com/api/webhook/%s", $id); "Content-Type" => "application/x-www-form-urlencoded",
if(loadHelper("webpagetool")) { ),
$response = get_web_page($request_url, "post", array( "data" => array(
"headers" => array( "content" => urlencode($message),
"Content-Type" => "application/x-www-form-urlencoded", ),
), ));
"data" => array( }
"content" => urlencode($message),
),
));
}
break; break;
case "discord": case "discord":
$request_url = sprintf("https://discordapp.com/api/webhooks/%s", $id); $request_url = sprintf("https://discordapp.com/api/webhooks/%s", $id);
if(loadHelper("webpagetool")) {
$response = get_web_json($request_url, "jsondata", array(
"headers" => array(
"Content-Type" => "application/json",
),
"data" => array(
"content" => $message,
"username" => get_value_in_array("username", $options, "anonymous"),
),
));
}
break;
if(loadHelper("webpagetool")) { case "slack":
$response = get_web_json($request_url, "jsondata", array( $request_url = sprintf("https://hooks.slack.com/services/%s", $id);
"headers" => array( if(loadHelper("webpagetool")) {
"Content-Type" => "application/json", $response = get_web_json($request_url, "jsondata", array(
), "headers" => array(
"data" => array( "Content-Type" => "application/json",
"content" => $message, ),
"username" => $username, "data" => array(
), "channel" => sprintf("#%s", get_value_in_array("channel", $options, "general")),
)); "username" => get_value_in_array("username", $options, "anonymous"),
} "text" => $message,
break; "icon_emoji" => sprintf(":%s:", get_value_in_array("emoji", $options, "ghost")),
),
));
}
break;
}
case "slack": return $response;
$request_url = sprintf("https://hooks.slack.com/services/%s", $id); }
if(loadHelper("webpagetool")) {
$response = get_web_json($request_url, "jsondata", array(
"headers" => array(
"Content-Type" => "application/json",
),
"data" => array(
"channel" => sprintf("#%s", get_value_in_array("channel", $options, "general")),
"username" => $username,
"text" => $message,
"icon_emoji" => sprintf(":%s:", get_value_in_array("emoji", $options, "ghost")),
),
));
}
break;
}
return $response;
}
} }

File diff suppressed because it is too large Load Diff

View File

@ -2,211 +2,211 @@
/** /**
* @file wprest.php * @file wprest.php
* @date 2018-03-14 * @date 2018-03-14
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Wordpress Rest API helper * @brief Wordpress Rest API helper
*/ */
if(!is_fn("get_wp_posts")) { if(!check_function_exists("get_wp_posts")) {
function get_wp_posts($wp_server_url) { function get_wp_posts($wp_server_url) {
$results = array(); $results = array();
$posts = parse_wp_posts($wp_server_url); $posts = parse_wp_posts($wp_server_url);
$url_res = parse_url($wp_server_url); $url_res = parse_url($wp_server_url);
$origin = $url_res['host']; $origin = $url_res['host'];
foreach($posts as $post) { foreach($posts as $post) {
$title = $post['title']; $title = $post['title'];
$content = $post['content']; $content = $post['content'];
$link = $post['link']; $link = $post['link'];
$object_id = $post['id']; $object_id = $post['id'];
$new_message = get_wp_new_message($title, $content, $link); $new_message = get_wp_new_message($title, $content, $link);
$alt_message = get_wp_new_message($title, $content); $alt_message = get_wp_new_message($title, $content);
$results[] = array( $results[] = array(
"origin" => $origin, "origin" => $origin,
"title" => $title, "title" => $title,
"content" => $content, "content" => $content,
"link" => $link, "link" => $link,
"message" => $new_message, "message" => $new_message,
"alt_message" => $alt_message, "alt_message" => $alt_message,
"object_id" => $object_id, "object_id" => $object_id,
"hash_title" => get_hashed_text($title), "hash_title" => get_hashed_text($title),
"hash_content" => get_hashed_text($content), "hash_content" => get_hashed_text($content),
"hash_link" => get_hashed_text($link), "hash_link" => get_hashed_text($link),
"hash_message" => get_hashed_text($new_message), "hash_message" => get_hashed_text($new_message),
"hash_alt_message" => get_hashed_text($alt_message) "hash_alt_message" => get_hashed_text($alt_message)
); );
} }
return $results; return $results;
} }
} }
if(!is_fn("parse_wp_posts")) { if(!check_function_exists("parse_wp_posts")) {
function parse_wp_posts($wp_server_url) { function parse_wp_posts($wp_server_url) {
$rest_no_route = false; $rest_no_route = false;
$posts = array(); $posts = array();
$results = array(); $results = array();
$response = get_web_json($wp_server_url, "get", array( $response = get_web_json($wp_server_url, "get", array(
"rest_route" => "/wp/v2/posts/" "rest_route" => "/wp/v2/posts/"
)); ));
$code = get_value_in_object("code", $response); $code = get_value_in_object("code", $response);
if($code === "rest_no_route") { if($code === "rest_no_route") {
$rest_no_route = true; $rest_no_route = true;
$response = get_web_xml($wp_server_url, "get", array( $response = get_web_xml($wp_server_url, "get", array(
"feed" => "rss2" "feed" => "rss2"
)); ));
} }
if($rest_no_route === false) { if($rest_no_route === false) {
$posts = $response; $posts = $response;
foreach($posts as $post) { foreach($posts as $post) {
$results[] = array( $results[] = array(
"title" => get_clean_xss($post->title->rendered, 1), "title" => get_clean_xss($post->title->rendered, 1),
"content" => get_clean_xss($post->content->rendered, 1), "content" => get_clean_xss($post->content->rendered, 1),
"link" => get_clean_xss($post->guid->rendered, 1), "link" => get_clean_xss($post->guid->rendered, 1),
"id" => $post->id, "id" => $post->id,
); );
} }
} else { } else {
$posts = $response->channel->item; $posts = $response->channel->item;
foreach($posts as $post) { foreach($posts as $post) {
$post_link = get_clean_xss($post->link); $post_link = get_clean_xss($post->link);
$post_link_paths = array_filter(explode("/", $post_link), "strlen"); $post_link_paths = array_filter(explode("/", $post_link), "strlen");
$results[] = array( $results[] = array(
"title" => get_clean_xss($post->title), "title" => get_clean_xss($post->title),
"content" => get_clean_xss($post->description), "content" => get_clean_xss($post->description),
"link" => $post_link, "link" => $post_link,
"id" => end($post_link_paths), "id" => end($post_link_paths),
); );
} }
} }
return $results; return $results;
} }
} }
if(!is_fn("get_wp_new_message")) { if(!check_function_exists("get_wp_new_message")) {
function get_wp_new_message($title, $content, $link="") { function get_wp_new_message($title, $content, $link="") {
$new_message = ""; $new_message = "";
$clean_title = get_clean_text($title); $clean_title = get_clean_text($title);
$clean_content = get_clean_text($content); $clean_content = get_clean_text($content);
$clean_llnk = get_clean_text($link); $clean_llnk = get_clean_text($link);
$message = $clean_title . " \n" . $clean_content; $message = $clean_title . " \n" . $clean_content;
$words = explode(' ', $message); $words = explode(' ', $message);
$words_choice = array_slice($words, 0, 30); $words_choice = array_slice($words, 0, 30);
$new_message = trim(implode(' ', $words_choice)); $new_message = trim(implode(' ', $words_choice));
if(!empty($clean_llnk)) { if(!empty($clean_llnk)) {
$new_message .= " " . $clean_llnk; $new_message .= " " . $clean_llnk;
} }
return $new_message; return $new_message;
} }
} }
if(!is_fn("authenticate_wp")) { if(!check_function_exists("authenticate_wp")) {
function authenticate_wp($wp_server_url, $client_id, $client_secret, $route="", $code="", $scope="basic", $state="") { function authenticate_wp($wp_server_url, $client_id, $client_secret, $route="", $code="", $scope="basic", $state="") {
$flag = false; $flag = false;
$wp_access_token = get_session("wp_access_token"); $wp_access_token = get_session("wp_access_token");
$result = array( $result = array(
"redirect_uri" => false, "redirect_uri" => false,
"response" => false "response" => false
); );
if(empty($wp_access_token)) { if(empty($wp_access_token)) {
if(empty($code)) { if(empty($code)) {
// step 1 // step 1
$redirect_uri = get_web_build_qs($wp_server_url . "/oauth/authorize", array( $redirect_uri = get_web_build_qs($wp_server_url . "/oauth/authorize", array(
"client_id" => $client_id, "client_id" => $client_id,
"redirect_uri" => get_route_link($route), "redirect_uri" => get_route_link($route),
"response_type" => "code", "response_type" => "code",
"scope" => $scope, "scope" => $scope,
"state" => $state "state" => $state
)); ));
$result['redirect_uri'] = $redirect_uri; $result['redirect_uri'] = $redirect_uri;
} else { } else {
// step 2 // step 2
$response = get_web_json($wp_server_url . "/oauth/token/", "jsondata", array( $response = get_web_json($wp_server_url . "/oauth/token/", "jsondata", array(
"headers" => array( "headers" => array(
"Content-Type" => "application/x-www-form-urlencoded", "Content-Type" => "application/x-www-form-urlencoded",
"Authorization" => sprintf("Basic %s", base64_encode($client_id . ":" . $client_secret)) "Authorization" => sprintf("Basic %s", base64_encode($client_id . ":" . $client_secret))
), ),
"data" => array( "data" => array(
"grant_type" => "authorization_code", "grant_type" => "authorization_code",
"code" => $code, "code" => $code,
"client_id" => $client_id, "client_id" => $client_id,
"client_secret" => $client_secret, "client_secret" => $client_secret,
"redirect_uri" => get_route_link($route), "redirect_uri" => get_route_link($route),
"state" => $state "state" => $state
) )
)); ));
// store access token to session // store access token to session
set_session("wp_access_token", $response->access_token); set_session("wp_access_token", $response->access_token);
set_session("wp_expires_in", $response->expires_in); set_session("wp_expires_in", $response->expires_in);
set_session("wp_token_type", $response->token_type); set_session("wp_token_type", $response->token_type);
set_session("wp_scope", $response->scope); set_session("wp_scope", $response->scope);
set_session("refresh_token", $response->refresh_token); set_session("refresh_token", $response->refresh_token);
// store respose to result // store respose to result
$result['redirect_uri'] = get_route_link($route); $result['redirect_uri'] = get_route_link($route);
$result['response'] = $response; $result['response'] = $response;
} }
if(!array_key_empty("redirect_uri", $result)) { if(!array_key_empty("redirect_uri", $result)) {
redirect_uri($result['redirect_uri']); redirect_uri($result['redirect_uri']);
} }
} else { } else {
$flag = true; $flag = true;
} }
return $result; return $result;
} }
} }
if(!is_fn("write_wp_post")) { if(!check_function_exists("write_wp_post")) {
function write_wp_post($wp_server_url, $access_token, $data=array()) { function write_wp_post($wp_server_url, $access_token, $data=array()) {
$default_data = array( $default_data = array(
"title" => "Untitled", "title" => "Untitled",
"content" => "insert your content", "content" => "insert your content",
"author" => 2, "author" => 2,
"status" => "publish", "status" => "publish",
"categories" => "" "categories" => ""
); );
foreach($data as $k=>$v) { foreach($data as $k=>$v) {
$default_data[$k] = $v; $default_data[$k] = $v;
} }
$response = get_web_json(get_web_build_qs($wp_server_url, array( $response = get_web_json(get_web_build_qs($wp_server_url, array(
"rest_route" => "/wp/v2/posts" "rest_route" => "/wp/v2/posts"
)), "jsondata", array( )), "jsondata", array(
"headers" => array( "headers" => array(
"Content-Type" => "application/x-www-form-urlencoded", "Content-Type" => "application/x-www-form-urlencoded",
"Authorization" => "Bearer " . $access_token "Authorization" => "Bearer " . $access_token
), ),
"data" => $default_data "data" => $default_data
) )
); );
return $response; return $response;
} }
} }
if(!is_fn("get_wp_categories")) { if(!check_function_exists("get_wp_categories")) {
function get_wp_categories($wp_server_url, $access_token) { function get_wp_categories($wp_server_url, $access_token) {
$response = get_web_json(get_web_build_qs($wp_server_url, array( $response = get_web_json(get_web_build_qs($wp_server_url, array(
"rest_route" => "/wp/v2/categories" "rest_route" => "/wp/v2/categories"
)), "get"); )), "get");
return $response; return $response;
} }
} }

View File

@ -1,321 +1,137 @@
<?php <?php
/** /**
* @file zabbix.api.php * @file zabbix.api.php
* @created_on 2019-04-08 * @date 2019-04-08
* @updated_on 2020-03-05 * @author Go Namhyeon <gnh1201@gmail.com>
* @author Go Namhyeon <abuse@catswords.net>
* @brief Zabbix JSON-RPC API (3.0) interface module * @brief Zabbix JSON-RPC API (3.0) interface module
* @documentation https://www.zabbix.com/documentation/current/ (4.4) * @documentation https://www.zabbix.com/documentation/3.0/manual/api
*/ */
if(!is_fn("get_zabbix_config")) { if(!check_function_exists("get_zabbix_config")) {
function get_zabbix_config() { function get_zabbix_config() {
$config = get_config(); $config = get_config();
return array( return array(
"host" => get_value_in_array("zabbix_host", $config, "127.0.0.1"), "host" => get_value_in_array("zabbix_host", $config, "127.0.0.1"),
"username" => get_value_in_array("zabbix_username", $config, "Admin"), "username" => get_value_in_array("zabbix_username", $config, "Admin"),
"password" => get_value_in_array("zabbix_password", $config, "zabbix"), "password" => get_value_in_array("zabbix_password", $config, "zabbix"),
"protocol" => get_value_in_array("zabbix_protocol", $config, "http"), "protocol" => get_value_in_array("zabbix_protocol", $config, "http"),
); );
} }
} }
if(!is_fn("zabbix_get_base_url")) { if(!check_function_exists("zabbix_get_base_url")) {
function zabbix_get_api_url() { function zabbix_get_api_url() {
$cnf = get_zabbix_config(); $cnf = get_zabbix_config();
return sprintf("%s://%s/zabbix/api_jsonrpc.php", $cnf['protocol'], $cnf['host']); return sprintf("%s://%s/zabbix/api_jsonrpc.php", $cnf['protocol'], $cnf['host']);
} }
} }
if(!is_fn("zabbix_get_id")) { if(!check_function_exists("zabbix_get_id")) {
function zabbix_get_id() { function zabbix_get_id() {
return 1; return rand(10000, 99999) * rand(10000, 99999);
} }
} }
if(!is_fn("zabbix_authenticate")) { if(!check_function_exists("zabbix_authenticate")) {
function zabbix_authenticate() { function zabbix_authenticate() {
$response = false; $response = false;
// get zabbix configuration // get zabbix configuration
$cnf = get_zabbix_config(); $cnf = get_zabbix_config();
// get zabbix api url // get zabbix api url
$zabbix_api_url = zabbix_get_api_url($cnf['host'], $cnf['protocol']); $zabbix_api_url = zabbix_get_api_url($cnf['host'], $cnf['protocol']);
// connect to zabbix server // connect to zabbix server
if(loadHelper("webpagetool")) { if(loadHelper("webpagetool")) {
$response = get_web_json($zabbix_api_url, "jsonrpc2.cache", array( $response = get_web_json($zabbix_api_url, "jsondata", array(
"method" => "user.login", "headers" => array(
"params" => array( "Content-Type" => "application/json-rpc",
"user" => $cnf['username'], ),
"password" => $cnf['password'], "data" => array(
), "jsonrpc" => "2.0",
"id" => zabbix_get_id(), "method" => "user.login",
"auth" => null "params" => array(
)); "user" => $cnf['username'],
} "password" => $cnf['password'],
),
"id" => zabbix_get_id(),
"auth" => null,
),
));
}
// set connection to global scope // set connection to global scope
set_shared_var("zabbix_api_url", $zabbix_api_url); set_scope("zabbix_api_url", $zabbix_api_url);
set_shared_var("zabbix_auth", get_property_value("result", $response)); set_scope("zabbix_auth", get_property_value("result", $response));
return $response; return $response;
} }
} }
if(!is_fn("zabbix_get_hostgroups")) { if(!check_function_exists("zabbix_retrieve_hosts")) {
function zabbix_get_hostgroups() { function zabbix_retrieve_hosts() {
$hostgroups = false; $response = false;
$response = false;
// get zabbix authentication
$zabbix_api_url = get_shared_var("zabbix_api_url");
$zabbix_auth = get_shared_var("zabbix_auth");
// connect to zabbix server // get zabbix authentication
if(loadHelper("webpagetool")) { $zabbix_api_url = get_scope("zabbix_api_url");
$response = get_web_json($zabbix_api_url, "jsonrpc2.cache", array( $zabbix_auth = get_scope("zabbix_auth");
"method" => "hostgroup.get",
"params" => array(
"output" => "extend"
),
"id" => zabbix_get_id(),
"auth" => $zabbix_auth
));
$hostgroups = get_property_value("result", $response);
}
return $hostgroups; // connect to zabbix server
} if(loadHelper("webpagetool")) {
$response = get_web_json($zabbix_api_url, "jsondata", array(
"headers" => array(
"Content-Type" => "application/json-rpc",
),
"data" => array(
"jsonrpc" => "2.0",
"method" => "host.get",
"params" => array(
"output" => array("hostid", "host"),
"selectInterfaces" => array("interfaceid", "ip"),
),
"id" => zabbix_get_id(),
"auth" => $zabbix_auth,
),
));
}
return $response;
}
} }
if(!is_fn("zabbix_get_hosts")) { if(!check_function_exists("zabbix_get_items")) {
function zabbix_get_hosts() { function zabbix_get_items($hostids="") {
$hosts = false; $response = false;
$response = false;
// get zabbix authentication // get zabbix authentication
$zabbix_api_url = get_shared_var("zabbix_api_url"); $zabbix_api_url = get_scope("zabbix_api_url");
$zabbix_auth = get_shared_var("zabbix_auth"); $zabbix_auth = get_scope("zabbix_auth");
// connect to zabbix server // connect to zabbix server
if(loadHelper("webpagetool")) { if(loadHelper("webpagetool")) {
$response = get_web_json($zabbix_api_url, "jsonrpc2.cache", array( $response = get_web_json($zabbix_api_url, "jsondata", array(
"method" => "host.get", "headers" => array(
"params" => array( "Content-Type" => "application/json-rpc",
"output" => array("hostid", "host", "status"), ),
"selectInterfaces" => array("interfaceid", "ip"), "data" => array(
"selectGroups" => "extend" "jsonrpc" => "2.0",
), "method" => "host.get",
"id" => zabbix_get_id(), "params" => array(
"auth" => $zabbix_auth "selectInventory" => true,
)); "selectItems" => array("name", "lastvalue", "units", "itemid", "lastclock", "value_type", "itemid"),
"output" => "extend",
"hostids" => $hostids,
"expandDescription" => 1,
"expandData" => 1,
),
"id" => zabbix_get_id(),
"auth" => $zabbix_auth,
),
));
}
$hosts = get_property_value("result", $response); return $response;
} }
return $hosts;
}
}
if(!is_fn("zabbix_retrieve_hosts")) {
function zabbix_retrieve_hosts() {
return zabbix_get_hosts();
}
}
if(!is_fn("zabbix_get_items")) {
function zabbix_get_items($hostids=null) {
$items = false;
$results = false;
$response = false;
// get zabbix authentication
$zabbix_api_url = get_shared_var("zabbix_api_url");
$zabbix_auth = get_shared_var("zabbix_auth");
// connect to zabbix server
if(loadHelper("webpagetool")) {
$response = get_web_json($zabbix_api_url, "jsonrpc2.cache", array(
"method" => "host.get",
"params" => array(
"selectInventory" => true,
"selectItems" => array("name", "key_", "status", "lastvalue", "units", "itemid", "lastclock", "value_type", "itemid"),
"output" => "extend",
"hostids" => $hostids,
"expandDescription" => 1,
"expandData" => 1,
),
"id" => zabbix_get_id(),
"auth" => $zabbix_auth
));
$results = get_property_value("result", $response);
foreach($results as $result) {
$items = get_property_value("items", $result);
break;
}
}
return $items;
}
}
if(!is_fn("zabbix_get_problems")) {
function zabbix_get_problems($hostids=null) {
$problems = false;
$response = false;
// get zabbix authentication
$zabbix_api_url = get_shared_var("zabbix_api_url");
$zabbix_auth = get_shared_var("zabbix_auth");
// connect to zabbix server
if(loadHelper("webpagetool")) {
$response = get_web_json($zabbix_api_url, "jsonrpc2.cache", array(
"method" => "problem.get",
"params" => array(
"output" => "extend",
"selectAcknowledges" => "extend",
"selectTags" => "extend",
"selectSuppressionData" => "extend",
"hostids" => $hostids,
"recent" => "false",
//"suppressed" => "false",
//"acknowledged" => "false",
//"sortfield" => ["eventid"],
//"sortorder" => "DESC",
//"time_from" => get_current_datetime(array("adjust" => "1 hour"))
),
"id" => zabbix_get_id(),
"auth" => $zabbix_auth
));
}
$problems = get_property_value("result", $response);
return $problems;
}
}
if(!is_fn("zabbix_get_triggers")) {
function zabbix_get_triggers($hostids=null) {
$triggers = false;
$response = false;
// get zabbix authentication
$zabbix_api_url = get_shared_var("zabbix_api_url");
$zabbix_auth = get_shared_var("zabbix_auth");
if(loadHelper("webpagetool")) {
$response = get_web_json($zabbix_api_url, "jsonrpc2.cache", array(
"method" => "trigger.get",
"params" => array(
"hostids" => $hostids,
"output" => "extend",
"selectFunctions" => "extend",
"filter" => array(
"value" => 1,
"status" => 0
)
),
"id" => zabbix_get_id(),
"auth" => $zabbix_auth
));
}
$triggers = get_property_value("result", $response);
return $triggers;
}
}
if(!is_fn("zabbix_get_alerts")) {
function zabbix_get_alerts($hostids=null, $time_from=0, $time_till=0) {
$alerts = false;
$response = false;
// get zabbix authentication
$zabbix_api_url = get_shared_var("zabbix_api_url");
$zabbix_auth = get_shared_var("zabbix_auth");
if(loadHelper("webpagetool")) {
$params = array(
"output" => "extend",
"hostids" => $hostids,
"sortfield" => array("clock", "eventid"),
"sortorder" => "DESC"
);
if($time_from > 0) {
$params['time_from'] = $time_from - 1;
}
if($time_till > 0) {
$params['time_till'] = $time_till + 1;
}
$response = get_web_json($zabbix_api_url, "jsonrpc2.cache", array(
"method" => "event.get",
"params" => array(
"output" => "extend",
"hostids" => $hostids,
"sortfield" => array("clock", "eventid"),
"sortorder" => "DESC"
),
"auth" => $zabbix_auth,
"id" => zabbix_get_id()
));
$alerts = get_property_value("result", $response);
}
return $alerts;
}
}
if(!is_fn("zabbix_get_records")) {
function zabbix_get_records($itemids, $now_dt="", $adjust="-24h", $value_type=3) {
$records = false;
$response = false;
// get current datetime
if(empty($now_dt)) {
$now_dt = get_current_datetime();
}
// get zabbix authentication
$zabbix_api_url = get_shared_var("zabbix_api_url");
$zabbix_auth = get_shared_var("zabbix_auth");
// set time range variables
$time_from = get_current_timestamp(array("now" => $now_dt, "adjust" => $adjust));
$time_till = get_current_timestamp(array("now" => $now_dt));
// get history
// 0-numeric float; 1-character; 2-log; 3-numeric unsigned; 4-text
if(loadHelper("webpagetool")) {
$params = array(
"output" => "extend",
"history" => $value_type,
"itemids" => $itemids,
"sortfield" => "clock",
"sortorder" => "DESC",
"time_from" => $time_from,
"time_till" => $time_till
);
$response = get_web_json($zabbix_api_url, "jsonrpc2.cache", array(
"method" => "history.get",
"params" => $params,
"auth" => $zabbix_auth,
"id" => zabbix_get_id()
));
$records = get_property_value("result", $response);
}
return $records;
}
} }

View File

@ -2,121 +2,121 @@
/** /**
* @file zeroboard4.dbt.php * @file zeroboard4.dbt.php
* @date 2018-08-20 * @date 2018-08-20
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Database Helper for Zeroboard 4 PL 9 (experimental) * @brief Database Helper for Zeroboard 4 PL 9 (experimental)
*/ */
// get database prefix // get database prefix
if(!is_fn("zb4_get_db_prefix")) { if(!check_function_exists("zb4_get_db_prefix")) {
function zb4_get_db_prefix() { function zb4_get_db_prefix() {
return "zetyx_"; return "zetyx_";
} }
} }
// get table // get table
if(!is_fn("zb4_get_db_table")) { if(!check_function_exists("zb4_get_db_table")) {
function zb4_get_db_table($tablename) { function zb4_get_db_table($tablename) {
return (zb4_get_db_prefix() . $tablename); return (zb4_get_db_prefix() . $tablename);
} }
} }
// get write table // get write table
if(!is_fn("zb4_get_write_table")) { if(!check_function_exists("zb4_get_write_table")) {
function zb4_get_write_table($tablename, $version=4) { function zb4_get_write_table($tablename, $version=4) {
$write_prefix = zb4_get_db_prefix() . "board_"; $write_prefix = zb4_get_db_prefix() . "board_";
$write_table = $write_prefix . $tablename; $write_table = $write_prefix . $tablename;
return $write_table; return $write_table;
} }
} }
// write post // write post
if(!is_fn("zb4_write_post")) { if(!check_function_exists("zb4_write_post")) {
function zb4_write_post($tablename, $data=array()) { function zb4_write_post($tablename, $data=array()) {
$result = 0; $result = 0;
$write_table = zb4_get_write_table($tablename); $write_table = zb4_get_write_table($tablename);
$mb_id = get_current_user_name(); $mb_id = get_current_user_name();
// load helpers // load helpers
loadHelper("networktool"); loadHelper("networktool");
loadHelper("naturename.kr"); loadHelper("naturename.kr");
$write_fields = array(); $write_fields = array();
$write_default_fields = array( $write_default_fields = array(
//"no" => "", // auto increment //"no" => "", // auto increment
"division" => "1", "division" => "1",
"headnum" => "0", "headnum" => "0",
"arrangenum" => "0", "arrangenum" => "0",
"depth" => "0", "depth" => "0",
"prev_no" => "0", "prev_no" => "0",
"next_no" => "0", "next_no" => "0",
"father" => "0", "father" => "0",
"child" => "0", "child" => "0",
"ismember" => "0", "ismember" => "0",
"islevel" => "10", "islevel" => "10",
"memo" => "" "memo" => ""
"ip" => get_network_client_addr(), "ip" => get_network_client_addr(),
"password" => "", "password" => "",
"name" => naturename_kr_get_generated_name(), "name" => naturename_kr_get_generated_name(),
"homepage" => "", "homepage" => "",
"email" => "", "email" => "",
"subject" => "", "subject" => "",
"use_html" => "0", "use_html" => "0",
"reply_mail" => "0", "reply_mail" => "0",
"category" => "1", "category" => "1",
"is_secret" => "0", "is_secret" => "0",
"sitelink1" => "", "sitelink1" => "",
"sitelink2" => "", "sitelink2" => "",
"file_name1" => "", "file_name1" => "",
"file_name2" => "", "file_name2" => "",
"s_file_name1" => "", "s_file_name1" => "",
"s_file_name2" => "", "s_file_name2" => "",
"download1" => "0", "download1" => "0",
"download2" => "0", "download2" => "0",
"reg_date" => "0", "reg_date" => "0",
"hit" => "0", "hit" => "0",
"vote" => "0", "vote" => "0",
"total_comment" => "0", "total_comment" => "0",
"x" => "", "x" => "",
"y" => "", "y" => "",
); );
foreach($write_default_fields as $k=>$v) { foreach($write_default_fields as $k=>$v) {
if(in_array($k, array("mb_id", "wr_num"))) { if(in_array($k, array("mb_id", "wr_num"))) {
$write_fields[$k] = $v; $write_fields[$k] = $v;
} else { } else {
$write_fields[$k] = array_key_empty($k, $data) ? $v : $data[$k]; $write_fields[$k] = array_key_empty($k, $data) ? $v : $data[$k];
} }
} }
foreach($data as $k=>$v) { foreach($data as $k=>$v) {
if(!in_array($k, $write_default_fields)) { if(!in_array($k, $write_default_fields)) {
$write_fields[$k] = $v; $write_fields[$k] = $v;
} }
} }
if(count($write_fields) > 0) { if(count($write_fields) > 0) {
$sql = get_bind_to_sql_insert($write_table, $write_fields); $sql = get_bind_to_sql_insert($write_table, $write_fields);
if(exec_db_query($sql, $write_fields)) { if(exec_db_query($sql, $write_fields)) {
$result = get_db_last_id(); $result = get_db_last_id();
} }
} }
return $result; return $result;
} }
} }
if(!is_fn("zb4_get_posts")) { if(!check_function_exists("zb4_get_posts")) {
function zb4_get_posts($table_name, $page=1, $limit=20, $options=array()) { function zb4_get_posts($table_name, $page=1, $limit=20, $options=array()) {
$sql = "select * from " . zb4_get_write_table($table_name) . " order by no desc" . get_page_range($page, $limit); $sql = "select * from " . zb4_get_write_table($table_name) . " order by no desc" . get_page_range($page, $limit);
return exec_db_fetch_all($sql); return exec_db_fetch_all($sql);
} }
} }
if(!is_fn("zb4_get_post_by_id")) { if(!check_function_exists("zb4_get_post_by_id")) {
function zb4_get_post_by_id($table_name, $post_id) { function zb4_get_post_by_id($table_name, $post_id) {
$sql = "select * from " . zb4_get_write_table($table_name) . " where no = :no"; $sql = "select * from " . zb4_get_write_table($table_name) . " where no = :no";
return exec_db_fetch($sql, array( return exec_db_fetch($sql, array(
"no" => $post_id "no" => $post_id
)); ));
} }
} }

142
index.php
View File

@ -1,125 +1,55 @@
<?php <?php
/** /**
* @file index.php * @file index.php
* @created_on 2018-05-27 * @date 2018-05-27
* @updated_on 2020-06-14 * @author Go Namhyeon <gnh1201@gmail.com>
* @author Go Namhyeon <abuse@catswords.net> * @brief ReasonableFramework
* @brief ReasonableFramework is RVHM structured PHP framework with common security * @cvs http://github.com/gnh1201/reasonableframework
* @cvs https://github.com/gnh1201/reasonableframework
* @sponsor https://patreon.com/catswords (with advanced security)
*/ */
define("_DEF_VSPF_", true); // compatible to VSPF define("_DEF_VSPF_", true); // compatible to VSPF
define("_DEF_RSF_", true); // compatible to RSF define("_DEF_RSF_", true); // compatible to RSF
define("APP_DEVELOPMENT", false); // set the status of development define("APP_DEVELOPMENT", false); // set the status of development
define("DOC_EOL", "\r\n"); // set the 'end of line' define("DOC_EOL", "\r\n"); // set the 'end of line' commonly
define("CORS_DOMAINS", false); // common security: allow origin domains (e.g. example.org,*.example.org)
define("PHP_FIREWALL_REQUEST_URI", strip_tags($_SERVER['REQUEST_URI'])); // advanced security
define("PHP_FIREWALL_ACTIVATION", false); // advanced security
define("PHP_DDOS_PROTECTION", false); // advanced security
// development mode // check if current status is development
if(APP_DEVELOPMENT == true) { if(APP_DEVELOPMENT == true) {
error_reporting(E_ALL); error_reporting(E_ALL);
@ini_set("log_errors", 1); ini_set("display_errors", 1);
@ini_set("error_log", sprintf("%s/storage/sandbox/logs/error.log", getcwd()));
} else {
error_reporting(E_ERROR | E_PARSE);
}
@ini_set("display_errors", 1);
// CORS Security (https or http)
if(CORS_DOMAINS !== false) {
$domains = explode(",", CORS_DOMAINS);
$_origin = array_key_exists("HTTP_ORIGIN", $_SERVER) ? $_SERVER['HTTP_ORIGIN'] : "";
$origins = array();
if(!in_array("*", $domains)) {
foreach($domains as $domain) {
if(!empty($domain)) {
if(substr($domain, 0, 2) == "*.") { // support wildcard
$needle = substr($domain, 1);
$length = strlen($needle);
if(substr($_origin, -$length) === $needle) {
$origins[] = $_origin;
}
} else {
$origins[] = sprintf("https://%s", $domain);
$origins[] = sprintf("http://%s", $domain);
}
}
}
if(count($origins) > 0) {
if(in_array($_origin, $origins)) {
header(sprintf("Access-Control-Allow-Origin: %s", $_origin));
} else {
header(sprintf("Access-Control-Allow-Origin: %s", $origins[0]));
}
}
} else {
header("Access-Control-Allow-Origin: *");
}
} }
// set shared vars // set empty scope
$shared_vars = array(); $scope = array();
// define system modules // define system modules
$load_systems = array("base", "storage", "config", "security", "database", "uri", "logger"); $load_systems = array("base", "storage", "config", "security", "database", "uri", "logger");
// load system modules // load system modules
foreach($load_systems as $system_name) { foreach($load_systems as $system_name) {
$system_inc_file = "./system/" . $system_name . ".php"; $system_inc_file = "./system/" . $system_name . ".php";
if(file_exists($system_inc_file)) { if(file_exists($system_inc_file)) {
if($system_name == "base") { if($system_name == "base") {
include($system_inc_file); include($system_inc_file);
register_loaded("system", $system_inc_file); register_loaded("system", $system_inc_file);
} else { } else {
loadModule($system_name); loadModule($system_name);
}
} else {
echo "ERROR: Dose not exists " . $system_inc_file;
exit;
} }
} else {
echo "ERROR: Dose not exists " . $system_inc_file;
exit;
}
} }
// get config // get config
$config = get_config(); $config = get_config();
// get requests
$requests = get_requests();
// get PID(Process ID)
set_shared_var("mypid", getmypid());
// set database connection
// variable _unset_dbc: will not connect to database
$_unset_dbc = get_requested_value("_unset_dbc");
if(empty($_unset_dbc)) {
set_shared_var("dbc", get_db_connect());
}
// set max_execution_time // set max_execution_time
$max_execution_time = get_value_in_array("max_execution_time", $config, -1); $max_execution_time = get_value_in_array("max_execution_time", $config, 0);
set_max_execution_time($max_execution_time); @ini_set("max_execution_time", $max_execution_time);
// set memory limit
$memory_limit = get_value_in_array("memory_limit", $config, -1);
set_memory_limit($memory_limit);
// set upload max filesize
$upload_max_filesize = get_value_in_array("upload_max_filesize", $config, -1);
set_upload_max_filesize($upload_max_filesize);
// set post max size
$post_max_size = get_value_in_array("post_max_size", $config, -1);
set_post_max_size($post_max_size);
// start session
start_isolated_session();
// set autoloader // set autoloader
if(!array_key_empty("enable_autoload", $config)) { if(!array_key_empty("enable_autoload", $config)) {
set_autoloader(); set_autoloader();
} }
// set timezone // set timezone
@ -127,28 +57,12 @@ $default_timezone = get_value_in_array("timezone", $config, "UTC");
date_default_timezone_set($default_timezone); date_default_timezone_set($default_timezone);
// write visit log // write visit log
$log_mode_visit = get_value_in_array("log_mode_visit", $config, ""); write_visit_log();
write_visit_log($log_mode_visit);
// get requested route // get requested route
$route = read_route(); $route = read_route();
// advanced security: PHP firewall // load route file
if(PHP_FIREWALL_ACTIVATION !== false) { if(!loadRoute($route, $scope)) {
loadHelper("php-firewall.lnk"); loadRoute("errors/404", $scope);
} }
// advanced security: DDOS protection
if(PHP_DDOS_PROTECTION !== false) {
loadHelper("php-ddos.lnk");
}
// load route
if(!loadRoute($route, $shared_vars)) {
loadRoute("errors/404", $shared_vars);
}
// disconnect database
close_db_connect();
// EOF

View File

@ -2,17 +2,17 @@
/** /**
* @file api.getorder.pgkcp.php * @file api.getorder.pgkcp.php
* @date 2018-09-24 * @date 2018-09-24
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief KCP PG(Payment Gateway) get completed order * @brief KCP PG(Payment Gateway) get completed order
*/ */
$ordr_idxx = get_requested_value("ordr_idxx"); $ordr_idxx = get_requested_value("ordr_idxx");
if(empty($ordr_idxx)) { if(empty($ordr_idxx)) {
set_error("ordr_idxx can not empty"); set_error("ordr_idxx can not empty");
show_errors(); show_errors();
} }
header("Content-type:application/json"); header("Content-type:application/json");
echo read_storage_file(get_hashed_text($ordr_idxx) . ".json", array( echo read_storage_file(get_hashed_text($ordr_idxx) . ".json", array(
"storage_type" => "payman" "storage_type" => "payman"
)); ));

View File

@ -2,7 +2,7 @@
/** /**
* @file api.gnuboard.php * @file api.gnuboard.php
* @date 2018-05-31 * @date 2018-05-31
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Integration controller for Gnuboard CMS 4.x, 5.x * @brief Integration controller for Gnuboard CMS 4.x, 5.x
*/ */
@ -19,43 +19,43 @@ $bo_table = get_requested_value("bo_table");
$data = array(); $data = array();
$result = array( $result = array(
"success" => false "success" => false
); );
switch($action) { switch($action) {
case "write": case "write":
$version = get_requested_value("version"); $version = get_requested_value("version");
$data = array( $data = array(
"wr_subject" => get_requested_value("wr_subject"), "wr_subject" => get_requested_value("wr_subject"),
"wr_content" => get_requested_value("wr_content"), "wr_content" => get_requested_value("wr_content"),
); );
for($i = 0; $i < 10; $i++) { for($i = 0; $i < 10; $i++) {
$data["wr_" . $i] = get_requested_value("wr_" . $i); $data["wr_" . $i] = get_requested_value("wr_" . $i);
} }
if($wr_id = gnb_write_post($bo_table, $data, $version)) { if($wr_id = gnb_write_post($bo_table, $data, $version)) {
$result = array( $result = array(
"success" => true, "success" => true,
"data" => array( "data" => array(
"wr_id" => $wr_id, "wr_id" => $wr_id,
), ),
); );
} }
break; break;
case "read": case "read":
$wr_id = get_requested_value("wr_id"); $wr_id = get_requested_value("wr_id");
$row = gnb_get_post_by_id($bo_table, $wr_id); $row = gnb_get_post_by_id($bo_table, $wr_id);
if(!array_key_empty("wr_id", $row)) { if(!array_key_empty("wr_id", $row)) {
$result = array( $result = array(
"success" => true, "success" => true,
"data" => $row "data" => $row
); );
} }
} }
set_header_content_type("json"); set_header_content_type("json");

View File

@ -2,7 +2,7 @@
/** /**
* @file api.mailgun.php * @file api.mailgun.php
* @date 2019-04-15 * @date 2019-04-15
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Mailgun API controller * @brief Mailgun API controller
*/ */

View File

@ -2,7 +2,7 @@
/** /**
* @file api.setconfig.pgkcp.php * @file api.setconfig.pgkcp.php
* @date 2018-09-30 * @date 2018-09-30
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief KCP PG(Payment Gateway) set configuration API * @brief KCP PG(Payment Gateway) set configuration API
*/ */
@ -17,39 +17,39 @@ $api_config = array();
$config_filename = "api.config.pgkcp.json"; $config_filename = "api.config.pgkcp.json";
if($mode == "clear") { if($mode == "clear") {
$rm = remove_stroage_file($config_filename, array( $rm = remove_stroage_file($config_filename, array(
"storage_type" => "payman" "storage_type" => "payman"
)); ));
if(!$rm) { if(!$rm) {
echo get_callable_token("failed"); echo get_callable_token("failed");
} else { } else {
echo get_callable_token("success"); echo get_callable_token("success");
} }
exit; exit;
} }
if($mode == "test") { if($mode == "test") {
$api_config['g_conf_gw_url'] = "testpaygw.kcp.co.kr"; $api_config['g_conf_gw_url'] = "testpaygw.kcp.co.kr";
$api_config['g_conf_js_url'] = "https://testpay.kcp.co.kr/plugin/payplus_web.jsp"; $api_config['g_conf_js_url'] = "https://testpay.kcp.co.kr/plugin/payplus_web.jsp";
$api_config['g_conf_site_cd'] = "T0000"; $api_config['g_conf_site_cd'] = "T0000";
$api_config['g_conf_site_key'] = "3grptw1.zW0GSo4PQdaGvsF__"; $api_config['g_conf_site_key'] = "3grptw1.zW0GSo4PQdaGvsF__";
$api_config['g_conf_site_name'] = get_generated_name(); $api_config['g_conf_site_name'] = get_generated_name();
} else { } else {
$api_config['g_conf_gw_url'] = "paygw.kcp.co.kr"; $api_config['g_conf_gw_url'] = "paygw.kcp.co.kr";
$api_config['g_conf_js_url'] = "https://pay.kcp.co.kr/plugin/payplus_web.jsp"; $api_config['g_conf_js_url'] = "https://pay.kcp.co.kr/plugin/payplus_web.jsp";
$api_config['g_conf_site_cd'] = $site_cd; $api_config['g_conf_site_cd'] = $site_cd;
$api_config['g_conf_site_key'] = $site_key; $api_config['g_conf_site_key'] = $site_key;
$api_config['g_conf_site_name'] = (empty($site_name) ? get_generated_name() : $site_name); $api_config['g_conf_site_name'] = (empty($site_name) ? get_generated_name() : $site_name);
} }
$api_config_encoded = json_encode($api_config); $api_config_encoded = json_encode($api_config);
$fw = write_storage_file($api_config_encoded, array( $fw = write_storage_file($api_config_encoded, array(
"storage_type" => "payman", "storage_type" => "payman",
"filename" => $config_filename "filename" => $config_filename
)); ));
if(!$fw) { if(!$fw) {
echo get_callable_token("failed"); echo get_callable_token("failed");
} else { } else {
echo get_callable_token("success"); echo get_callable_token("success");
} }

View File

@ -2,7 +2,7 @@
/** /**
* @file api.social.php * @file api.social.php
* @date 2018-09-26 * @date 2018-09-26
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief SocialTools API (refactoring from SocioRouter API) * @brief SocialTools API (refactoring from SocioRouter API)
*/ */
@ -23,35 +23,35 @@ $message = get_requested_value("message");
// if make new connection // if make new connection
if($action != "new") { if($action != "new") {
$api_session_id = get_session("api_session_id"); $api_session_id = get_session("api_session_id");
} else { } else {
$api_session_id = ""; $api_session_id = "";
set_session("api_session_id", $api_session_id); set_session("api_session_id", $api_session_id);
} }
$session_data = array(); $session_data = array();
if(!empty($api_session_id)) { if(!empty($api_session_id)) {
$fr = read_storage_file($api_session_id, array( $fr = read_storage_file($api_session_id, array(
"storage_type" => "session" "storage_type" => "session"
)); ));
if(!$fr) { if(!$fr) {
// renew api session id // renew api session id
$api_session_id = ""; $api_session_id = "";
set_session("api_session_id", $api_session_id); set_session("api_session_id", $api_session_id);
} else { } else {
$session_data = json_decode($fr); $session_data = json_decode($fr);
$provider = get_property_value("provider", $session_data); $provider = get_property_value("provider", $session_data);
$action = get_property_value("action", $session_data); $action = get_property_value("action", $session_data);
$redirect_uri = get_property_value("redirect_uri", $session_data); $redirect_uri = get_property_value("redirect_uri", $session_data);
$user_id = get_property_value("user_id", $session_data); $user_id = get_property_value("user_id", $session_data);
$connection_id = get_property_value("connection_id", $session_data); $connection_id = get_property_value("connection_id", $session_data);
$message = get_property_value("message", $session_data); $message = get_property_value("message", $session_data);
} }
} }
if(empty($provider)) { if(empty($provider)) {
set_error("provider is required field."); set_error("provider is required field.");
show_errors(); show_errors();
} }
$hauth_adapter = null; $hauth_adapter = null;
@ -61,82 +61,82 @@ $hauth_profile = null;
// load library // load library
$configfile = hybridauth_load($provider); $configfile = hybridauth_load($provider);
if(!$configfile) { if(!$configfile) {
set_error("can not load hybridauth library"); set_error("can not load hybridauth library");
show_errors(); show_errors();
} }
$hauth = new Hybrid_Auth($configfile); $hauth = new Hybrid_Auth($configfile);
// try session restore // try session restore
$session_flag = false; $session_flag = false;
if(!empty($connection_id)) { if(!empty($connection_id)) {
$hauth_session = get_stored_hybridauth_session($connection_id); $hauth_session = get_stored_hybridauth_session($connection_id);
if(!empty($hauth_session)) { if(!empty($hauth_session)) {
try { try {
$hauth->restoreSessionData($hauth_session); $hauth->restoreSessionData($hauth_session);
$session_flag = true; $session_flag = true;
} catch(Exception $e) { } catch(Exception $e) {
set_error("maybe, your connection is broken."); set_error("maybe, your connection is broken.");
show_errors(); show_errors();
} }
} }
} }
// check hybridauth request // check hybridauth request
if($hauth->isConnectedWith($provider)) { if($hauth->isConnectedWith($provider)) {
$hauth_session = $hauth->getSessionData(); $hauth_session = $hauth->getSessionData();
$connection_id = store_hybridauth_session($hauth_session, $user_id); $connection_id = store_hybridauth_session($hauth_session, $user_id);
if($connection_id) { if($connection_id) {
$session_flag = true; $session_flag = true;
} }
} }
// save session // save session
$api_session_id = get_hashed_text(make_random_id(32)); $api_session_id = get_hashed_text(make_random_id(32));
$session_data = array( $session_data = array(
"api_session_id" => $api_session_id, "api_session_id" => $api_session_id,
"provider" => $provider, "provider" => $provider,
"action" => $action, "action" => $action,
"redirect_uri" => $redirect_uri, "redirect_uri" => $redirect_uri,
"user_id" => $user_id, "user_id" => $user_id,
"connection_id" => $connection_id, "connection_id" => $connection_id,
"message" => $message "message" => $message
); );
$fw = write_storage_file(json_encode($session_data), array( $fw = write_storage_file(json_encode($session_data), array(
"storage_type" => "session", "storage_type" => "session",
"filename" => $api_session_id "filename" => $api_session_id
)); ));
if(!$fw) { if(!$fw) {
set_error("maybe, your storage is write-protected."); set_error("maybe, your storage is write-protected.");
show_errors(); show_errors();
} else { } else {
set_session("api_session_id", $api_session_id); set_session("api_session_id", $api_session_id);
} }
if(hybridauth_check_redirect()) { if(hybridauth_check_redirect()) {
hybridauth_process(); hybridauth_process();
} }
// try authenticate // try authenticate
try { try {
if(!$session_flag) { if(!$session_flag) {
$hauth_adapter = $hauth->authenticate($provider); $hauth_adapter = $hauth->authenticate($provider);
} else { } else {
$hauth_adapter = $hauth->getAdapter($provider); $hauth_adapter = $hauth->getAdapter($provider);
} }
$session_flag = true; $session_flag = true;
} catch(Exception $e) { } catch(Exception $e) {
$hauth_adapter = $hauth->authenticate($provider); $hauth_adapter = $hauth->authenticate($provider);
} }
if(!$session_flag) { if(!$session_flag) {
// if failed authenticate // if failed authenticate
redirect_uri(get_route_link("api.social", array( redirect_uri(get_route_link("api.social", array(
"provider" => $provider, "provider" => $provider,
"action" => $action, "action" => $action,
"redirect_uri" => $redirect_uri, "redirect_uri" => $redirect_uri,
"user_id" => $user_id, "user_id" => $user_id,
"connection_id" => $connection_id "connection_id" => $connection_id
), false)); ), false));
} }
// get user profile // get user profile
@ -145,87 +145,87 @@ $hauth_profile = $hauth_adapter->getUserProfile();
// do action // do action
$context = array(); $context = array();
switch($action) { switch($action) {
case "inbound": case "inbound":
break; break;
case "outbound": case "outbound":
$response = social_send_message($provider, $hauth_adapter, $message); $response = social_send_message($provider, $hauth_adapter, $message);
$object_id = social_parse_object_id($provider, $response); $object_id = social_parse_object_id($provider, $response);
$context = array( $context = array(
"success" => !(!$object_id), "success" => !(!$object_id),
"message" => "Have a nice day", "message" => "Have a nice day",
"user_id" => $user_id, "user_id" => $user_id,
"provider" => $provider, "provider" => $provider,
"object_id" => $object_id "object_id" => $object_id
); );
break; break;
case "new": case "new":
$context = array( $context = array(
"success" => true, "success" => true,
"message" => "Authenticated", "message" => "Authenticated",
"user_id" => $user_id, "user_id" => $user_id,
"provider" => $provider, "provider" => $provider,
"profile" => $hauth_profile, "profile" => $hauth_profile,
); );
break; break;
case "login": case "login":
$context = array( $context = array(
"success" => true, "success" => true,
"message" => "Authenticated", "message" => "Authenticated",
"user_id" => $user_id, "user_id" => $user_id,
"provider" => $provider, "provider" => $provider,
"profile" => $hauth_profile, "profile" => $hauth_profile,
); );
break; break;
case "bgworker": case "bgworker":
$response = social_send_message($provider, $hauth_adapter, $message); $response = social_send_message($provider, $hauth_adapter, $message);
$object_id = social_parse_object_id($provider, $response); $object_id = social_parse_object_id($provider, $response);
$context = array( $context = array(
"success" => !(!$object_id), "success" => !(!$object_id),
"message" => "Have a nice day", "message" => "Have a nice day",
"id" => $user_id, "id" => $user_id,
"connection" => $connection_id, "connection" => $connection_id,
"provider" => $provider, "provider" => $provider,
"object_id" => $object_id "object_id" => $object_id
); );
break; break;
case "cancel": // listen cancel authenticated callback case "cancel": // listen cancel authenticated callback
break; break;
case "delete": // listen delete ping case "delete": // listen delete ping
break; break;
case "accept": // listen accept ping case "accept": // listen accept ping
break; break;
case "object": // get object by id case "object": // get object by id
$object_id = get_requested_value("object_id"); $object_id = get_requested_value("object_id");
$context = array( $context = array(
"success" => true, "success" => true,
"message" => "Found", "message" => "Found",
"response" => social_get_object($provider, $hauth_adapter, $object_id) "response" => social_get_object($provider, $hauth_adapter, $object_id)
); );
break; break;
default: default:
set_error("Unknown action"); set_error("Unknown action");
show_errors(); show_errors();
} }
if(empty($redirect_uri)) { if(empty($redirect_uri)) {
header("Content-Type: application/json"); header("Content-Type: application/json");
echo json_encode($context); echo json_encode($context);
} else { } else {
$_display_name = get_hashed_text($hauth_profile->displayName, "base64"); $_display_name = get_hashed_text($hauth_profile->displayName, "base64");
$_idt_hash = get_hashed_text($hauth_profile->identifier, "sha1"); $_idt_hash = get_hashed_text($hauth_profile->identifier, "sha1");
$_idt_name = $_idt_hash . "@" . $provider; $_idt_name = $_idt_hash . "@" . $provider;
$_idt = get_hashed_text($_idt_name, "sha1"); $_idt = get_hashed_text($_idt_name, "sha1");
// renew api session id // renew api session id
$api_session_id = ""; $api_session_id = "";
set_session("api_session_id", $api_session_id); set_session("api_session_id", $api_session_id);
// go to redirect uri // go to redirect uri
redirect_with_params($redirect_uri, array( redirect_with_params($redirect_uri, array(
"connection_id" => $connection_id, "connection_id" => $connection_id,
"provider" => $provider, "provider" => $provider,
"display_name" => $_display_name, "display_name" => $_display_name,
"idt" => $_idt, "idt" => $_idt,
"_token" => $_token "_token" => $_token
)); ));
} }

View File

@ -2,57 +2,27 @@
/** /**
* @file api.twilio.php * @file api.twilio.php
* @date 2019-04-15 * @date 2019-04-15
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Twilio API controller (or domestic API) * @brief Twilio API controller
*/ */
loadHelper("twilio.api"); // for voice, or international loadHelper("twilio.api");
loadHelper("lguplus.api"); // for domestic
loadHelper("string.utils");
$action = get_requested_value("action", array("_JSON", "_ALL")); $action = get_requested_value("action", array("_JSON", "_ALL"));
$message = get_requested_value("message", array("_JSON", "_ALL")); $message = get_requested_value("message", array("_JSON", "_ALL"));
$to = get_requested_value("to", array("_JSON", "_ALL")); $to = get_requested_value("to", array("_JSON", "_ALL"));
$country = get_requested_value("country", array("_JSON", "_ALL"));
$is_domestic = array_key_equals("lguplus_country", $config, $country);
if(!$is_domestic) {
$to = sprintf("+%s%s", $country, $to);
} else {
$to = sprintf("%s%s", (substr($to, 0, 1) == "0" ? "" : "0"), $to);
}
$response = false; $response = false;
// temporary filter (example)
$terms = get_tokenized_text($message);
if(in_array("fuck", $terms) || in_array("bitch", $terms) || in_array("hell", $terms)) {
$action = "denied";
}
switch($action) { switch($action) {
case "text": case "text":
if(!$is_domestic) { $response = twilio_send_message($message, $to);
$response = twilio_send_message($message, $to);
} else {
$response = lguplus_send_message($message, $to);
}
break; break;
case "voice": case "voice":
$response = twilio_send_voice($message, $to); $response = twilio_send_voice($message, $to);
break; break;
case "denied":
$response = array("error" => "action is denied");
break;
default:
$response = array("error" => "action is required");
break;
} }
write_common_log(sprintf("message: %s, to: %s", $message, $to), "api.twilio");
header("Content-Type: application/json"); header("Content-Type: application/json");
echo json_encode($response); echo json_encode($response);

View File

@ -2,7 +2,7 @@
/** /**
* @file api.uuid.php * @file api.uuid.php
* @date 2018-08-19 * @date 2018-08-19
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief UUID Generator API * @brief UUID Generator API
*/ */

View File

@ -2,7 +2,7 @@
/** /**
* @file api.zabbix.php * @file api.zabbix.php
* @date 2019-04-15 * @date 2019-04-15
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Zabbix API * @brief Zabbix API
*/ */

View File

@ -2,7 +2,7 @@
/** /**
* @file mobileswitcher.php * @file mobileswitcher.php
* @date 2019-04-29 * @date 2019-04-29
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief mobile device switcher * @brief mobile device switcher
*/ */

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @file ordercomplete.pgkcp.php * @file ordercomplete.pgkcp.php
* @created_on 2018-09-03 * @date 2018-09-03
* @updated_on 2020-01-25 * @author Go Namhyeon <gnh1201@gmail.com>
* @author Go Namhyeon <abuse@catswords.net> * @brief KCP PG(Payment Gateway) contoller when complete
* @brief KCP PG(Payment Gateway) contoller when completed
*/ */
// detect CSRF attack // detect CSRF attack
if(check_token_abuse_by_requests("_token", "_POST")) { if(check_token_abuse_by_requests("_token", "_POST")) {
set_error("Access denied because of security violation"); set_error("Access denied. (Expired session or Website attacker)");
show_errors(); show_errors();
} }
// set token // set token
@ -27,68 +26,39 @@ $pay_method_alias = get_requested_value("pay_method_alias");
// A001: free plan (무료) // A001: free plan (무료)
// A002: hand-writing payment (수기결제, 무통장입금 등) // A002: hand-writing payment (수기결제, 무통장입금 등)
$action = "cancel"; $action = "cancel";
if(in_array($res_cd, array("0000", "A001"))) { if(in_array($res_cd, array("0000", "A001")) {
$action = "complete"; $action = "complete";
} elseif(in_array($res_cd, array("A002"))) { } elseif(in_array($res_cd, array("A002")) {
$action = "hold"; $action = "hold";
} }
// check ordr_idxx // check ordr_idxx
if(empty($ordr_idxx)) { if(empty($ordr_idxx)) {
set_error("ordr_idxx is required"); set_error("ordr_idxx can not empty");
show_errors(); set_errors();
} }
// write storage file // write storage file
$fd = json_encode($requests['_POST']); $fd = json_encode($requests['_POST']);
$fw = write_storage_file($fd, array( $fw = write_storage_file($fd, array(
"filename" => get_hashed_text($ordr_idxx) . ".json", "filename" => get_hashed_text($ordr_idxx) . ".json",
"storage_type" => "payman" "storage_type" => "payman"
)); ));
// check write-protected // check write-protected
if(!$fw) { if(!$fw) {
set_error("maybe, your storage is write-protected."); set_error("maybe, your storage is write-protected.");
show_errors(); show_errors();
} }
// response
$_token = get_session_token();
if(empty($redirect_url)) {
$jscontent = <<<EOF
<!doctype html>
<html>
<head>
<meta charset="utf8">
</head>
<body>
<script type="text/javascript">//<!--<![CDATA[
if(window.opener && !window.opener.closed) {
window.opener.payman_callback({
"token": "$_token",
"ordr_idxx": "$ordr_idxx",
"res_cd": "$res_cd",
"pay_method_alias": "$pay_method_alias"
});
window.close();
self.close();
this.close();
}
//]]>--></script>
</body>
</html>
EOF;
echo $jscontent;
} else {
// redirect // redirect
redirect_uri(get_final_link($redirect_url, array( redirect_uri(get_final_link($redirect_url, array(
"_token" => $_token, "_token" => get_session_token(),
"_route" => get_requested_value("route"), "_route" => get_requested_value("route"),
"_action" => $action, "_action" => $action,
"_ordr_idxx" => $ordr_idxx, "_ordr_idxx" => $ordr_idxx,
"_res_cd" => $res_cd, "_res_cd" => $res_cd,
"_pay_method_alias" => $pay_method_alias "_pay_method_alias" => $pay_method_alias
), false), array( ), false), array(
"check_origin" => true "check_origin" => true
)); ));
}

View File

@ -2,7 +2,7 @@
/** /**
* @file orderform.php * @file orderform.php
* @date 2018-09-03 * @date 2018-09-03
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief order form * @brief order form
*/ */
@ -13,16 +13,16 @@ set_session_token();
$pay_method_alias = get_requested_value("pay_method_alias"); $pay_method_alias = get_requested_value("pay_method_alias");
$data = array( $data = array(
"_token" => get_session_token(), "_token" => get_session_token(),
"_next_route" => "orderpay.pgkcp", "_next_route" => "orderpay.pgkcp",
"redirect_url" => get_requested_value("redirect_url"), "redirect_url" => get_requested_value("redirect_url"),
"pay_method_alias" => (!empty($pay_method_alias) ? $pay_method_alias : "CRE"), "pay_method_alias" => (!empty($pay_method_alias) ? $pay_method_alias : "CRE"),
"good_name" => get_requested_value("good_name"), "good_name" => get_requested_value("good_name"),
"good_mny" => get_requested_value("good_mny"), "good_mny" => get_requested_value("good_mny"),
"buyr_name" => get_requested_value("buyr_name"), "buyr_name" => get_requested_value("buyr_name"),
"buyr_mail" => get_requested_value("buyr_mail"), "buyr_mail" => get_requested_value("buyr_mail"),
"buyr_tel1" => get_requested_value("buyr_tel1"), "buyr_tel1" => get_requested_value("buyr_tel1"),
"pay_data" => get_requested_value("pay_data"), "pay_data" => get_requested_value("pay_data"),
); );
renderView("view_orderform", $data); renderView("view_orderform", $data);

View File

@ -6,17 +6,16 @@ set_session_token();
$pay_method_alias = get_requested_value("pay_method_alias"); $pay_method_alias = get_requested_value("pay_method_alias");
$data = array( $data = array(
"_token" => get_session_token(), "_token" => get_session_token(),
"_next_route" => "orderpay.pgkcp", "_next_route" => "orderpay.pgkcp",
"redirect_url" => get_requested_value("redirect_url"), "redirect_url" => get_requested_value("redirect_url"),
"pay_method_alias" => (!empty($pay_method_alias) ? $pay_method_alias : "CRE"), "pay_method_alias" => (!empty($pay_method_alias) ? $pay_method_alias : "CRE"),
"good_name" => get_requested_value("good_name"), "good_name" => get_requested_value("good_name"),
"good_mny" => get_requested_value("good_mny"), "good_mny" => get_requested_value("good_mny"),
"buyr_name" => get_requested_value("buyr_name"), "buyr_name" => get_requested_value("buyr_name"),
"buyr_mail" => get_requested_value("buyr_mail"), "buyr_mail" => get_requested_value("buyr_mail"),
"buyr_tel1" => get_requested_value("buyr_tel1"), "buyr_tel1" => get_requested_value("buyr_tel1"),
"pay_data" => get_requested_value("pay_data"), "pay_data" => get_requested_value("pay_data"),
"eng_flag" => get_requested_value("eng_flag")
); );
renderView("view_orderform.widget", $data); renderView("view_orderform.widget", $data);

View File

@ -2,30 +2,28 @@
/** /**
* @file orderpay.pgkcp.php * @file orderpay.pgkcp.php
* @date 2018-08-25 * @date 2018-08-25
* @updated 2019-10-14 * @author Go Namhyeon <gnh1201@gmail.com>
* @author Go Namhyeon <abuse@catswords.net>
* @brief KCP PG(Payment Gateway) Controller * @brief KCP PG(Payment Gateway) Controller
*/ */
if(!defined("_DEF_RSF_")) set_error_exit("do not allow access"); if(!defined("_DEF_RSF_")) set_error_exit("do not allow access");
$debug = get_requested_value("debug"); $debug = get_requested_value("debug");
$mode = get_requested_value("mode");
if($debug != "true") { if($debug != "true") {
// 필수 항목 체크 // 필수 항목 체크
$required_fields = array("pay_method_alias", "good_name", "good_mny", "buyr_name", "buyr_mail", "buyr_tel1", "chk_agree"); $required_fields = array("pay_method_alias", "good_name", "good_mny", "buyr_name", "buyr_mail", "buyr_tel1", "chk_agree");
foreach($required_fields as $name) { foreach($required_fields as $name) {
if(array_key_empty($name, $requests['_ALL'])) { if(array_key_empty($name, $requests['_ALL'])) {
set_error_exit("required field is empty. " . $name); set_error_exit("required field is empty. " . $name);
} }
} }
// detect CSRF attack // detect CSRF attack
if($mode != "widget" && check_token_abuse_by_requests("_token")) { if(check_token_abuse_by_requests("_token")) {
set_error("Access denied because of security violation"); set_error("Access denied. (Expired session or Website attacker)");
show_errors(); show_errors();
} }
} }
set_session_token(); set_session_token();
@ -42,47 +40,46 @@ extract($pgkcp_config);
// initalize data // initalize data
$payinfo = array(); $payinfo = array();
$data = array( $data = array(
"payinfo" => $payinfo, "payinfo" => $payinfo,
"redirect_url" => get_requested_value("redirect_url"), "redirect_url" => get_requested_value("redirect_url"),
"_token" => get_session_token(), "_token" => get_session_token(),
"_next_route" => "orderpay.step2.pgkcp", "_next_route" => "orderpay.step2.pgkcp",
); );
// 1. 주문 정보 입력: 결제에 필요한 주문 정보를 입력 및 설정합니다. // 1. 주문 정보 입력: 결제에 필요한 주문 정보를 입력 및 설정합니다.
$fieldnames = array( $fieldnames = array(
"redirect_url", // Redirect URL "pay_method", // 지불 방법
"pay_method", // 지불 방법 "pay_method_alias", // 지불 방법 별칭
"pay_method_alias", // 지불 방법 별칭 "ordr_idxx", // 주문 번호
"ordr_idxx", // 주문 번호 "good_name", // 상품 이름
"good_name", // 상품 이름 "good_mny", // 결제 금액
"good_mny", // 결제 금액 "buyr_name", // 주문자 이름
"buyr_name", // 주문자 이름 "buyr_mail", // 주문자 전자우편(이메일) 주소
"buyr_mail", // 주문자 전자우편(이메일) 주소 "buyr_tel1", // 주문자 연락처 1
"buyr_tel1", // 주문자 연락처 1 "buyr_tel2", // 주문자 연락처 2
"buyr_tel2", // 주문자 연락처 2 "pay_data" // 주문 상세 데이터
"pay_data" // 주문 상세 데이터
); );
foreach($fieldnames as $name) { foreach($fieldnames as $name) {
$payinfo[$name] = make_safe_argument(get_requested_value($name)); $payinfo[$name] = make_safe_argument(get_requested_value($name));
} }
// pay_method 처리 // pay_method 처리
$pay_method_rules = array( $pay_method_rules = array(
"CRE" => "100000000000", // 신용카드 "CRE" => "100000000000", // 신용카드
"ACC" => "010000000000", // 계좌이체 "ACC" => "010000000000", // 계좌이체
"VAC" => "001000000000", // 가상계좌 "VAC" => "001000000000", // 가상계좌
"POI" => "000100000000", // 포인트 "POI" => "000100000000", // 포인트
"PHO" => "000010000000", // 휴대폰 "PHO" => "000010000000", // 휴대폰
"GIF" => "000000001000", // 상품권 "GIF" => "000000001000", // 상품권
"ARS" => "000000000010", // ARS "ARS" => "000000000010", // ARS
"CAV" => "111000000000" // 신용카드/계좌이체/가상계좌 "CAV" => "111000000000" // 신용카드/계좌이체/가상계좌
); );
$pay_method = get_value_in_array("pay_method", $payinfo, $pay_method_rules['CRE']); $pay_method = get_value_in_array("pay_method", $payinfo, $pay_method_rules['CRE']);
$pay_method_alias = get_value_in_array("pay_method_alias", $payinfo, ""); $pay_method_alias = get_value_in_array("pay_method_alias", $payinfo, "");
foreach($pay_method_rules as $k=>$v) { foreach($pay_method_rules as $k=>$v) {
if(array_key_exists($pay_method_alias, $pay_method_rules)) { if(array_key_exists($pay_method_alias, $pay_method_rules)) {
$pay_method = $pay_method_rules[$pay_method_alias]; $pay_method = $pay_method_rules[$pay_method_alias];
} }
} }
$payinfo['pay_method'] = $pay_method; $payinfo['pay_method'] = $pay_method;
@ -95,13 +92,13 @@ $payinfo['site_name'] = $g_conf_site_name;
// 할부옵션: 0 ~ 18 개월까지, 50,000원 이상만 가능 // 할부옵션: 0 ~ 18 개월까지, 50,000원 이상만 가능
$payinfo['quotaopt'] = get_requested_value("quotaopt"); $payinfo['quotaopt'] = get_requested_value("quotaopt");
if(array_key_empty("quotaopt", $payinfo)) { if(array_key_empty("quotaopt", $payinfo)) {
$payinfo['quotaopt'] = 12; $payinfo['quotaopt'] = 12;
} }
// 결제 금액/화폐단위: 필수항목 // 결제 금액/화폐단위: 필수항목
$currency = get_requested_value("currency"); $currency = get_requested_value("currency");
if(array_key_empty("currency", $payinfo)) { if(array_key_empty("currency", $payinfo)) {
$payinfo['currency'] = "WON"; $payinfo['currency'] = "WON";
} }
// 3. 변경 제한 영역: 표준 웹 설정 영역 // 3. 변경 제한 영역: 표준 웹 설정 영역
@ -111,8 +108,6 @@ $payinfo['res_msg'] = "";
$payinfo['enc_info'] = ""; $payinfo['enc_info'] = "";
$payinfo['enc_data'] = ""; $payinfo['enc_data'] = "";
$payinfo['ret_pay_method'] = ""; $payinfo['ret_pay_method'] = "";
$payinfo['tran_cd'] = ""; // tran_cd가 유효하여야만 이후 tno 반환
$payinfo['use_pay_method'] = "";
$payinfo['ordr_chk'] = ""; // 주문정보 검증 관련 정보 $payinfo['ordr_chk'] = ""; // 주문정보 검증 관련 정보
// 변경 제한 영역: 현금영수증 관련 정보 // 변경 제한 영역: 현금영수증 관련 정보
@ -125,36 +120,36 @@ $payinfo['good_expr'] = "";
// 4. 옵션 정보: 결제에 필요한 추가 옵션 정보를 입력 및 설정합니다. // 4. 옵션 정보: 결제에 필요한 추가 옵션 정보를 입력 및 설정합니다.
$default_options = array( $default_options = array(
"used_card_YN" => "Y", // 사용카드 설정 여부 파라미터 "used_card_YN" => "Y", // 사용카드 설정 여부 파라미터
"used_card" => "CCBC:CCKM:CCSS", // 사용카드 설정 파라미터 "used_card" => "CCBC:CCKM:CCSS", // 사용카드 설정 파라미터
"used_card_CCXX" => "Y", // 해외카드 구분 파라미터 ((해외비자, 해외마스터, 해외JCB) "used_card_CCXX" => "Y", // 해외카드 구분 파라미터 ((해외비자, 해외마스터, 해외JCB)
"save_ocb" => "Y", // 신용카드 결제시 OK캐쉬백 적립 여부 "save_ocb" => "Y", // 신용카드 결제시 OK캐쉬백 적립 여부
"fix_inst" => "07", // 고정 할부 개월 수 선택 "fix_inst" => "07", // 고정 할부 개월 수 선택
"kcp_noint" => "", // 설정할부: '', 일반할부: 'N', 무이자할부: 'Y' "kcp_noint" => "", // 설정할부: '', 일반할부: 'N', 무이자할부: 'Y'
"kcp_noint_quota" => "CCBC-02:03:06,CCKM-03:06,CCSS-03:06:09", "kcp_noint_quota" => "CCBC-02:03:06,CCKM-03:06,CCSS-03:06:09",
// 전 카드 2,3,6개월 무이자(국민,비씨,엘지,삼성,신한,현대,롯데,외환) : ALL-02:03:04 // 전 카드 2,3,6개월 무이자(국민,비씨,엘지,삼성,신한,현대,롯데,외환) : ALL-02:03:04
// BC 2,3,6개월, 국민 3,6개월, 삼성 6,9개월 무이자 : CCBC-02:03:06,CCKM-03:06,CCSS-03:06:04 // BC 2,3,6개월, 국민 3,6개월, 삼성 6,9개월 무이자 : CCBC-02:03:06,CCKM-03:06,CCSS-03:06:04
"wish_vbank_list" => "05:03:04:07:11:23:26:32:34:81:71", // 가상계좌 은행 선택 파라미터 (은행코드는 매뉴얼을 참조) "wish_vbank_list" => "05:03:04:07:11:23:26:32:34:81:71", // 가상계좌 은행 선택 파라미터 (은행코드는 매뉴얼을 참조)
"vcnt_expire_term" => "3", // 가상계좌 입금 기한 설정하는 파라미터 - 발급일 + 3일 "vcnt_expire_term" => "3", // 가상계좌 입금 기한 설정하는 파라미터 - 발급일 + 3일
"vcnt_expire_term_time" => "120000", // 가상계좌 입금 시간 설정하는 파라미터 (HHMMSS 형식, 기본값은 23시59분59초) "vcnt_expire_term_time" => "120000", // 가상계좌 입금 시간 설정하는 파라미터 (HHMMSS 형식, 기본값은 23시59분59초)
"complex_pnt_yn" => "N", // 포인트 결제시 복합 결제(신용카드+포인트) 여부를 결정 "complex_pnt_yn" => "N", // 포인트 결제시 복합 결제(신용카드+포인트) 여부를 결정
"disp_tax_yn" => "Y", // 현금영수증 등록 창을 출력 여부를 설정하는 파라미터 "disp_tax_yn" => "Y", // 현금영수증 등록 창을 출력 여부를 설정하는 파라미터
"site_logo" => "", // 사이트 로고, 로고 용량이 150 X 50 이상일 경우 site_name 값이 표시 "site_logo" => "", // 사이트 로고, 로고 용량이 150 X 50 이상일 경우 site_name 값이 표시
"eng_flag" => "", // 결제창 영문 표시 파라미터, 사용 시 'Y'로 설정 "eng_flag" => "", // 결제창 영문 표시 파라미터, 사용 시 'Y'로 설정
"tax_flag" => "TG03", // 변경불가: 과세품목코드 "tax_flag" => "TG03", // 변경불가: 과세품목코드
"comm_tax_mny" => "", // 과세금액 "comm_tax_mny" => "", // 과세금액
"comm_vat_mny" => "", // 부가세 "comm_vat_mny" => "", // 부가세
"comm_free_mny" => "", // 비과세금액 "comm_free_mny" => "", // 비과세금액
"skin_indx" => "1", // 스킨 변경 파라미터. 7개 (1~7) 지원 "skin_indx" => "1", // 스킨 변경 파라미터. 7개 (1~7) 지원
"good_cd" => "", // 상품코드 설정 파라미터 "good_cd" => "", // 상품코드 설정 파라미터
"shop_user_id" => "", // 가맹점에서 관리하는 고객 아이디, 상품권 결제 시 반드시 입력 "shop_user_id" => "", // 가맹점에서 관리하는 고객 아이디, 상품권 결제 시 반드시 입력
"pt_memcorp_cd" => "" // 복지포인트 결제시 가맹점에 할당되어진 코드 값을 입력 "pt_memcorp_cd" => "" // 복지포인트 결제시 가맹점에 할당되어진 코드 값을 입력
); );
foreach($default_options as $k=>$v) { foreach($default_options as $k=>$v) {
$req_value = get_requested_value($k); $req_value = get_requested_value($k);
if(!empty($req_value)) { if(!empty($req_value)) {
$payinfo[$k] = ($req_value === "_DEFAULT_") ? $v : $req_value; $payinfo[$k] = ($req_value === "_DEFAULT_") ? $v : $req_value;
} }
} }
// 설정 불러오기 // 설정 불러오기
@ -178,19 +173,19 @@ $data['pgkcp_action_url'] = base_url();
// 디버그 시 // 디버그 시
if($debug == "true") { if($debug == "true") {
$auto_fills = array( $auto_fills = array(
"good_name" => "테스트 상품", "good_name" => "테스트 상품",
"good_mny" => "1", "good_mny" => "1",
"buyr_name" => "홍길동", "buyr_name" => "홍길동",
"buyr_mail" => "webmaster@example.org", "buyr_mail" => "webmaster@example.org",
"buyr_tel1" => "01000000000" "buyr_tel1" => "01000000000"
); );
foreach($auto_fills as $k=>$v) { foreach($auto_fills as $k=>$v) {
if(array_key_empty($k, $payinfo)) { if(array_key_empty($k, $payinfo)) {
$payinfo[$k] = $v; $payinfo[$k] = $v;
} }
} }
$data['payinfo'] = $payinfo; $data['payinfo'] = $payinfo;
} }
// 결제창 불러오기 // 결제창 불러오기

View File

@ -1,9 +1,8 @@
<?php <?php
/** /**
* @file orderpay.step2.pgkcp.php * @file orderpay.step2.pgkcp.php
* @created_on 2018-08-27 * @date 2018-08-27
* @updated_on 2020-01-25 * @author Go Namhyeon <gnh1201@gmail.com>
* @author Go Namhyeon <abuse@catswords.net>
* @brief KCP PG(Payment Gateway) contoller when done * @brief KCP PG(Payment Gateway) contoller when done
*/ */
@ -11,13 +10,13 @@ if(!defined("_DEF_RSF_")) set_error_exit("do not allow access");
// detect CSRF attack // detect CSRF attack
if(check_token_abuse_by_requests("_token", "_POST")) { if(check_token_abuse_by_requests("_token", "_POST")) {
set_error("Access denied because of security violation"); set_error("Access denied. (Expired session or Website attacker)");
show_errors(); show_errors();
} }
loadHelper("webpagetool"); // load webpage tools loadHelper("webpagetool"); // load webpage tools
loadHelper("networktool"); // load network tools loadHelper("networktool"); // load network tools
loadHelper("string.utils"); // load string utility loadHelper("string.urils"); // load string utility
loadHelper("pgkcp.lnk"); // load KCP PG Helper loadHelper("pgkcp.lnk"); // load KCP PG Helper
loadHelper("JSLoader.class"); // load javascript loader loadHelper("JSLoader.class"); // load javascript loader
@ -34,68 +33,68 @@ load_pgkcp_library();
$payres = array(); $payres = array();
$payinfo = array(); $payinfo = array();
$fieldnames = array( $fieldnames = array(
"req_tx", "req_tx",
"tran_cd", "tran_cd",
"cust_ip", "cust_ip",
"ordr_idxx", "ordr_idxx",
"good_name", "good_name",
"res_cd", "res_cd",
"res_msg", "res_msg",
"res_en_msg", "res_en_msg",
"tno", "tno",
"buyr_name", "buyr_name",
"buyr_tel1", "buyr_tel1",
"buyr_tel2", "buyr_tel2",
"buyr_mail", "buyr_mail",
"pay_method_alias", "pay_method_alias",
"pay_method", "pay_method",
"use_pay_method", "use_pay_method",
"bSucc", "bSucc",
"app_time", "app_time",
"amount", "amount",
"total_amount", "total_amount",
"coupon_mny", "coupon_mny",
"app_time", "app_time",
"amount", "amount",
"total_amount", "total_amount",
"coupon_mny", "coupon_mny",
"card_cd", "card_cd",
"card_name", "card_name",
"app_no", "app_no",
"noinf", "noinf",
"quota", "quota",
"partcanc_yn", "partcanc_yn",
"card_bin_type_01", "card_bin_type_01",
"card_bin_type_02", "card_bin_type_02",
"card_mny", "card_mny",
"bank_name", "bank_name",
"bank_code", "bank_code",
"bk_mny", "bk_mny",
"bankname", "bankname",
"depositor", "depositor",
"account", "account",
"va_date", "va_date",
"pnt_issue", "pnt_issue",
"pnt_amount", "pnt_amount",
"pnt_app_time", "pnt_app_time",
"pnt_app_no", "pnt_app_no",
"add_pnt", "add_pnt",
"use_pnt", "use_pnt",
"rsv_pnt", "rsv_pnt",
"commid", "commid",
"mobile_no", "mobile_no",
"shop_user_id", "shop_user_id",
"tk_van_code", "tk_van_code",
"tk_app_no", "tk_app_no",
"cash_yn", "cash_yn",
"cash_authno", "cash_authno",
"cash_tr_code", "cash_tr_code",
"cash_id_info", "cash_id_info",
"cash_no", "cash_no",
"pay_data" "pay_data"
); );
foreach($fieldnames as $name) { foreach($fieldnames as $name) {
$payinfo[$name] = make_safe_argument(get_requested_value($name)); $payinfo[$name] = make_safe_argument(get_requested_value($name));
} }
// set current ip address // set current ip address
@ -109,11 +108,11 @@ extract($payinfo);
// initalize data // initalize data
$data = array( $data = array(
"payres" => $payres, "payres" => $payres,
"payinfo" => $payinfo, "payinfo" => $payinfo,
"redirect_url" => get_requested_value("redirect_url"), "redirect_url" => get_requested_value("redirect_url"),
"_token" => get_session_token(), "_token" => get_session_token(),
"_next_route" => "orderpay.step3.pgkcp", "_next_route" => "orderpay.step3.pgkcp",
); );
// 02. 인스턴스 생성 및 초기화 // 02. 인스턴스 생성 및 초기화
@ -122,128 +121,128 @@ $c_PayPlus->mf_clear();
// 03. 처리 요청 정보 설정 // 03. 처리 요청 정보 설정
if($req_tx == "pay") { if($req_tx == "pay") {
$c_PayPlus->mf_set_ordr_data( "ordr_mony", get_requested_value("good_mny") ); $c_PayPlus->mf_set_ordr_data( "ordr_mony", get_requested_value("good_mny") );
$c_PayPlus->mf_set_encx_data( get_requested_value("enc_data"), get_requested_value("enc_info") ); $c_PayPlus->mf_set_encx_data( get_requested_value("enc_data"), get_requested_value("enc_info") );
} }
// 04. 실행 // 04. 실행
if($tran_cd != "") { if($tran_cd != "") {
// 응답 전문 처리 // 응답 전문 처리
$c_PayPlus->mf_do_tx( "", $g_conf_home_dir, $g_conf_site_cd, $g_conf_site_key, $tran_cd, "", $c_PayPlus->mf_do_tx( "", $g_conf_home_dir, $g_conf_site_cd, $g_conf_site_key, $tran_cd, "",
$g_conf_gw_url, $g_conf_gw_port, "payplus_cli_slib", $ordr_idxx, $g_conf_gw_url, $g_conf_gw_port, "payplus_cli_slib", $ordr_idxx,
$cust_ip, $g_conf_log_level, 0, 0, $g_conf_log_path ); $cust_ip, $g_conf_log_level, 0, 0, $g_conf_log_path );
$payres['res_cd'] = $c_PayPlus->m_res_cd; // 결과 코드 $payres['res_cd'] = $c_PayPlus->m_res_cd; // 결과 코드
$payres['res_msg'] = $c_PayPlus->m_res_msg; // 결과 메시지 $payres['res_msg'] = $c_PayPlus->m_res_msg; // 결과 메시지
// 결과 영문 메세지 // 결과 영문 메세지
//$payres['res_en_msg'] = $c_PayPlus->mf_get_res_data( "res_en_msg" ); //$payres['res_en_msg'] = $c_PayPlus->mf_get_res_data( "res_en_msg" );
} else { } else {
$c_PayPlus->m_res_cd = "9562"; $c_PayPlus->m_res_cd = "9562";
$c_PayPlus->m_res_msg = "연동 오류 tran_cd값이 설정되지 않았습니다."; $c_PayPlus->m_res_msg = "연동 오류 tran_cd값이 설정되지 않았습니다.";
} }
// 05. 승인 결과 값 추출 // 05. 승인 결과 값 추출
if($req_tx == "pay") { if($req_tx == "pay") {
if($res_cd == "0000") { if($res_cd == "0000") {
$payres['tno'] = $c_PayPlus->mf_get_res_data("tno"); // KCP 거래 고유 번호 $payres['tno'] = $c_PayPlus->mf_get_res_data("tno"); // KCP 거래 고유 번호
$payres['amount'] = $c_PayPlus->mf_get_res_data("amount"); // KCP 실제 거래 금액 $payres['amount'] = $c_PayPlus->mf_get_res_data("amount"); // KCP 실제 거래 금액
$payres['pnt_issue'] = $c_PayPlus->mf_get_res_data("pnt_issue"); // 결제 포인트사 코드 $payres['pnt_issue'] = $c_PayPlus->mf_get_res_data("pnt_issue"); // 결제 포인트사 코드
$payres['coupon_mny'] = $c_PayPlus->mf_get_res_data("coupon_mny" ); // 쿠폰금액 $payres['coupon_mny'] = $c_PayPlus->mf_get_res_data("coupon_mny" ); // 쿠폰금액
switch($use_pay_method) { switch($use_pay_method) {
case "100000000000": // 05-1. 신용카드 승인 결과 처리 case "100000000000": // 05-1. 신용카드 승인 결과 처리
$payres['card_cd'] = $c_PayPlus->mf_get_res_data( "card_cd" ); // 카드사 코드 $payres['card_cd'] = $c_PayPlus->mf_get_res_data( "card_cd" ); // 카드사 코드
$payres['card_name'] = $c_PayPlus->mf_get_res_data( "card_name" ); // 카드 종류 $payres['card_name'] = $c_PayPlus->mf_get_res_data( "card_name" ); // 카드 종류
$payres['app_time'] = $c_PayPlus->mf_get_res_data( "app_time" ); // 승인 시간 $payres['app_time'] = $c_PayPlus->mf_get_res_data( "app_time" ); // 승인 시간
$payres['app_no'] = $c_PayPlus->mf_get_res_data( "app_no" ); // 승인 번호 $payres['app_no'] = $c_PayPlus->mf_get_res_data( "app_no" ); // 승인 번호
$payres['noinf'] = $c_PayPlus->mf_get_res_data( "noinf" ); // 무이자 여부 ( 'Y' : 무이자 ) $payres['noinf'] = $c_PayPlus->mf_get_res_data( "noinf" ); // 무이자 여부 ( 'Y' : 무이자 )
$payres['quota'] = $c_PayPlus->mf_get_res_data( "quota" ); // 할부 개월 수 $payres['quota'] = $c_PayPlus->mf_get_res_data( "quota" ); // 할부 개월 수
$payres['partcanc_yn'] = $c_PayPlus->mf_get_res_data( "partcanc_yn" ); // 부분취소 가능유무 $payres['partcanc_yn'] = $c_PayPlus->mf_get_res_data( "partcanc_yn" ); // 부분취소 가능유무
$payres['card_bin_type_01'] = $c_PayPlus->mf_get_res_data( "card_bin_type_01" ); // 카드구분1 $payres['card_bin_type_01'] = $c_PayPlus->mf_get_res_data( "card_bin_type_01" ); // 카드구분1
$payres['card_bin_type_02'] = $c_PayPlus->mf_get_res_data( "card_bin_type_02" ); // 카드구분2 $payres['card_bin_type_02'] = $c_PayPlus->mf_get_res_data( "card_bin_type_02" ); // 카드구분2
$payres['card_mny'] = $c_PayPlus->mf_get_res_data( "card_mny" ); // 카드결제금액 $payres['card_mny'] = $c_PayPlus->mf_get_res_data( "card_mny" ); // 카드결제금액
// 05-1.1. 복합결제(포인트+신용카드) 승인 결과 처리 // 05-1.1. 복합결제(포인트+신용카드) 승인 결과 처리
if(in_array($pnt_issue, array("SCSK", "SCWB"))) { if(in_array($pnt_issue, array("SCSK", "SCWB"))) {
$payres['pnt_amount'] = $c_PayPlus->mf_get_res_data ( "pnt_amount" ); // 적립금액 or 사용금액 $payres['pnt_amount'] = $c_PayPlus->mf_get_res_data ( "pnt_amount" ); // 적립금액 or 사용금액
$payres['pnt_app_time'] = $c_PayPlus->mf_get_res_data ( "pnt_app_time" ); // 승인시간 $payres['pnt_app_time'] = $c_PayPlus->mf_get_res_data ( "pnt_app_time" ); // 승인시간
$payres['pnt_app_no'] = $c_PayPlus->mf_get_res_data ( "pnt_app_no" ); // 승인번호 $payres['pnt_app_no'] = $c_PayPlus->mf_get_res_data ( "pnt_app_no" ); // 승인번호
$payres['add_pnt'] = $c_PayPlus->mf_get_res_data ( "add_pnt" ); // 발생 포인트 $payres['add_pnt'] = $c_PayPlus->mf_get_res_data ( "add_pnt" ); // 발생 포인트
$payres['use_pnt'] = $c_PayPlus->mf_get_res_data ( "use_pnt" ); // 사용가능 포인트 $payres['use_pnt'] = $c_PayPlus->mf_get_res_data ( "use_pnt" ); // 사용가능 포인트
$payres['rsv_pnt'] = $c_PayPlus->mf_get_res_data ( "rsv_pnt" ); // 총 누적 포인트 $payres['rsv_pnt'] = $c_PayPlus->mf_get_res_data ( "rsv_pnt" ); // 총 누적 포인트
$payres['total_amount'] = $amount + $pnt_amount; // 복합결제시 총 거래금액 $payres['total_amount'] = $amount + $pnt_amount; // 복합결제시 총 거래금액
} }
break; // END 05-1 break; // END 05-1
case "010000000000": // 05-2. 계좌이체 승인 결과 처리 case "010000000000": // 05-2. 계좌이체 승인 결과 처리
$payres['app_time'] = $c_PayPlus->mf_get_res_data( "app_time" ); // 승인 시간 $payres['app_time'] = $c_PayPlus->mf_get_res_data( "app_time" ); // 승인 시간
$payres['bank_name'] = $c_PayPlus->mf_get_res_data( "bank_name" ); // 은행명 $payres['bank_name'] = $c_PayPlus->mf_get_res_data( "bank_name" ); // 은행명
$payres['bank_code'] = $c_PayPlus->mf_get_res_data( "bank_code" ); // 은행코드 $payres['bank_code'] = $c_PayPlus->mf_get_res_data( "bank_code" ); // 은행코드
$payres['bk_mny'] = $c_PayPlus->mf_get_res_data( "bk_mny" ); // 계좌이체결제금액 $payres['bk_mny'] = $c_PayPlus->mf_get_res_data( "bk_mny" ); // 계좌이체결제금액
break; // END 05-2 break; // END 05-2
case "001000000000": // 05-3. 가상계좌 승인 결과 처리 case "001000000000": // 05-3. 가상계좌 승인 결과 처리
$payres['bankname'] = $c_PayPlus->mf_get_res_data( "bankname" ); // 입금할 은행 이름 $payres['bankname'] = $c_PayPlus->mf_get_res_data( "bankname" ); // 입금할 은행 이름
$payres['depositor'] = $c_PayPlus->mf_get_res_data( "depositor" ); // 입금할 계좌 예금주 $payres['depositor'] = $c_PayPlus->mf_get_res_data( "depositor" ); // 입금할 계좌 예금주
$payres['account'] = $c_PayPlus->mf_get_res_data( "account" ); // 입금할 계좌 번호 $payres['account'] = $c_PayPlus->mf_get_res_data( "account" ); // 입금할 계좌 번호
$payres['va_date'] = $c_PayPlus->mf_get_res_data( "va_date" ); // 가상계좌 입금마감시간 $payres['va_date'] = $c_PayPlus->mf_get_res_data( "va_date" ); // 가상계좌 입금마감시간
break; // END 05-3 break; // END 05-3
case "000100000000": // 05-4. 포인트 승인 결과 처리 case "000100000000": // 05-4. 포인트 승인 결과 처리
$payres['pnt_amount'] = $c_PayPlus->mf_get_res_data( "pnt_amount" ); // 적립금액 or 사용금액 $payres['pnt_amount'] = $c_PayPlus->mf_get_res_data( "pnt_amount" ); // 적립금액 or 사용금액
$payres['pnt_app_time'] = $c_PayPlus->mf_get_res_data( "pnt_app_time" ); // 승인시간 $payres['pnt_app_time'] = $c_PayPlus->mf_get_res_data( "pnt_app_time" ); // 승인시간
$payres['pnt_app_no'] = $c_PayPlus->mf_get_res_data( "pnt_app_no" ); // 승인번호 $payres['pnt_app_no'] = $c_PayPlus->mf_get_res_data( "pnt_app_no" ); // 승인번호
$payres['add_pnt'] = $c_PayPlus->mf_get_res_data( "add_pnt" ); // 발생 포인트 $payres['add_pnt'] = $c_PayPlus->mf_get_res_data( "add_pnt" ); // 발생 포인트
$payres['use_pnt'] = $c_PayPlus->mf_get_res_data( "use_pnt" ); // 사용가능 포인트 $payres['use_pnt'] = $c_PayPlus->mf_get_res_data( "use_pnt" ); // 사용가능 포인트
$payres['rsv_pnt'] = $c_PayPlus->mf_get_res_data( "rsv_pnt" ); // 적립 포인트 $payres['rsv_pnt'] = $c_PayPlus->mf_get_res_data( "rsv_pnt" ); // 적립 포인트
break; // END 05-4 break; // END 05-4
case "000010000000": // 05-5. 휴대폰 승인 결과 처리 case "000010000000": // 05-5. 휴대폰 승인 결과 처리
$payres['app_time'] = $c_PayPlus->mf_get_res_data( "hp_app_time" ); // 승인 시간 $payres['app_time'] = $c_PayPlus->mf_get_res_data( "hp_app_time" ); // 승인 시간
$payres['commid'] = $c_PayPlus->mf_get_res_data( "commid" ); // 통신사 코드 $payres['commid'] = $c_PayPlus->mf_get_res_data( "commid" ); // 통신사 코드
$payres['mobile_no'] = $c_PayPlus->mf_get_res_data( "mobile_no" ); // 휴대폰 번호 $payres['mobile_no'] = $c_PayPlus->mf_get_res_data( "mobile_no" ); // 휴대폰 번호
break; // END 05-5 break; // END 05-5
case "000000001000": // 05-6. 상품권 승인 결과 처리 case "000000001000": // 05-6. 상품권 승인 결과 처리
$payres['app_time'] = $c_PayPlus->mf_get_res_data( "tk_app_time" ); // 승인 시간 $payres['app_time'] = $c_PayPlus->mf_get_res_data( "tk_app_time" ); // 승인 시간
$payres['tk_van_code'] = $c_PayPlus->mf_get_res_data( "tk_van_code" ); // 발급사 코드 $payres['tk_van_code'] = $c_PayPlus->mf_get_res_data( "tk_van_code" ); // 발급사 코드
$payres['tk_app_no'] = $c_PayPlus->mf_get_res_data( "tk_app_no" ); // 승인 번호 $payres['tk_app_no'] = $c_PayPlus->mf_get_res_data( "tk_app_no" ); // 승인 번호
break; // END 05-6 break; // END 05-6
} }
// 05-7. 현금영수증 결과 처리 // 05-7. 현금영수증 결과 처리
$payres['cash_authno'] = $c_PayPlus->mf_get_res_data( "cash_authno" ); // 현금 영수증 승인 번호 $payres['cash_authno'] = $c_PayPlus->mf_get_res_data( "cash_authno" ); // 현금 영수증 승인 번호
$payres['cash_no'] = $c_PayPlus->mf_get_res_data( "cash_no" ); // 현금 영수증 거래 번호 $payres['cash_no'] = $c_PayPlus->mf_get_res_data( "cash_no" ); // 현금 영수증 거래 번호
} }
} }
// checking vaild payment method // checking vaild payment method
$res_succ_flag = false; $res_succ_flag = false;
$pay_method_alias = get_value_in_array("pay_method_alias", $payinfo, ""); $pay_method_alias = get_value_in_array("pay_method_alias", $payinfo, "");
$pay_method_rules = array( $pay_method_rules = array(
"CRE" => "100000000000", // 신용카드 "CRE" => "100000000000", // 신용카드
"ACC" => "010000000000", // 계좌이체 "ACC" => "010000000000", // 계좌이체
"VAC" => "001000000000", // 가상계좌 "VAC" => "001000000000", // 가상계좌
"POI" => "000100000000", // 포인트 "POI" => "000100000000", // 포인트
"PHO" => "000010000000", // 휴대폰 "PHO" => "000010000000", // 휴대폰
"GIF" => "000000001000", // 상품권 "GIF" => "000000001000", // 상품권
"ARS" => "000000000010", // ARS "ARS" => "000000000010", // ARS
"CAV" => "111000000000", // 신용카드/계좌이체/가상계좌 "CAV" => "111000000000", // 신용카드/계좌이체/가상계좌
"NOP" => "" // 수기결제/무통장입금 "NOP" => "" // 수기결제/무통장입금
); );
foreach($pay_method_rules as $k=>$v) { foreach($pay_method_rules as $k=>$v) {
if($pay_method_alias == $k) { if($pay_method_alias == $k) {
$payres['use_pay_method_alias'] = $k; $payres['use_pay_method_alias'] = $k;
$res_succ_flag = true; $res_succ_flag = true;
break; break;
} }
} }
$payres['bSucc'] = $res_succ_flag ? "true" : "false"; $payres['bSucc'] = $res_succ_flag ? "true" : "false";
@ -252,34 +251,29 @@ extract($payres);
// cancel payment when failed // cancel payment when failed
if($req_tx == "pay") { if($req_tx == "pay") {
if($res_cd == "0000") { if($res_cd == "0000") {
if($bSucc == "false") { if($bSucc == "false") {
$c_PayPlus->mf_clear(); $c_PayPlus->mf_clear();
$payres['tran_cd'] = "00200000"; $payres['tran_cd'] = "00200000";
$c_PayPlus->mf_set_modx_data( "tno", $tno ); // KCP 원거래 거래번호 $c_PayPlus->mf_set_modx_data( "tno", $tno ); // KCP 원거래 거래번호
$c_PayPlus->mf_set_modx_data( "mod_type", "STSC" ); // 원거래 변경 요청 종류 $c_PayPlus->mf_set_modx_data( "mod_type", "STSC" ); // 원거래 변경 요청 종류
$c_PayPlus->mf_set_modx_data( "mod_ip", $cust_ip); // 변경 요청자 IP $c_PayPlus->mf_set_modx_data( "mod_ip", $cust_ip); // 변경 요청자 IP
$c_PayPlus->mf_set_modx_data( "mod_desc", "결과 처리 오류 - 자동 취소" ); // 변경 사유 $c_PayPlus->mf_set_modx_data( "mod_desc", "결과 처리 오류 - 자동 취소" ); // 변경 사유
// 응답 전문 처리 // 응답 전문 처리
$c_PayPlus->mf_do_tx( $c_PayPlus->mf_do_tx(
"", $g_conf_home_dir, $g_conf_site_cd, $g_conf_site_key, $tran_cd, "", "", $g_conf_home_dir, $g_conf_site_cd, $g_conf_site_key, $tran_cd, "",
$g_conf_gw_url, $g_conf_gw_port, "payplus_cli_slib", $ordr_idxx, $g_conf_gw_url, $g_conf_gw_port, "payplus_cli_slib", $ordr_idxx,
$cust_ip, $g_conf_log_level, 0, 0, $g_conf_log_path $cust_ip, $g_conf_log_level, 0, 0, $g_conf_log_path
); );
$payres['res_cd'] = $c_PayPlus->m_res_cd; $payres['res_cd'] = $c_PayPlus->m_res_cd;
$payres['res_msg'] = $c_PayPlus->m_res_msg; $payres['res_msg'] = $c_PayPlus->m_res_msg;
} }
} }
} // End of [res_cd = "0000"] } // End of [res_cd = "0000"]
// set encoding
foreach($payres as $k=>$v) {
$payres[$k] = get_converted_string($v, "utf-8", "cp949");
}
// set result // set result
extract($payres); extract($payres);
@ -294,7 +288,7 @@ $data['jsoutput'] = $jsoutput;
// convert payres to payinfo // convert payres to payinfo
foreach($payres as $k=>$v) { foreach($payres as $k=>$v) {
$payinfo[$k] = $v; $payinfo[$k] = $v;
} }
$data['payinfo'] = $payinfo; $data['payinfo'] = $payinfo;

View File

@ -2,7 +2,7 @@
/** /**
* @file orderpay.step3.pgkcp.php * @file orderpay.step3.pgkcp.php
* @date 2018-08-27 * @date 2018-08-27
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief KCP PG(Payment Gateway) contoller when done * @brief KCP PG(Payment Gateway) contoller when done
*/ */
@ -10,8 +10,8 @@ if(!defined("_DEF_RSF_")) set_error_exit("do not allow access");
// detect CSRF attack // detect CSRF attack
if(check_token_abuse_by_requests("_token", "_POST")) { if(check_token_abuse_by_requests("_token", "_POST")) {
set_error("Access denied because of security violation"); set_error("Access denied. (Expired session or Website attacker)");
show_errors(); show_errors();
} }
// set token // set token
@ -31,73 +31,73 @@ extract($pgkcp_config);
// 지불 결과 // 지불 결과
$payres = array(); $payres = array();
$payinfo = array( $payinfo = array(
// 공통 // 공통
"site_cd" => get_requested_value("site_cd"), // 사이트코드 "site_cd" => get_requested_value("site_cd"), // 사이트코드
"req_tx" => get_requested_value("req_tx"), // 요청 구분(승인/취소) "req_tx" => get_requested_value("req_tx"), // 요청 구분(승인/취소)
"use_pay_method" => get_requested_value("use_pay_method"), // 사용 결제 수단 "use_pay_method" => get_requested_value("use_pay_method"), // 사용 결제 수단
"bSucc" => get_requested_value("bSucc"), // 업체 DB 정상처리 완료 여부 "bSucc" => get_requested_value("bSucc"), // 업체 DB 정상처리 완료 여부
"res_cd" => get_requested_value("res_cd"), // 업체 DB 정상처리 완료 여부 "res_cd" => get_requested_value("res_cd"), // 업체 DB 정상처리 완료 여부
"res_msg" => get_requested_value("res_msg"), // 결과메시지 "res_msg" => get_requested_value("res_msg"), // 결과메시지
"res_msg_bsucc" => "", // 결과메시지 상세 "res_msg_bsucc" => "", // 결과메시지 상세
"amount" => get_requested_value("amount"), // KCP 실제 거래 금액 "amount" => get_requested_value("amount"), // KCP 실제 거래 금액
"ordr_idxx" => get_requested_value("ordr_idxx"), // 주문번호 "ordr_idxx" => get_requested_value("ordr_idxx"), // 주문번호
"tno" => get_requested_value("tno"), // KCP 거래번호 "tno" => get_requested_value("tno"), // KCP 거래번호
"good_name" => get_requested_value("good_name"), // 상품명 "good_name" => get_requested_value("good_name"), // 상품명
"buyr_name" => get_requested_value("buyr_name"), // 구매자명 "buyr_name" => get_requested_value("buyr_name"), // 구매자명
"buyr_tel1" => get_requested_value("buyr_tel1"), // 구매자 전화번호 "buyr_tel1" => get_requested_value("buyr_tel1"), // 구매자 전화번호
"buyr_tel2" => get_requested_value("buyr_tel2"), // 구매자 휴대폰번호 "buyr_tel2" => get_requested_value("buyr_tel2"), // 구매자 휴대폰번호
"buyr_mail" => get_requested_value("buyr_mail"), // 구매자 E-Mail "buyr_mail" => get_requested_value("buyr_mail"), // 구매자 E-Mail
// 공통 2 // 공통 2
"pnt_issue" => get_requested_value("pnt_issue"), // 포인트 서비스사 "pnt_issue" => get_requested_value("pnt_issue"), // 포인트 서비스사
"app_time" => get_requested_value("app_time"), // 승인시간 (공통) "app_time" => get_requested_value("app_time"), // 승인시간 (공통)
// 신용카드 // 신용카드
"card_cd" => get_requested_value("card_cd"), // 카드코드 "card_cd" => get_requested_value("card_cd"), // 카드코드
"card_name" => get_requested_value("card_name"), // 카드명 "card_name" => get_requested_value("card_name"), // 카드명
"noinf" => get_requested_value("noinf"), // 무이자 여부 "noinf" => get_requested_value("noinf"), // 무이자 여부
"quota" => get_requested_value("quota"), // 할부개월 "quota" => get_requested_value("quota"), // 할부개월
"app_no" => get_requested_value("app_no"), // 승인번호 "app_no" => get_requested_value("app_no"), // 승인번호
// 계좌이체 // 계좌이체
"bank_name" => get_requested_value("bank_name"), // 은행명 "bank_name" => get_requested_value("bank_name"), // 은행명
"bank_code" => get_requested_value("bank_code"), // 은행코드 "bank_code" => get_requested_value("bank_code"), // 은행코드
// 가상계좌 // 가상계좌
"bankname" => get_requested_value("bankname"), // 입금할 은행 "bankname" => get_requested_value("bankname"), // 입금할 은행
"depositor" => get_requested_value("depositor"), // 입금할 계좌 예금주 "depositor" => get_requested_value("depositor"), // 입금할 계좌 예금주
"account" => get_requested_value("account"), // 입금할 계좌 번호 "account" => get_requested_value("account"), // 입금할 계좌 번호
"va_date" => get_requested_value("va_date"), // 가상계좌 입금마감시간 "va_date" => get_requested_value("va_date"), // 가상계좌 입금마감시간
// 포인트 // 포인트
"add_pnt" => get_requested_value("add_pnt"), // 발생 포인트 "add_pnt" => get_requested_value("add_pnt"), // 발생 포인트
"use_pnt" => get_requested_value("use_pnt"), // 사용가능 포인트 "use_pnt" => get_requested_value("use_pnt"), // 사용가능 포인트
"rsv_pnt" => get_requested_value("rsv_pnt"), // 총 누적 포인트 "rsv_pnt" => get_requested_value("rsv_pnt"), // 총 누적 포인트
"pnt_app_time" => get_requested_value("pnt_app_time"), // 승인시간 "pnt_app_time" => get_requested_value("pnt_app_time"), // 승인시간
"pnt_app_no" => get_requested_value("pnt_app_no"), // 승인번호 "pnt_app_no" => get_requested_value("pnt_app_no"), // 승인번호
"pnt_amount" => get_requested_value("pnt_amount"), // 적립금액 or 사용금액 "pnt_amount" => get_requested_value("pnt_amount"), // 적립금액 or 사용금액
// 상품권 // 상품권
"tk_van_code" => get_requested_value("tk_van_code"), // 발급사 코드 "tk_van_code" => get_requested_value("tk_van_code"), // 발급사 코드
"tk_app_no" => get_requested_value("tk_app_no"), // 승인 번호 "tk_app_no" => get_requested_value("tk_app_no"), // 승인 번호
// 휴대전화 // 휴대전화
"commid" => get_requested_value("tk_app_no"), // 통신사 코드 "commid" => get_requested_value("tk_app_no"), // 통신사 코드
"mobile_no" => get_requested_value("mobile_no"), // 휴대폰 번호 "mobile_no" => get_requested_value("mobile_no"), // 휴대폰 번호
// 현금영수증 // 현금영수증
"cash_yn" => get_requested_value("cash_yn"), // 현금영수증 등록 여부 "cash_yn" => get_requested_value("cash_yn"), // 현금영수증 등록 여부
"cash_authno" => get_requested_value("cash_authno"), // 현금영수증 승인 번호 "cash_authno" => get_requested_value("cash_authno"), // 현금영수증 승인 번호
"cash_tr_code" => get_requested_value("cash_authno"), // 현금영수증 발행 구분 "cash_tr_code" => get_requested_value("cash_authno"), // 현금영수증 발행 구분
"cash_id_info" => get_requested_value("cash_id_info"), // 현금영수증 등록 번호 "cash_id_info" => get_requested_value("cash_id_info"), // 현금영수증 등록 번호
"cash_no" => get_requested_value("cash_no"), // 현금영수증 거래 번호 "cash_no" => get_requested_value("cash_no"), // 현금영수증 거래 번호
// 확장 // 확장
"pay_method_alias" => get_requested_value("pay_method_alias"), // 결제방법 별칭 "pay_method_alias" => get_requested_value("pay_method_alias"), // 결제방법 별칭
"pay_method" => get_requested_value("pay_method"), // 사용 결제 수단 "pay_method" => get_requested_value("pay_method"), // 사용 결제 수단
// 요청 상세 전문 // 요청 상세 전문
"pay_data" => get_requested_value("pay_data"), // 요청 상세 전문 "pay_data" => get_requested_value("pay_data"), // 요청 상세 전문
); );
// extract payinfo // extract payinfo
@ -105,34 +105,34 @@ extract($payinfo);
// initalize data // initalize data
$data = array( $data = array(
"payres" => $payres, "payres" => $payres,
"payinfo" => $payinfo, "payinfo" => $payinfo,
"redirect_url" => get_requested_value("redirect_url"), "redirect_url" => get_requested_value("redirect_url"),
"_token" => get_session_token(), "_token" => get_session_token(),
"_next_route" => "ordercomplete.pgkcp", "_next_route" => "ordercomplete.pgkcp",
); );
// 이름 지정 // 이름 지정
$req_tx_name = ""; $req_tx_name = "";
$req_tx_names = array( $req_tx_names = array(
"pay" => "지불", "pay" => "지불",
"mod" => "매입/취소" "mod" => "매입/취소"
); );
if(array_key_exists($req_tx, $req_tx_names)) { if(array_key_exists($req_tx, $req_tx_names)) {
$req_tx_name = $req_tx_names[$req_tx]; $req_tx_name = $req_tx_names[$req_tx];
} }
$payres['req_tx_name'] = $req_tx_name; $payres['req_tx_name'] = $req_tx_name;
// 가맹점 측 DB 처리 실패시 상세 결과 메시지 설정 // 가맹점 측 DB 처리 실패시 상세 결과 메시지 설정
$res_msg_bsucc = ""; $res_msg_bsucc = "";
if($req_tx == "pay") { if($req_tx == "pay") {
if($bSucc == "false") { if($bSucc == "false") {
if ($res_cd == "0000") { if ($res_cd == "0000") {
$res_msg_bsucc = "결제는 정상적으로 이루어졌지만 업체에서 결제 결과를 처리하는 중 오류가 발생하여 시스템에서 자동으로 취소 요청을 하였습니다. 업체로 문의하여 확인하시기 바랍니다."; $res_msg_bsucc = "결제는 정상적으로 이루어졌지만 업체에서 결제 결과를 처리하는 중 오류가 발생하여 시스템에서 자동으로 취소 요청을 하였습니다. 업체로 문의하여 확인하시기 바랍니다.";
} else { } else {
$res_msg_bsucc = "결제는 정상적으로 이루어졌지만 업체에서 결제 결과를 처리하는 중 오류가 발생하여 시스템에서 자동으로 취소 요청을 하였으나, 취소가 실패 되었습니다. 업체로 문의하여 확인하시기 바랍니다."; $res_msg_bsucc = "결제는 정상적으로 이루어졌지만 업체에서 결제 결과를 처리하는 중 오류가 발생하여 시스템에서 자동으로 취소 요청을 하였으나, 취소가 실패 되었습니다. 업체로 문의하여 확인하시기 바랍니다.";
} }
} }
} }
$payres['res_msg_bsucc'] = $req_tx_name; $payres['res_msg_bsucc'] = $req_tx_name;
@ -148,7 +148,7 @@ $data['jsoutput'] = $jsoutput;
// convert payres to payinfo // convert payres to payinfo
foreach($payres as $k=>$v) { foreach($payres as $k=>$v) {
$payinfo[$k] = $v; $payinfo[$k] = $v;
} }
$data['payinfo'] = $payinfo; $data['payinfo'] = $payinfo;

View File

@ -3,7 +3,7 @@ if(!defined("_DEF_RSF_")) set_error_exit("do not allow access");
$data = array( $data = array(
"name" => "Hong gil dong", "name" => "Hong gil dong",
"email" => "abuse@catswords.net", "email" => "support@exts.kr",
"tel" => ""01000000000", "tel" => ""01000000000",
"base_url" => base_url() "base_url" => base_url()
); );

View File

@ -2,7 +2,7 @@
/** /**
* @file webapp.php * @file webapp.php
* @date 2019-02-23 * @date 2019-02-23
* @author Go Namhyeon <abuse@catswords.net> * @author Go Namhyeon <gnh1201@gmail.com>
* @brief Isolator(Compatibility mode) for legacy application * @brief Isolator(Compatibility mode) for legacy application
*/ */
@ -12,17 +12,17 @@ if(!defined("_DEF_RSF_")) set_error_exit("do not allow access");
// Protect GET method // Protect GET method
foreach($_GET as $k=>$v) { foreach($_GET as $k=>$v) {
$_GET[$k] = get_requested_value($k, "_GET"); $_GET[$k] = get_requested_value($k, "_GET");
} }
// Protect POST method // Protect POST method
foreach($_POST as $k=>$v) { foreach($_POST as $k=>$v) {
$_POST[$k] = get_requested_value($k, "_POST"); $_POST[$k] = get_requested_value($k, "_POST");
} }
// Protect REQUEST(ALL) method // Protect REQUEST(ALL) method
foreach($_REQUEST as $k=>$v) { foreach($_REQUEST as $k=>$v) {
$_REQUEST[$k] = get_requested_value($k, "_ALL"); $_REQUEST[$k] = get_requested_value($k, "_ALL");
} }
// get self filename // get self filename
@ -52,52 +52,52 @@ $end_fra = $end_routes_attributes[0];
$end_era = end($end_routes_attributes); $end_era = end($end_routes_attributes);
if($end_era == "php" || file_exists($appfile_path)) { if($end_era == "php" || file_exists($appfile_path)) {
$appfile_path = str_replace(".php.php", ".php", $appfile_path); $appfile_path = str_replace(".php.php", ".php", $appfile_path);
if(file_exists($appfile_path)) { if(file_exists($appfile_path)) {
include($appfile_path); include($appfile_path);
$self_filename = $end_fra . ".php"; $self_filename = $end_fra . ".php";
} else { } else {
set_error("Webapp 404 Not Found"); set_error("Webapp 404 Not Found");
show_errors(); show_errors();
} }
} else { } else {
if(file_exists($appfile . "/index.php")) { if(file_exists($appfile . "/index.php")) {
$appfile .= "/index.php"; $appfile .= "/index.php";
if(empty($end_era)) { if(empty($end_era)) {
include($appfile); include($appfile);
} else { } else {
$is_redirect_to_index = true; $is_redirect_to_index = true;
} }
} elseif(file_exists($appfile . "/index.html")) { } elseif(file_exists($appfile . "/index.html")) {
$is_static_file = true; $is_static_file = true;
$appfile .= "/index.html"; $appfile .= "/index.html";
if(empty($end_era)) { if(empty($end_era)) {
$end_era = "html"; $end_era = "html";
} else { } else {
$is_redirect_to_index = true; $is_redirect_to_index = true;
} }
} else { } else {
$is_static_file = true; $is_static_file = true;
} }
} }
if($is_redirect_to_index == true) { if($is_redirect_to_index == true) {
redirect_uri(base_url() . implode("/", $routes) . "/"); redirect_uri(base_url() . implode("/", $routes) . "/");
exit; exit;
} }
if($is_static_file == true) { if($is_static_file == true) {
if(file_exists($appfile)) { if(file_exists($appfile)) {
set_header_content_type($end_era); set_header_content_type($end_era);
header("Cache-Control: max-age=86400"); header("Cache-Control: max-age=86400");
$fp = fopen($appfile, "r") or die("404 Not Found"); $fp = fopen($appfile, "r") or die("404 Not Found");
while(!feof($fp)) { while(!feof($fp)) {
echo fread($fp, 8192); echo fread($fp, 8192);
} }
fclose($fp); fclose($fp);
} else { } else {
set_error("404 Not Found"); set_error("404 Not Found");
show_errors(); show_errors();
} }
} }

View File

@ -4,21 +4,17 @@ if(!defined("_DEF_RSF_")) set_error_exit("do not allow access");
loadHelper("webpagetool"); loadHelper("webpagetool");
$method = get_requested_value("method"); $method = get_requested_value("method");
$mime = get_requested_value("mime"); // example: text/html, image/jpeg
$url = get_requested_value("url"); $url = get_requested_value("url");
$res_method = "get.cache"; $res_method = "get.cache";
$res_methods = explode(".", $method); $res_methods = explode(".", $method);
if(in_array("nocache", $res_methods)) { if(in_array("nocache", $res_methods)) {
$res_method = "get"; $res_method = "get";
} }
if(!empty($url)) { if(!empty($url)) {
$response = get_web_page($url, $res_method); $response = get_web_page($url, $res_method);
if(!empty($mime)) { echo $response['content'];
header(sprintf("Content-Type: %s", $mime));
}
print_r($response['content']);
} }
write_common_log($url, "webproxy"); write_common_log(sprintf("%s\t%s\t%s", get_current_datetime(), "webproxy", $url));

View File

@ -13,36 +13,36 @@ $action = get_requested_value("action");
$response = false; $response = false;
switch($action) { switch($action) {
case "write": case "write":
$form_data = array( $form_data = array(
"title" => get_requested_value("title"), "title" => get_requested_value("title"),
"content" => get_requested_value("content"), "content" => get_requested_value("content"),
"author" => 2, "author" => 2,
"status" => get_requested_value("status"), "status" => get_requested_value("status"),
"categories" => get_requested_value("categories") "categories" => get_requested_value("categories")
); );
// run post // run post
$response = write_wp_post($wp_server_url, $wp_access_token, $form_data); $response = write_wp_post($wp_server_url, $wp_access_token, $form_data);
redirect_uri(get_route_link($route)); redirect_uri(get_route_link($route));
break; break;
default: default:
// set session token // set session token
set_session_token(); set_session_token();
// authenticate // authenticate
$client_id = ""; $client_id = "";
$client_secret = ""; $client_secret = "";
authenticate_wp($wp_server_url, $client_id, $client_secret, $route, $code); authenticate_wp($wp_server_url, $client_id, $client_secret, $route, $code);
$categories = get_wp_categories($wp_server_url, $wp_access_token); $categories = get_wp_categories($wp_server_url, $wp_access_token);
$data = array( $data = array(
"route" => $route, "route" => $route,
"categories" => $categories, "categories" => $categories,
"_token" => get_session_token() "_token" => get_session_token()
); );
renderView("view_wppost", $data); renderView("view_wppost", $data);
} }

View File

@ -7,8 +7,6 @@ zabbix_password=
zabbix_protocol=http zabbix_protocol=http
twilio_sid= twilio_sid=
twilio_token= twilio_token=
twilio_from=
twilio_char_limit=160
vworld_api_key= vworld_api_key=
vworld_api_domain= vworld_api_domain=
mailgun_domain= mailgun_domain=

View File

@ -6,8 +6,5 @@ db_host = localhost
db_name = dbname db_name = dbname
db_username = dbusername db_username = dbusername
db_password = dbpassword db_password = dbpassword
db_retry_limit = 3
db_fetch_mode = sql
db_separated_tables =
storage_dir = storage storage_dir = storage
EOF; EOF;

View File

@ -1,5 +0,0 @@
<?php
return <<<EOF
[deprecated]
deprecated_fn=check_invalid_function,check_function_exists,array_multikey_empty,split_by_line,startsWith,endsWith
EOF;

View File

@ -1,6 +0,0 @@
<?php
return <<<EOF
[l10n]
l10n_enabled=0
l10n_default_language=ko
EOF;

View File

@ -1,11 +0,0 @@
<?php
return <<<EOF
lguplus_enabled = 1
lguplus_key = ""
lguplus_secret = ""
lguplus_id = ""
lguplus_pw = ""
lguplus_from = ""
lguplus_country = "82"
lguplus_subject = "Untitled text message"
EOF;

View File

@ -1,9 +0,0 @@
<?php
return <<<EOF
[logger]
rfc3164_enabled=0
rfc3164_host=logs6.papertrailapp.com
rfc3164_port=42986
log_rotate_size=104857600
log_rotate_ratio=0.9
EOF;

View File

@ -7,9 +7,6 @@ salt=H6hclwzFplRQw39C
saltdisabled=0 saltdisabled=0
adjectives=warty,hoary,breezy,dapper,edgy,feisty,gutsy,hardy,intrepid,jaunty,karmic,lucid,maverick,natty,oneiric,precise,quantal,raring,saucy,trusty,utopic,vivid,wliy,xeniel,yakkety,zesty adjectives=warty,hoary,breezy,dapper,edgy,feisty,gutsy,hardy,intrepid,jaunty,karmic,lucid,maverick,natty,oneiric,precise,quantal,raring,saucy,trusty,utopic,vivid,wliy,xeniel,yakkety,zesty
animals=warthog,hedgehog,badger,drake,eft,fawn,gibbon,heron,ibex,jackalope,koala,lynx,meerkat,narwhal,ocelot,pangolin,quetzal,ringtail,salamander,tahr,unicorn,vervet,werewolf,xerus,yak,zapus animals=warthog,hedgehog,badger,drake,eft,fawn,gibbon,heron,ibex,jackalope,koala,lynx,meerkat,narwhal,ocelot,pangolin,quetzal,ringtail,salamander,tahr,unicorn,vervet,werewolf,xerus,yak,zapus
https=auto httpencrypt=auto
hashalgos=md5,sha1,crypt,crc32,base64,sql_password hashalgos=md5,sha1,crypt,crc32,base64,sql_password
sandboxdisabled=1
allowextensionsdisabled=1
allowextensions=png,gif,jpg,jpeg,tif,xls,ppt,doc,xlsx,pptx,docx,odt,odp,ods,xlsm,tiff,pdf,xlsm,mp3,ogg,m4a,wma,wav
EOF; EOF;

View File

@ -2,17 +2,7 @@
return <<<EOF return <<<EOF
[system] [system]
max_execution_time=0 max_execution_time=0
memory_limit=0
upload_max_filesize=0
post_max_size=0
min_cpu_idle=0
cpu_sleep_time=3
cpu_num_cores=1
session_dir=session session_dir=session
enable_autoload=0 enable_autoload=0
default_route=welcome default_route=welcome
cache_enabled=1
cache_max_age=180
temp_max_age=60
old_version=0
EOF; EOF;

View File

@ -1,8 +1,5 @@
<?php <?php
return <<<EOF return <<<EOF
[uri] [uri]
base_route = base_url = /
base_url =
base_cdn_url =
base_vod_url =
EOF; EOF;

View File

@ -1 +0,0 @@

View File

@ -1 +0,0 @@

View File

@ -1,421 +1,369 @@
<?php <?php
/** /**
* @file base.php * @file base.php
* @created_on 2018-04-13 * @date 2018-04-13
* @updated_on 2020-02-10 * @author Go Namhyeon <gnh1201@gmail.com>
* @author Go Namhyeon <abuse@catswords.net>
* @brief Base module * @brief Base module
*/ */
// is_not_fn: mixed // check invalid function (mixed)
if(!function_exists("is_not_fn")) { if(!function_exists("check_invalid_function")) {
function is_not_fn($fn) { function check_invalid_function($fn) {
$err = -1; $status = -1;
if(is_array($fn)) { if(is_array($fn)) {
foreach($fn as $k=>$v) { foreach($fn as $k=>$v) {
if(!function_exists($v) || !is_callable($v)) { if(!function_exists($v)) {
$err = $k; $status = $k;
break; break;
} }
} }
} elseif(!function_exists($fn) || !is_callable($fn)) { } else {
$err++; if(!function_exists($fn)) {
} $status = 0;
}
}
return $err; return $status;
} }
} }
// is_fn: bool // check function exists (bool)
if(!(is_not_fn("is_fn") < 0)) { if(!(check_invalid_function("check_function_exists") < 0)) {
function is_fn($fn) { function check_function_exists($fn) {
return (is_not_fn($fn) < 0); return (check_invalid_function($fn) < 0);
} }
} }
if(!is_fn("is_deprecated_fn")) { // set scope
function is_deprecated_fn($fn) { if(!check_function_exists("set_scope")) {
$flag = false; function set_scope($k, $v) {
global $scope;
$config = get_config(); $scope[$k] = $v;
$deprecated_fn = get_value_in_array("deprecated_fn", $config, array()); }
$deprecated_fn_list = explode(",", $deprecated_fn);
if(is_array($fn)) {
foreach($fn as $k=>$v) {
if(in_array($v, $deprecated_fn_list)) {
$flag = true;
write_common_log(sprintf("Deprecated: %s()", $v), "system/base");
}
}
} else {
if(in_array($fn, $deprecated_fn_list)) {
$flag = true;
write_common_log(sprintf("Deprecated: %s()", $fn), "system/base");
}
}
return $flag;
}
} }
// set_shared_var: void // get scope
if(!is_fn("set_shared_var")) { if(!check_function_exists("get_scope")) {
function set_shared_var($k, $v) { function get_scope($k) {
global $shared_vars; global $scope;
$shared_vars[$k] = $v; return array_key_exists($k, $scope) ? $scope[$k] : null;
} }
}
// get shared var: mixed
if(!is_fn("get_shared_var")) {
function get_shared_var($k) {
global $shared_vars;
return array_key_exists($k, $shared_vars) ? $shared_vars[$k] : null;
}
} }
// register loaded resources // register loaded resources
if(!is_fn("register_loaded")) { if(!check_function_exists("register_loaded")) {
function register_loaded($k, $v) { function register_loaded($k, $v) {
$loaded = get_shared_var("loaded"); $loaded = get_scope("loaded");
if(array_key_exists($k, $loaded)) { if(array_key_exists($k, $loaded)) {
if(is_array($loaded[$k])) { if(is_array($loaded[$k])) {
$loaded[$k][] = $v; $loaded[$k][] = $v;
} }
} }
set_shared_var("loaded", $loaded); set_scope("loaded", $loaded);
} }
} }
// sandbox for include function // sandbox for include function
if(!is_fn("include_isolate")) { if(!check_function_exists("include_isolate")) {
function include_isolate($file, $data=array()) { function include_isolate($file, $data=array()) {
if(count($data) > 0) { if(count($data) > 0) {
extract($data); extract($data);
} }
return include($file); return include($file);
} }
} }
// set autoloader // set autoloader
if(!is_fn("set_autoloader")) { if(!check_function_exists("set_autoloader")) {
function set_autoloader() { function set_autoloader() {
return include('./vendor/autoload.php'); return include('./vendor/autoload.php');
} }
} }
// load view file // load view file
if(!is_fn("renderView")) { if(!check_function_exists("renderView")) {
function renderView($name, $data=array()) { function renderView($name, $data=array()) {
$flag = true; $flag = true;
$views = explode(';', $name); $views = explode(';', $name);
foreach($views as $name2) { foreach($views as $name2) {
$viewfile = './view/' . $name2 . '.php'; $viewfile = './view/' . $name2 . '.php';
if(file_exists($viewfile)) { if(file_exists($viewfile)) {
register_loaded("view", $name2); register_loaded("view", $name2);
$flag = $flag && !include_isolate($viewfile, $data); $flag = $flag && !include_isolate($viewfile, $data);
} }
} }
return !$flag; return !$flag;
} }
} }
// load view by rules // load view by rules
if(!is_fn("renderViewByRules")) { if(!check_function_exists("renderViewByRules")) {
function renderViewByRules($rules, $data=array()) { function renderViewByRules($rules, $data=array()) {
foreach($rules as $k=>$v) { foreach($rules as $k=>$v) {
if(in_array($k, get_routes())) { if(in_array($k, get_routes())) {
renderView($v, $data); renderView($v, $data);
} }
} }
} }
} }
// load system module // load system module
if(!is_fn("loadModule")) { if(!check_function_exists("loadModule")) {
function loadModule($name) { function loadModule($name) {
$flag = true; $flag = true;
$modules = explode(';', $name); $modules = explode(';', $name);
foreach($modules as $name2) { foreach($modules as $name2) {
$systemfile = './system/' . $name2 . '.php'; $systemfile = './system/' . $name2 . '.php';
if(file_exists($systemfile)) { if(file_exists($systemfile)) {
register_loaded("system", $name2); register_loaded("system", $name2);
$flag = $flag && !include_isolate($systemfile); $flag = $flag && !include_isolate($systemfile);
} else { } else {
set_error("Module " . $name . "dose not exists"); set_error("Module " . $name . "dose not exists");
} }
} }
return !$flag; return !$flag;
} }
} }
// load helper file // load helper file
if(!is_fn("loadHelper")) { if(!check_function_exists("loadHelper")) {
function loadHelper($name) { function loadHelper($name) {
$flag = true; $flag = true;
$helpers = explode(';', $name); $helpers = explode(';', $name);
foreach($helpers as $name2) { foreach($helpers as $name2) {
$helperfile = './helper/' . $name2 . '.php'; $helperfile = './helper/' . $name2 . '.php';
if(file_exists($helperfile)) { if(file_exists($helperfile)) {
register_loaded("helper", $name2); register_loaded("helper", $name2);
$flag = $flag && !include_isolate($helperfile); $flag = $flag && !include_isolate($helperfile);
} else { } else {
set_error("Helper " . $name . "dose not exists"); set_error("Helper " . $name . "dose not exists");
} }
} }
return !$flag; return !$flag;
} }
} }
// load route file // load route file
if(!is_fn("loadRoute")) { if(!check_function_exists("loadRoute")) {
function loadRoute($name, $data=array()) { function loadRoute($name, $data=array()) {
$flag = true; $flag = true;
$routes = explode(";", $name); $routes = explode(";", $name);
foreach($routes as $name2) { foreach($routes as $name2) {
$routefile = './route/' . $name2 . '.php'; $routefile = './route/' . $name2 . '.php';
if(file_exists($routefile)) { if(file_exists($routefile)) {
register_loaded("route", $name2); register_loaded("route", $name2);
$flag = $flag && !include_isolate($routefile, $data); $flag = $flag && !include_isolate($routefile, $data);
} else { } else {
set_error("Route " . $name . "dose not exists"); set_error("Route " . $name . "dose not exists");
} }
} }
return !$flag; return !$flag;
} }
} }
// load vendor file // load vendor file
if(!is_fn("loadVendor")) { if(!check_function_exists("loadVendor")) {
function loadVendor($uses, $data=array()) { function loadVendor($uses, $data=array()) {
$flag = true; $flag = true;
$usenames = array(); $usenames = array();
if(is_string($uses) && !empty($uses)) { if(is_string($uses) && !empty($uses)) {
$usenames[] = $uses; $usenames[] = $uses;
} elseif(is_array($uses)) { } elseif(is_array($uses)) {
$usenames = array_merge($usenames, $uses); $usenames = array_merge($usenames, $uses);
} else { } else {
return !$flag; return !$flag;
} }
foreach($usenames as $name) { foreach($usenames as $name) {
$vendorfile = './vendor/' . $name . '.php'; $vendorfile = './vendor/' . $name . '.php';
if(file_exists($vendorfile)) { if(file_exists($vendorfile)) {
register_loaded("vendor", $name); register_loaded("vendor", $name);
$flag = $flag && !include_isolate($vendorfile, $data); $flag = $flag && !include_isolate($vendorfile, $data);
} else { } else {
set_error("Vendor " . $name . "dose not exists"); set_error("Vendor " . $name . "dose not exists");
} }
} }
return !$flag; return !$flag;
} }
} }
if(!is_fn("array_key_empty")) { if(!check_function_exists("array_key_empty")) {
function array_key_empty($key, $array) { function array_key_empty($key, $array) {
$flag = true; $flag = true;
if(is_array($array)) { if(is_array($array)) {
if(array_key_exists($key, $array)) { if(array_key_exists($key, $array)) {
$flag = $flag && empty($array[$key]); $flag = $flag && empty($array[$key]);
} }
} }
return $flag; return $flag;
} }
} }
if(!is_fn("array_key_equals")) { if(!check_function_exists("array_key_equals")) {
function array_key_equals($key, $array, $value) { function array_key_equals($key, $array, $value) {
$flag = false; $flag = false;
if(is_array($array)) { if(is_array($array)) {
if(array_key_exists($key, $array)) { if(array_key_exists($key, $array)) {
$flag = ($array[$key] == $value); $flag = ($array[$key] == $value);
} }
} }
return $flag; return $flag;
} }
} }
if(!is_fn("array_key_is_array")) { if(!check_function_exists("array_key_is_array")) {
function array_key_is_array($key, $array) { function array_key_is_array($key, $array) {
$flag = false; $flag = false;
if(is_array($array)) { if(is_array($array)) {
if(array_key_exists($key, $array)) { if(array_key_exists($key, $array)) {
$flag = is_array($array[$key]); $flag = is_array($array[$key]);
} }
} }
return $flag; return $flag;
} }
} }
// example: array_key_unset(array_search("apple", $fruits), $fruits); if(!check_function_exists("array_keys_empty")) {
if(!is_fn("array_key_unset")) { function array_keys_empty($keys, $array) {
function array_key_unset($key, &$array) { $flag = false;
if(array_key_exists($key, $array)) { foreach($keys as $key) {
unset($array[$key]); if(array_key_empty($key, $array)) {
} $flag = $key;
} }
}
return $flag;
}
} }
if(!is_fn("array_keys_empty")) { if(!check_function_exists("get_value_in_array")) {
function array_keys_empty($keys, $array) { function get_value_in_array($name, $arr=array(), $default=false) {
$flag = false; $output = false;
foreach($keys as $key) {
if(array_key_empty($key, $array)) { $_name = "";
$flag = $key; if(is_array($name)) {
} foreach($name as $w) {
} if(!empty($w)) {
return $flag; $_name = $w;
} break;
}
}
} else {
$_name = $name;
}
if(is_array($arr)) {
$output = array_key_empty($_name, $arr) ? $default : $arr[$_name];
} else {
$output = $default;
}
return $output;
}
} }
if(!is_fn("get_value_in_array")) { if(!check_function_exists("get_value_in_object")) {
function get_value_in_array($name, $arr=array(), $default=false) { function get_value_in_object($name, $obj, $default="") {
$output = false; $output = $obj->$name;
return $output;
$_name = ""; }
if(is_array($name)) {
foreach($name as $w) {
if(!empty($w)) {
$_name = $w;
break;
}
}
} else {
$_name = $name;
}
if(is_array($arr)) {
$output = array_key_empty($_name, $arr) ? $default : $arr[$_name];
} else {
$output = $default;
}
return $output;
}
} }
if(!is_fn("get_value_in_object")) { if(!check_function_exists("check_array_length")) {
function get_value_in_object($name, $obj, $default="") { function check_array_length($arr, $len) {
$output = $obj->$name; return (count($arr) - $len);
return $output; }
}
} }
if(!is_fn("check_array_length")) { // error handler
function check_array_length($arr, $len) { if(!check_function_exists("set_error")) {
return ((!is_array($arr) ? -1 : count($arr)) - $len); function set_error($msg, $code="ERROR") {
} global $scope;
$scope['errors'][] = $code . ": " . $msg;
}
} }
if(!is_fn("check_is_empty")) { if(!check_function_exists("get_errors")) {
function check_is_empty($v, $d=true) { function get_errors($d=false, $e=false) { // d: display, e: exit
return (empty($v) ? $d : false); global $scope;
} $errors = $scope['errors'];
if($d === true) {
foreach($errors as $err) {
echo $err . PHP_EOL;
}
}
if($e === true) {
exit;
}
return $errors;
}
} }
if(!is_fn("get_key_in_array")) { if(!check_function_exists("show_errors")) {
function get_key_in_array($val, $arr) { function show_errors($exit=true) {
return array_search($val, $arr); return get_errors(true, $exit);
} }
} }
// error handler (set error) if(!check_function_exists("set_error_exit")) {
if(!is_fn("set_error")) { function set_error_exit($msg, $code="ERROR") {
function set_error($msg, $code="ERROR") { set_error($msg, $code);
global $shared_vars; show_errors();
$shared_vars['errors'][] = $code . ": " . $msg; }
write_common_log($msg, "set_error");
}
} }
// error handler (get errors)
if(!is_fn("get_errors")) { if(!check_function_exists("get_property_value")) {
function get_errors($d=false, $e=false) { // d: display, e: exit function get_property_value($prop, $obj, $ac=false) {
global $shared_vars; $result = false;
return $shared_vars['errors']; if(is_object($obj) && property_exists($obj, $prop)) {
} if($ac) {
$reflection = new ReflectionClass($obj);
$property = $reflection->getProperty($prop);
$property->setAccessible($ac);
$result = $property->getValue($obj);
} else {
$result = $obj->{$prop};
}
}
return $result;
}
} }
// error handler (show errors) if(!check_function_exists("get_routes")) {
if(!is_fn("show_errors")) { function get_routes() {
function show_errors($exit=true) { $loaded = get_scope("loaded");
$errors = get_errors(); return $loaded['route'];
foreach($errors as $err) { }
echo $err . DOC_EOL;
}
if($exit !== false) {
exit;
}
}
} }
// error handler (trigger error) // Deprecated: array_multikey_empty is changed to array_keys_empty, since version 1.2
if(!is_fn("trigger_error")) { if(!check_function_exists("array_multikey_empty")) {
function trigger_error($msg, $code="ERROR") { function array_multikey_empty($keys, $array) {
set_error($msg, $code); return array_keys_empty($keys, $array);
show_errors(); }
}
}
if(!is_fn("get_property_value")) {
function get_property_value($prop, $obj, $ac=false) {
$result = false;
if(is_object($obj) && property_exists($obj, $prop)) {
if($ac) {
$reflection = new ReflectionClass($obj);
$property = $reflection->getProperty($prop);
$property->setAccessible($ac);
$result = $property->getValue($obj);
} else {
$result = $obj->{$prop};
}
}
return $result;
}
}
if(!is_fn("get_routes")) {
function get_routes() {
$loaded = get_shared_var("loaded");
return $loaded['route'];
}
}
// Deprecated: array_multikey_empty() is changed to array_keys_empty(), since version 1.2
if(!is_fn("array_multikey_empty")) {
function array_multikey_empty($keys, $array) {
return array_keys_empty($keys, $array);
}
}
// Deprecated: set_error_exit() is changed to do_error()
if(!is_fn("set_error_exit")) {
function set_error_exit($msg, $code="ERROR") {
do_error($msg, $code);
}
} }
$loaded = array( $loaded = array(
"module" => array(), "module" => array(),
"helper" => array(), "helper" => array(),
"view" => array(), "view" => array(),
"route" => array(), "route" => array(),
"vendor" => array(), "vendor" => array(),
); );
$errors = array(); $errors = array();
set_shared_var("loaded", $loaded); set_scope("loaded", $loaded);
set_shared_var("errors", $errors); set_scope("errors", $errors);

Some files were not shown because too many files have changed in this diff Show More