This commit is contained in:
shim
2023-04-17 11:06:08 +09:00
parent d0b393aa97
commit 76264e09ad
4686 changed files with 552713 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
# 연결 모듈
## Copyright and license
Copyright 2020 Redblock, Inc.
Licensed under the [RBL](https://kimsq.com/p/rbl) License

View File

@@ -0,0 +1,29 @@
<?php
if(!defined('__KIMS__')) exit;
checkAdmin(0);
$snsSet = array('n','k','g','f','t','i');
$_tmpdfile = $g['path_var'].'site/'.$r.'/'.$m.'.var.php';
$fp = fopen($_tmpdfile,'w');
fwrite($fp, "<?php\n");
foreach ($snsSet as $val)
{
fwrite($fp, "\$d['connect']['key_".$val."'] = \"".${'key_'.$val}."\";\n");
fwrite($fp, "\$d['connect']['secret_".$val."'] = \"".${'secret_'.$val}."\";\n");
fwrite($fp, "\$d['connect']['use_".$val."'] = \"".${'use_'.$val}."\";\n");
}
fwrite($fp, "\$d['connect']['jskey_k'] = \"".${'jskey_k'}."\";\n"); // 카카오 JavaScript 키
fwrite($fp, "\$d['connect']['apikey_g'] = \"".${'apikey_g'}."\";\n"); // 구글 API 키
fwrite($fp, "?>");
fclose($fp);
@chmod($_tmpdfile,0707);
setrawcookie('connect_config_result', rawurlencode('저장 되었습니다.|success')); // 처리여부 cookie 저장
getLink('reload','parent.','','');
?>

View File

@@ -0,0 +1,280 @@
<?php
if(!defined('__KIMS__')) exit;
// 외부연결시 referer
$connect_referer = $_SESSION['connect_referer'];
include $g['path_var'].'site/'.$r.'/connect.var.php';
$_SESSION['SL'] = array();
if ($_POST['returnofgoogle'] == 'Y') {
$result = array();
$result['token'] = $_POST['token'];
$result['uid'] = $_POST['uid'];
$result['email'] = $_POST['email'];
$result['name'] = $_POST['name'];
$result['photo'] = $_POST['photo'];
$result['link'] = $_POST['link'];
$result['sex'] = $_POST['sex'] == 'male' ? 1 : 2;
$_SESSION['SL']['google']['userinfo'] = $result;
header('Location: '.$connect_referer);
}
// 콜백 URL에 code값과 state 값이 URL 문자열로 전송됩니다. code 값은 접근 토큰 발급 요청에 사용합니다.
function socialLogin($s,$id,$secret,$callBack,$type) {
// 소셜로그인시 referer
$connect_referer = $_SESSION['connect_referer'];
if(!$_SESSION['SL']['state'.$s]) $_SESSION['SL']['state'.$s] = md5(microtime().mt_rand());
$g['connect']['client_id'] = $id;
$g['connect']['client_secret'] = $secret;
$g['connect']['redirect_uri'] = urlencode($callBack);
$g['connect']['state'] = $_SESSION['SL']['state'.$s];
$g['connect']['code'] = $_REQUEST['code'];
// 네이버 ******************************************************************************************************************************************/
if ($s == 'naver')
{
$g['connect']['callurl'] = 'https://nid.naver.com/oauth2.0/token?client_id='.$g['connect']['client_id'].'&client_secret='.$g['connect']['client_secret'];
$g['connect']['callurl'].= '&grant_type=authorization_code&code='.$g['connect']['code'].'&state='.$g['connect']['state'];
if($type == 'token') {
// if ($g['connect']['state'] != $_REQUEST['state']) getLink(RW(0),'','인증에 실패했습니다. 다시 시도해 주세요.','');
// 접근 토큰 발급 요청
if ($_SESSION['SL'][$s]['userinfo']['access_token']) $dat['access_token'] = $_SESSION['SL'][$s]['userinfo']['access_token'];
else $dat = json_decode(getCURLData($g['connect']['callurl'],''), true);
// 접근 토큰을 이용하여 프로필 API 호출하기
$dat1 = json_decode(getCURLData('https://openapi.naver.com/v1/nid/me',array("Authorization: Bearer ".$dat['access_token'])), true);
// 프로필 정보 배열처리 후, 세션저장
$result = array();
$result['provider'] = $s;
$result['access_token'] = $dat['access_token'];
$result['refresh_token'] = $dat['refresh_token'];
$result['expires_in'] = $dat['expires_in'];
$result['uid'] = $dat1['response']['id'];
$result['name'] = $dat1['response']['nickname'];
$result['email'] = $dat1['response']['email'];
$result['photo'] = $dat1['response']['profile_image'];
$result['age'] = $dat1['response']['age'];
$result['sex'] = $dat1['response']['gender'];
$result['sex'] = $result['sex'] == 'M' ? 1 : 2;
$result['birthday'] = str_replace('-','',$dat1['response']['birthday']);
$_SESSION['SL'][$s]['userinfo'] = $result;
// 원래페이지 이동
header('Location: '.$connect_referer);
}
}
// 카카오 ******************************************************************************************************************************************/
if ($s == 'kakao') {
$g['connect']['callurl'] = 'https://kauth.kakao.com/oauth/token?client_id='.$g['connect']['client_id'].'&grant_type=authorization_code&code='.$g['connect']['code'].'&redirect_uri='.$g['connect']['redirect_uri'].'&client_secret='.$g['connect']['client_secret'];
if ($type == 'token')
{
if($_GET['error'] == 'access_denied') getLink('','','인증에 실패했습니다. 다시 시도해 주세요.','');
if ($_SESSION['SL'][$s]['userinfo']['access_token']) {
$dat1['access_token'] = $_SESSION['SL'][$s]['userinfo']['access_token'];
} else {
$dat1 = json_decode(getCURLData($g['connect']['callurl'],''), true);
}
$dat2 = json_decode(getCURLData('https://kapi.kakao.com/v2/user/me',array("Authorization: Bearer ".$dat1['access_token'])), true);
$isksuser = json_decode(getCURLData('https://kapi.kakao.com/v1/api/story/isstoryuser',array("Authorization: Bearer ".$dat1['access_token'])), true);
if ($isksuser['isStoryUser'])
{
$dat3 = json_decode(getCURLData('https://kapi.kakao.com/v1/api/story/profile',array("Authorization: Bearer ".$dat1['access_token'])), true);
/*
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://kapi.kakao.com/v1/api/story/post/note?permission=M&content=".urlencode('REST API로 카카오 스토리에 노트를 올려봅니다. - '.date('Y/m/d H:i:s')));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Authorization: Bearer ".$dat1['access_token']
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
$result_post_note = json_decode(curl_exec($ch),true);
curl_close($ch);
*/
}
$result = array();
$result['access_token'] = $dat1['access_token'];
$result['refresh_token'] = $dat1['refresh_token'];
$result['expires_in'] = $dat1['expires_in'];
$result['uid'] = $dat2['id'];
$result['email'] = $dat2['kaccount_email'];
$result['name'] = $dat2['properties']['nickname'];
$result['photo'] = $dat2['properties']['profile_image'];
$result['photo_thumb'] = $dat2['properties']['thumbnail_image'];
$result['link'] = $dat3['permalink'];
$result['birthday'] = $dat3['birthday'];
$result['birthday_type'] = $dat3['birthdayType'] == 'SOLAR' ? 0 : 1;
$result['ks_img_profile'] = $dat3['profileImageURL'];
$result['ks_img_profile_thumb'] = $dat3['thumbnailURL'];
$result['ks_img_bg'] = $dat3['bgImageURL'];
$_SESSION['SL'][$s]['userinfo'] = $result;
header('Location: '.$connect_referer);
}
}
// 페이스북 ******************************************************************************************************************************************/
if ($s == 'facebook')
{
$g['connect']['callurl'] = 'https://graph.facebook.com/v3.0/oauth/access_token?client_id='.$g['connect']['client_id'].'&client_secret='.$g['connect']['client_secret'].'&code='.$g['connect']['code'].'&redirect_uri='.$g['connect']['redirect_uri'];
if ($type == 'token')
{
if($_GET['error'] == 'access_denied') getLink('','','인증에 실패했습니다. 다시 시도해 주세요.','close');
// 접근 토큰 발급 요청
if ($_SESSION['SL'][$s]['userinfo']['token']) $dat['access_token'] = $_SESSION['SL'][$s]['userinfo']['token'];
else $dat = json_decode(getCURLData($g['connect']['callurl'],''), true);
// 접근 토큰을 이용하여 프로필 API 호출하기
$dat1 = json_decode(getCURLData('https://graph.facebook.com/v3.0/me?fields=id,email,first_name,last_name,name&access_token='.$dat['access_token'],''), true);
// 프로필 정보 배열처리 후, 세션저장
$result = array();
$result['token'] = $dat['access_token'];
$result['uid'] = $dat1['id'];
$result['name'] = $dat1['last_name'].$dat1['first_name']; // $dat['name']
$result['email'] = $dat1['email'];
$result['photo'] = 'https://graph.facebook.com/'.$dat1['id'].'/picture?type=large';
// $result['link'] = $dat1['link'];
// $result['sex'] = $dat1['gender'] == 'male' ? 1 : 2;
// $_birthday = explode('/',$dat1['birthday']);
// $result['birthday'] = $_birthday[2].$_birthday[1].$_birthday[0];
$_SESSION['SL'][$s]['userinfo'] = $result;
header('Location: '.$connect_referer);
}
}
// 구글 && 유투브 ******************************************************************************************************************************************/
if ($s == 'google')
{
$g['connect']['callapi'] = 'https://accounts.google.com/o/oauth2/auth?client_id='.$g['connect']['client_id'].'&redirect_uri='.$g['connect']['redirect_uri'].'&response_type=code&scope=email%20profile&state=%2Fprofile&approval_prompt=auto';
$g['connect']['callapi_youtube'] = 'https://accounts.google.com/o/oauth2/auth?client_id='.$g['connect']['client_id'].'&redirect_uri='.$g['connect']['redirect_uri'];
$g['connect']['callapi_youtube'].= '&response_type=code&scope=https://www.googleapis.com/auth/youtube%20email%20profile&access_type=offline';
if ($type == 'token')
{
if($_GET['error'] == 'access_denied') getLink('','','인증에 실패했습니다. 다시 시도해 주세요.','close');
$_nowToken = $_REQUEST['state']=='/profile' ? 'token' : 'token_youtube';
if ($_SESSION['SL'][$s]['userinfo'][$_nowToken])
{
$dat1['access_token'] = $_SESSION['SL'][$s]['userinfo'][$_nowToken];
}
else
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://accounts.google.com/o/oauth2/token");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'code' => $g['connect']['code'],
'client_id' => $g['connect']['client_id'],
'client_secret' => $g['connect']['client_secret'],
'redirect_uri' => urldecode($g['connect']['redirect_uri']),
'grant_type' => 'authorization_code'
));
$dat1 = (array)json_decode(curl_exec($ch));
curl_close($ch);
}
$dat2 = json_decode(getCURLData('https://www.googleapis.com/oauth2/v2/userinfo',array("Authorization: Bearer ".$dat1['access_token'])), true);
$result = array();
if($_nowToken == 'token')
{
$result['token'] = $dat1['access_token'];
$result['token_youtube'] = $_SESSION['SL'][$s]['userinfo']['token_youtube'];
}
else {
$result['token'] = $_SESSION['SL'][$s]['userinfo']['token'];
$result['token_youtube'] = $dat1['access_token'];
}
$result['uid'] = $dat2['id'];
$result['email'] = $dat2['email'];
$result['name'] = $dat2['name'];
$result['photo'] = $dat2['picture'];
$result['link'] = $dat2['link'];
$result['sex'] = $dat2['gender'] == 'male' ? 1 : 2;
$_SESSION['SL'][$s]['userinfo'] = $result;
header('Location: '.$connect_referer);
//getLink($_SERVER['HTTP_REFERER'],'','','');
}
}
// 인스타그램 ******************************************************************************************************************************************/
if ($s == 'instagram')
{
$g['connect']['callapi'] = 'https://api.instagram.com/oauth/authorize/?client_id='.$g['connect']['client_id'].'&redirect_uri='.$g['connect']['redirect_uri'].'&response_type=code';
if ($type == 'token')
{
if($_GET['error'] == 'access_denied') getLink('','','인증에 실패했습니다. 다시 시도해 주세요.','close');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.instagram.com/oauth/access_token");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'code' => $g['connect']['code'],
'client_id' => $g['connect']['client_id'],
'client_secret' => $g['connect']['client_secret'],
'redirect_uri' => urldecode($g['connect']['redirect_uri']),
'grant_type' => 'authorization_code'
));
$dat1 = (array)json_decode(curl_exec($ch));
curl_close($ch);
$access_token = $dat1['access_token'];
$dat2 = (array)$dat1['user'];
$result = array();
$result['access_token'] = $access_token;
$result['uid'] = $dat2['id'];
$result['name'] = $dat2['full_name'];
$result['photo'] = $dat2['profile_picture'];
$result['link'] = $dat2['website'];
$_SESSION['SL'][$s]['userinfo'] = $result;
header('Location: '.$connect_referer);
}
}
return $g['connect'];
}
if ($_GET['connectReturn'] == 'naver') {
socialLogin($_GET['connectReturn'],$d['connect']['key_n'],$d['connect']['secret_n'],$g['url_root'].'/'.$r.'/oauth/naver','token');
}
if ($_GET['connectReturn'] == 'kakao') {
socialLogin($_GET['connectReturn'],$d['connect']['key_k'],$d['connect']['secret_k'],$g['url_root'].'/'.$r.'/oauth/kakao','token');
}
if ($_GET['connectReturn'] == 'google') {
socialLogin($_GET['connectReturn'],$d['connect']['key_g'],$d['connect']['secret_g'],$g['url_root'].'/'.$r.'/oauth/google','token');
}
if ($_GET['connectReturn'] == 'facebook') {
socialLogin($_GET['connectReturn'],$d['connect']['key_f'],$d['connect']['secret_f'],$g['url_root'].'/'.$r.'/oauth/facebook','token');
}
if ($_GET['connectReturn'] == 'instagram') {
socialLogin($_GET['connectReturn'],$d['connect']['key_i'],$d['connect']['secret_i'],$g['url_root'].'/'.$r.'/oauth/instagram','token');
}
?>

View File

@@ -0,0 +1,55 @@
<?php
if(!defined('__KIMS__')) exit;
// if (!$my['uid']) getLink('','','정상적인 접근이 아닙니다.','');
$MS = getDbData($table['s_mbrsns'],"mbruid='".$my['uid']."' and sns='kakao'",'*');
//getLink('','',$MS['access_token'].' 토근입니다..','');
$msg = 'template_object= {
"object_type": "feed",
"content": {
"title": "디저트 사진",
"description": "아메리카노, 빵, 케익",
"image_url": "http://mud-kage.kakao.co.kr/dn/NTmhS/btqfEUdFAUf/FjKzkZsnoeE4o19klTOVI1/openlink_640x640s.jpg",
"image_width": 640,
"image_height": 640,
"link": {
"web_url": "http://www.daum.net",
"mobile_web_url": "http://m.daum.net",
"android_execution_params": "contentId=100",
"ios_execution_params": "contentId=100"
}
},
"social": {
"like_count": 100,
"comment_count": 200,
"shared_count": 300,
"view_count": 400,
"subscriber_count": 500
},
"buttons": [
{
"title": "웹으로 이동",
"link": {
"web_url": "http://www.daum.net",
"mobile_web_url": "http://m.daum.net"
}
},
{
"title": "앱으로 이동",
"link": {
"android_execution_params": "contentId=100",
"ios_execution_params": "contentId=100"
}
}
]
}';
$dat = json_decode(getCURLData2('https://kapi.kakao.com/v2/api/talk/memo/default/send',array("Authorization: Bearer ".$MS['access_token']),array($msg)), true);
getLink('','',$dat['result_code'].' 결과입니다.','-1');
?>

View File

@@ -0,0 +1,5 @@
<?php
if(!defined('__KIMS__')) exit;
$_SESSION['connect_referer'] = $_POST['referer'];
exit;
?>

View File

@@ -0,0 +1,4 @@
<?php
if(!defined('__KIMS__')) exit;
include $g['path_module'].$module.'/admin/'.$front.'.php';
?>

View File

@@ -0,0 +1 @@
.dl-horizontal dd, .dl-horizontal dt {margin-bottom:10px;}

View File

@@ -0,0 +1,29 @@
<?php
$license_local = $g['path_module'].$module.'/LICENSE';
$license_global = $g['path_root'].'LICENSE';
if (file_exists($license_local)) $license = $license_local;
else $license = $license_global;
?>
<link href="<?php echo $g['s']?>/_core/css/github-markdown.css" rel="stylesheet">
<?php getImport('jquery-markdown','jquery.markdown','0.0.10','js')?>
<?php @include $g['path_module'].$module.'/var/var.moduleinfo.php' ?>
<article class="rb-docs markdown-body px-5 pt-3">
<h1><?php echo sprintf('%s 모듈정보',ucfirst($MD['name']))?></h1>
<div class="pb-5 readme">
<?php readfile($g['path_module'].$module.'/README.md')?>
</div>
<div class="pb-5">
<h2>라이센스</h2>
<textarea class="form-control" rows="10"><?php readfile($license)?></textarea>
</div>
</article>
<script type="text/javascript">
$(".markdown-body .readme").markdown();
</script>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 698 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,34 @@
.sidebar .list-group-item.active {
border: 1px solid rgb(0, 123, 255) !important;
}
.media.p-2 {
padding: .3rem!important;
}
.media .rounded {
border-radius: 0.5rem !important;
}
.media .fa-3x {
font-size: 2.7em;
}
.media .fa-stack-2x {
color: #1f2227;
border-color: #1b1e24;
}
.grayscale {
-webkit-filter: grayscale(100%); /* Safari 6.0 - 9.0 */
filter: grayscale(100%);
}
.fa-stack.active.google .fa-square {
color: #eb4536
}
.fa-stack.active.facebook .fa-square {
color: #3b5998
}
.fa-stack.active.twitter .fa-square {
color: #55adee
}
.fa-stack.active.instagram .fa-square {
color: #aa41b5
}

View File

@@ -0,0 +1,534 @@
<?php
$g['connectVarForSite'] = $g['path_var'].'site/'.$r.'/connect.var.php';
$_tmpdfile = file_exists($g['connectVarForSite']) ? $g['connectVarForSite'] : $g['path_module'].$module.'/var/var.php';
include_once $_tmpdfile;
?>
<div id="configbox" class="row no-gutters">
<div class="col-sm-4 col-md-4 col-xl-3 d-none d-sm-block sidebar">
<div id="accordion">
<div class="card border-0">
<div class="card-header p-0 d-flex justify-content-between">
<a class="muted-link d-block w-100" role="button" aria-expanded="true" aria-controls="collapseOne">
외부 서비스 목록
</a>
</div>
<div class="card-body p-0">
<div class="list-group list-group-flush border-bottom">
<a class="list-group-item list-group-item-action d-flex justify-content-between align-items-center<?php if(!$_SESSION['connect_config_nav'] || $_SESSION['connect_config_nav']=='kakao'):?> active<?php endif?>" data-toggle="pill" href="#pane_kakao" onclick="sessionSetting('connect_config_nav','kakao','','');">
<span>
카카오
</span>
<span>
<?php if ($d[$module]['use_k']): ?>
<i class="fa fa-circle text-success ml-auto" data-toggle="tooltip" title="" data-original-title="사용중"></i>
<?php endif; ?>
</span>
</a>
<a class="list-group-item list-group-item-action d-flex justify-content-between align-items-center<?php if($_SESSION['connect_config_nav']=='google'):?> active<?php endif?>" data-toggle="pill" href="#pane_google" onclick="sessionSetting('connect_config_nav','google','','');">
<span>
구글
</span>
<span>
<?php if ($d[$module]['use_g']): ?>
<i class="fa fa-circle text-success ml-auto" data-toggle="tooltip" title="" data-original-title="사용중"></i>
<?php endif; ?>
</span>
</a>
<a class="list-group-item list-group-item-action d-flex justify-content-between align-items-center<?php if($_SESSION['connect_config_nav']=='naver'):?> active<?php endif?>" data-toggle="pill" href="#pane_naver" onclick="sessionSetting('connect_config_nav','naver','','');">
<span>
네이버
</span>
<span>
<?php if ($d[$module]['use_n']): ?>
<i class="fa fa-circle text-success ml-auto" data-toggle="tooltip" title="" data-original-title="사용중"></i>
<?php endif; ?>
</span>
</a>
<a class="list-group-item list-group-item-action d-flex justify-content-between align-items-center<?php if($_SESSION['connect_config_nav']=='facebook'):?> active<?php endif?>" data-toggle="pill" href="#pane_facebook" onclick="sessionSetting('connect_config_nav','facebook','','');">
<span>
페이스북
</span>
<span>
<?php if ($d[$module]['use_f']): ?>
<i class="fa fa-circle text-success ml-auto" data-toggle="tooltip" title="" data-original-title="사용중"></i>
<?php endif; ?>
</span>
</a>
<a class="list-group-item list-group-item-action d-flex justify-content-between align-items-center<?php if($_SESSION['connect_config_nav']=='instagram'):?> active<?php endif?>" data-toggle="pill" href="#pane_instagram" onclick="sessionSetting('connect_config_nav','instagram','','');">
<span>
인스타그램
</span>
<span>
<?php if ($d[$module]['use_i']): ?>
<i class="fa fa-circle text-success ml-auto" data-toggle="tooltip" title="" data-original-title="사용중"></i>
<?php endif; ?>
</span>
</a>
</div><!-- /.list-group -->
</div><!-- /.card-body -->
</div><!-- /.card -->
</div><!-- /#accordion -->
</div><!-- /.sidebar -->
<div class="col-sm-8 col-md-8 ml-sm-auto col-xl-9">
<form class="card rounded-0 border-0" name="procForm" action="<?php echo $g['s']?>/" method="post" target="_action_frame_<?php echo $m?>">
<input type="hidden" name="r" value="<?php echo $r?>">
<input type="hidden" name="m" value="<?php echo $module?>">
<input type="hidden" name="a" value="config">
<div class="card-header d-flex justify-content-between align-items-center page-body-header" style="line-height: 1.2;">
<span>연결 등록정보</span>
</div><!-- /.card-header -->
<div class="card-body tab-content">
<div id="pane_naver" class="tab-pane fade<?php if($_SESSION['connect_config_nav']=='naver'):?> show active<?php endif?>">
<div class="d-flex justify-content-between align-items-center">
<div class="media p-2">
<img class="mr-3 rounded<?php echo !$d[$module]['use_n']?' grayscale':'' ?>" src="<?php echo $g['img_module_admin']?>/naver.png" alt="네이버" width="64px">
<div class="media-body">
<h5 class="mt-2 mb-1">
네이버
</h5>
<span class="text-muted">네이버 계정으로 로그인 ,네이버 블로그 및 포스트로 링크 공유</span>
</div>
</div>
<div class="custom-control custom-checkbox custom-control-inline ml-3">
<input type="checkbox" class="custom-control-input" id="use_n" name="use_n" value="1" <?php echo $d[$module]['use_n']?' checked':'' ?><?php echo !$d[$module]['key_n']&&!$d[$module]['secret_n']?' disabled':'' ?>>
<label class="custom-control-label" for="use_n">사용함</label>
</div>
</div><!-- /.d-flex -->
<hr>
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right pt-3">Client ID</label>
<div class="col-lg-10 col-xl-9">
<input class="form-control form-control-lg" type="text" name="key_n" value="<?php echo $d[$module]['key_n']?>">
</div>
</div><!-- /.form-group -->
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right pt-3">Client Secret</label>
<div class="col-lg-10 col-xl-9">
<input class="form-control form-control-lg" type="text" name="secret_n" value="<?php echo $d[$module]['secret_n']?>">
</div>
</div><!-- /.form-group -->
<div class="card mt-5">
<div class="card-header d-flex justify-content-between">
APP 등록
</div>
<div class="card-body">
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right">개발자 센타</label>
<div class="col-lg-10 col-xl-9 pt-2">
<a href="https://developers.naver.com/apps" target="_blank">https://developers.naver.com/apps</a>
</div>
</div><!-- /.form-group -->
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right">Callback URL</label>
<div class="col-lg-10 col-xl-9">
<div class="input-group">
<input type="text" class="form-control" value="<?php echo $g['url_root'].'/'.$r.'/oauth/naver'?>" readonly id="url_n">
<div class="input-group-append">
<button class="btn btn-light js-clipboard" type="button" data-tooltip="tooltip" title="클립보드에 복사" data-clipboard-target="#url_n">
<i class="fa fa-clipboard"></i>
</button>
</div>
</div>
<small class="form-text text-muted"><span class="badge badge-pill badge-dark">참고</span> <?php echo $g['s'].'/?r='.$r.'&m='.$module.'&a=connect&connectReturn=naver'?></small>
</div>
</div><!-- /.form-group -->
<hr>
<ul class="f12 text-muted">
<li>애플리케이션 등록: 네이버 오픈 API로 개발하시려면 먼저 <a href="https://developers.naver.com/apps/#/register?api=nvlogin" target="_blank">'Application-애플리케이션 등록'</a> 메뉴에서 애플리케이션을 등록하셔야 합니다. <br>
<a href="https://developers.naver.com/docs/common/register" target="_blank">[자세한 방법 보기] &gt;</a></li>
<li>클라이언트 ID와 secret 확인: <a href="https://developers.naver.com/appinfo" target="_blank">'내 애플리케이션'</a>에서 등록한 애플리케이션을 선택하면 Client ID와 Client Secret 값을 확인할 수 있습니다.</li>
<li>API 권한 설정: <a href="https://developers.naver.com/appinfo" target="_blank">'내 애플리케이션'</a>의 'API 권한관리' 탭에서 사용하려는 API가 체크되어 있는지 확인합니다. 체크되어 있지 않을 경우 403 에러(API 권한 없음)가 발생하니 주의하시기 바랍니다.
</li>
</ul>
<div class="f12 text-muted">
SNS 로그인을 위해서는 각각의 SNS의 APP등록을 하셔야 합니다.<br />
APP 등록을 하면 API키와 같은 특정 인증키를 받게되며 그 값을 등록해 주시면 됩니다.<br />
인증키를 등록한 후에는 반드시 각 SNS APP등록페이지에서 콜백주소 및 기타 설정을 해 주세요.<br>
(앱 설정페이지에서 인증된 도메인이 아닐 경우 대부분 사용이 제한됩니다.)<br>
<strong>이 모듈은 서버에 PHP CURL 모듈이 설치되어 있어야 사용가능합니다.</strong><br>
<hr>
자세한 내용은 <a href="https://docs.google.com/document/d/1a1rGRZXgdeK-bxbFrHbnAQfO5BIS8s8xQteX1Ho0lA8/edit?usp=sharing" target="_blank">네이버 연결 도움말</a>을 참고해주세요
</div>
</div>
</div>
</div><!-- /#pane_naver -->
<div id="pane_kakao" class="tab-pane fade<?php if(!$_SESSION['connect_config_nav'] || $_SESSION['connect_config_nav']=='kakao'):?> show active<?php endif?>">
<div class="d-flex justify-content-between align-items-center">
<div class="media p-2">
<img class="mr-3 rounded<?php echo !$d[$module]['use_k']?' grayscale':'' ?>" src="<?php echo $g['img_module_admin']?>/kakaotalk.png" alt="카카오" width="64px">
<div class="media-body">
<h5 class="mt-2 mb-1">
카카오톡
</h5>
<span class="text-muted">카카오톡 계정으로 로그인 ,카카오톡 및 카카오 스토리 링크공유</span>
</div>
</div>
<div class="custom-control custom-checkbox custom-control-inline ml-3">
<input type="checkbox" class="custom-control-input" id="use_k" name="use_k" value="1" <?php echo $d[$module]['use_k']?' checked':'' ?><?php echo !$d[$module]['key_k']&&!$d[$module]['secret_k']?' disabled':'' ?>>
<label class="custom-control-label" for="use_k">사용함</label>
</div>
</div><!-- /.d-flex -->
<hr>
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right pt-3">REST API 키</label>
<div class="col-lg-10 col-xl-9">
<input class="form-control form-control-lg" type="text" name="key_k" value="<?php echo $d[$module]['key_k']?>">
</div>
</div><!-- /.form-group -->
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right pt-3">JavaScript 키</label>
<div class="col-lg-10 col-xl-9">
<input class="form-control form-control-lg" type="text" name="jskey_k" value="<?php echo $d[$module]['jskey_k']?>">
</div>
</div><!-- /.form-group -->
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right pt-3">Admin 키</label>
<div class="col-lg-10 col-xl-9">
<input class="form-control form-control-lg" type="text" name="secret_k" value="<?php echo $d[$module]['secret_k']?>">
</div>
</div><!-- /.form-group -->
<div class="card mt-5">
<div class="card-header d-flex justify-content-between">
APP 등록
</div>
<div class="card-body">
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right">개발자 센타</label>
<div class="col-lg-10 col-xl-9 pt-2">
<a href="https://developers.kakao.com/apps" target="_blank">https://developers.kakao.com/apps</a>
</div>
</div><!-- /.form-group -->
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right">Redirect Path</label>
<div class="col-lg-10 col-xl-9">
<div class="input-group">
<input type="text" class="form-control" value="<?php echo $g['url_root'].'/'.$r.'/oauth/kakao'?>" readonly id="url_k">
<div class="input-group-append">
<button class="btn btn-light js-clipboard" type="button" data-tooltip="tooltip" title="클립보드에 복사" data-clipboard-target="#url_k">
<i class="fa fa-clipboard"></i>
</button>
</div>
</div>
<small class="form-text text-muted"><span class="badge badge-pill badge-dark">참고</span> <?php echo $g['s'].'/?r='.$r.'&m='.$module.'&a=connect&connectReturn=kakao'?></small>
</div>
</div><!-- /.form-group -->
<hr>
<div class="f12 text-muted">
SNS 로그인을 위해서는 각각의 SNS의 APP등록을 하셔야 합니다.<br />
APP 등록을 하면 API키와 같은 특정 인증키를 받게되며 그 값을 등록해 주시면 됩니다.<br />
인증키를 등록한 후에는 반드시 각 SNS APP등록페이지에서 콜백주소 및 기타 설정을 해 주세요.<br>
(앱 설정페이지에서 인증된 도메인이 아닐 경우 대부분 사용이 제한됩니다.)<br>
<strong>이 모듈은 서버에 PHP CURL 모듈이 설치되어 있어야 사용가능합니다.</strong><br>
<hr>
자세한 내용은 <a href="https://docs.google.com/document/d/1l8mcm_7r-RUyySdP0JlKXON6rZJtqqsjqsQaDB1F9_g/edit?usp=sharing" target="_blank">카카오 연결 도움말</a>을 참고해주세요
</div>
</div>
</div><!-- /.card -->
</div><!-- /#pane_kakao -->
<div id="pane_google" class="tab-pane fade<?php if($_SESSION['connect_config_nav']=='google'):?> show active<?php endif?>">
<div class="d-flex justify-content-between align-items-center">
<div class="media">
<span class="fa-stack fa-3x mr-3<?php echo $d[$module]['use_g']?' google active':'' ?>">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-google fa-stack-1x fa-inverse"></i>
</span>
<div class="media-body">
<h5 class="mt-3 mb-1">구글</h5>
<span class="text-muted">구글 계정으로 로그인</span>
</div>
</div>
<div class="custom-control custom-checkbox custom-control-inline ml-3">
<input type="checkbox" class="custom-control-input" id="use_g" name="use_g" value="1" <?php echo $d[$module]['use_g']?' checked':'' ?><?php echo !$d[$module]['key_g']&&!$d[$module]['secret_g']?' disabled':'' ?>>
<label class="custom-control-label" for="use_g">사용함</label>
</div>
</div><!-- /.d-flex -->
<hr>
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right pt-3">클라이언트 ID</label>
<div class="col-lg-10 col-xl-9">
<input class="form-control form-control-lg" type="text" name="key_g" value="<?php echo $d[$module]['key_g']?>">
</div>
</div><!-- /.form-group -->
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right pt-3">보안 비밀</label>
<div class="col-lg-10 col-xl-9">
<input class="form-control form-control-lg" type="text" name="secret_g" value="<?php echo $d[$module]['secret_g']?>">
</div>
</div><!-- /.form-group -->
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right pt-3">API key</label>
<div class="col-lg-10 col-xl-9">
<input class="form-control form-control-lg" type="text" name="apikey_g" value="<?php echo $d[$module]['apikey_g']?>">
</div>
</div><!-- /.form-group -->
<div class="card mt-5">
<div class="card-header d-flex justify-content-between">
APP 등록
</div>
<div class="card-body">
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right">API 콘솔</label>
<div class="col-lg-10 col-xl-9 pt-2">
<a href="https://console.developers.google.com/" target="_blank">https://console.developers.google.com/</a>
</div>
</div><!-- /.form-group -->
<hr>
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right">리디렉션 URI</label>
<div class="col-lg-10 col-xl-9">
<div class="input-group">
<input type="text" class="form-control" value="<?php echo $g['url_root'].'/'.$r.'/oauth/google'?>" readonly id="url_g">
<div class="input-group-append">
<button class="btn btn-light js-clipboard" type="button" data-tooltip="tooltip" title="클립보드에 복사" data-clipboard-target="#url_g">
<i class="fa fa-clipboard"></i>
</button>
</div>
</div>
<small class="form-text text-muted"><span class="badge badge-pill badge-dark">참고</span> <?php echo $g['s'].'/?r='.$r.'&m='.$module.'&a=connect&connectReturn=google'?></small>
</div>
</div><!-- /.form-group -->
<div class="f12 text-muted">
SNS 로그인을 위해서는 각각의 SNS의 APP등록을 하셔야 합니다.<br />
APP 등록을 하면 API키와 같은 특정 인증키를 받게되며 그 값을 등록해 주시면 됩니다.<br />
인증키를 등록한 후에는 반드시 각 SNS APP등록페이지에서 콜백주소 및 기타 설정을 해 주세요.<br>
(앱 설정페이지에서 인증된 도메인이 아닐 경우 대부분 사용이 제한됩니다.)<br>
<strong>이 모듈은 서버에 PHP CURL 모듈이 설치되어 있어야 사용가능합니다.</strong><br>
<hr>
자세한 내용은 <a href="https://docs.google.com/document/d/1MtntPlUzWJfzzq-p5QulQhYHcWL6j8Y0HiUe186JBas/edit?usp=sharing" target="_blank">구글 연결 도움말</a>을 참고해주세요
</div>
</div>
</div><!-- /.card -->
</div><!-- /#pane_google -->
<div id="pane_facebook" class="tab-pane fade<?php if($_SESSION['connect_config_nav']=='facebook'):?> show active<?php endif?>">
<div class="d-flex justify-content-between align-items-center">
<div class="media">
<span class="fa-stack fa-3x mr-3<?php echo $d[$module]['use_f']?' facebook active':'' ?>">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-facebook fa-stack-1x fa-inverse"></i>
</span>
<div class="media-body">
<h5 class="mt-3 mb-1">페이스북</h5>
<span class="text-muted">페이스북 계정으로 로그인</span>
</div>
</div>
<div class="custom-control custom-checkbox custom-control-inline ml-3">
<input type="checkbox" class="custom-control-input" id="use_f" name="use_f" value="1" <?php echo $d[$module]['use_f']?' checked':'' ?><?php echo !$d[$module]['key_f']&&!$d[$module]['secret_f']?' disabled':'' ?>>
<label class="custom-control-label" for="use_f">사용함</label>
</div>
</div><!-- /.d-flex -->
<hr>
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right pt-3">앱 ID</label>
<div class="col-lg-10 col-xl-9">
<input class="form-control form-control-lg" type="text" name="key_f" value="<?php echo $d[$module]['key_f']?>">
</div>
</div><!-- /.form-group -->
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right pt-3">앱 시크릿 코드</label>
<div class="col-lg-10 col-xl-9">
<input class="form-control form-control-lg" type="text" name="secret_f" value="<?php echo $d[$module]['secret_f']?>">
</div>
</div><!-- /.form-group -->
<div class="card mt-4">
<div class="card-header d-flex justify-content-between">
APP 등록
</div>
<div class="card-body">
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right">개발자 센타</label>
<div class="col-lg-10 col-xl-9 pt-2">
<a href="https://developers.facebook.com" target="_blank">https://developers.facebook.com</a>
</div>
</div><!-- /.form-group -->
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right">콜백 URL</label>
<div class="col-lg-10 col-xl-9">
<div class="input-group">
<input type="text" class="form-control" value="<?php echo $g['url_root'].'/'.$r.'/oauth/facebook'?>" readonly id="url_f">
<div class="input-group-append">
<button class="btn btn-light js-clipboard" type="button" data-tooltip="tooltip" title="클립보드에 복사" data-clipboard-target="#url_f">
<i class="fa fa-clipboard"></i>
</button>
</div>
</div>
<small class="form-text text-muted"><span class="badge badge-pill badge-dark">참고</span> <?php echo $g['s'].'/?r='.$r.'&m='.$module.'&a=connect&connectReturn=facebook'?></small>
</div>
</div><!-- /.form-group -->
<hr>
<div class="f12 text-muted">
SNS 로그인을 위해서는 각각의 SNS의 APP등록을 하셔야 합니다.<br />
APP 등록을 하면 API키와 같은 특정 인증키를 받게되며 그 값을 등록해 주시면 됩니다.<br />
인증키를 등록한 후에는 반드시 각 SNS APP등록페이지에서 콜백주소 및 기타 설정을 해 주세요.<br>
(앱 설정페이지에서 인증된 도메인이 아닐 경우 대부분 사용이 제한됩니다.)<br>
<strong>이 모듈은 서버에 PHP CURL 모듈이 설치되어 있어야 사용가능합니다.</strong><br>
<hr>
자세한 내용은 <a href="https://docs.google.com/document/d/1WnwWFFozPsia1wWhxwZrnht1j7-gJRUs9gjzP3sWVgk/edit?usp=sharing" target="_blank">페이스북 연결 도움말</a>을 참고해주세요
</div>
</div>
</div><!-- /.card -->
</div><!-- /#pane_facebook -->
<div id="pane_instagram" class="tab-pane fade<?php if($_SESSION['connect_config_nav']=='instagram'):?> show active<?php endif?>">
<div class="d-flex justify-content-between align-items-center">
<div class="media">
<span class="fa-stack fa-3x mr-3<?php echo $d[$module]['use_i']?' instagram active':'' ?>">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-instagram fa-stack-1x fa-inverse"></i>
</span>
<div class="media-body">
<h5 class="mt-3 mb-1">인스타 그램</h5>
<span class="text-muted">인스타 계정으로 로그인, 사진 가져오기</span>
</div>
</div>
<div class="custom-control custom-checkbox custom-control-inline ml-3">
<input type="checkbox" class="custom-control-input" id="use_i" name="use_i" value="1" <?php echo $d[$module]['use_i']?' checked':'' ?><?php echo !$d[$module]['key_i']&&!$d[$module]['secret_i']?' disabled':'' ?>>
<label class="custom-control-label" for="use_i">사용함</label>
</div>
</div><!-- /.d-flex -->
<hr>
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right pt-3">Client ID</label>
<div class="col-lg-10 col-xl-9">
<input class="form-control form-control-lg" type="text" name="key_i" value="<?php echo $d[$module]['key_i']?>">
</div>
</div><!-- /.form-group -->
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right pt-3">Client Secret</label>
<div class="col-lg-10 col-xl-9">
<input class="form-control form-control-lg" type="text" name="secret_i" value="<?php echo $d[$module]['secret_i']?>">
</div>
</div><!-- /.form-group -->
<div class="card mt-5">
<div class="card-header d-flex justify-content-between">
APP 등록
</div>
<div class="card-body">
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right">클라이언트 관리</label>
<div class="col-lg-10 col-xl-9 pt-2">
<a href="https://www.instagram.com/developer/clients/manage" target="_blank">https://www.instagram.com/developer/clients/manage</a>
</div>
</div><!-- /.form-group -->
<div class="form-group row">
<label class="col-lg-2 col-form-label text-lg-right">Redirect URIs</label>
<div class="col-lg-10 col-xl-9">
<div class="input-group">
<input type="text" class="form-control" value="<?php echo $g['url_root'].'/'.$r.'/oauth/instagram'?>" readonly id="url_i">
<div class="input-group-append">
<button class="btn btn-light js-clipboard" type="button" data-tooltip="tooltip" title="클립보드에 복사" data-clipboard-target="#url_i">
<i class="fa fa-clipboard"></i>
</button>
</div>
</div>
<small class="form-text text-muted"><span class="badge badge-pill badge-dark">참고</span> <?php echo $g['s'].'/?r='.$r.'&m='.$module.'&a=connect&connectReturn=instagram'?></small>
</div>
</div><!-- /.form-group -->
<hr>
<div class="f12 text-muted">
SNS 로그인을 위해서는 각각의 SNS의 APP등록을 하셔야 합니다.<br />
APP 등록을 하면 API키와 같은 특정 인증키를 받게되며 그 값을 등록해 주시면 됩니다.<br />
인증키를 등록한 후에는 반드시 각 SNS APP등록페이지에서 콜백주소 및 기타 설정을 해 주세요.<br>
(앱 설정페이지에서 인증된 도메인이 아닐 경우 대부분 사용이 제한됩니다.)<br>
<strong>이 모듈은 서버에 PHP CURL 모듈이 설치되어 있어야 사용가능합니다.</strong><br>
<hr>
자세한 내용은 <a href="https://docs.google.com/document/d/1nwAGoDiWkhyXGwuZ_hPpiY9UkkFwOPBg9app7wL3n3w/edit?usp=sharing" target="_blank">인스타그램 연결 도움말</a>을 참고해주세요
</div>
</div>
</div><!-- /.card -->
</div><!-- /#pane_instagram -->
<hr>
<button type="submit" class="btn btn-outline-primary btn-block btn-lg">
저장하기
</button>
</div><!-- /.card-body -->
</form>
</div>
</div><!-- /.row -->
<script type="text/javascript">
//<![CDATA[
putCookieAlert('connect_config_result') // 실행결과 알림 메시지
//사이트 셀렉터 출력
$('[data-role="siteSelector"]').removeClass('d-none')
//]]>
</script>

View File

@@ -0,0 +1,3 @@
<?php
$d['amenu']['main'] = '연결설정';
?>

1
modules/connect/name.txt Normal file
View File

@@ -0,0 +1 @@
연결

View File

@@ -0,0 +1,18 @@
<?php
$d['connect']['key_n'] = "";
$d['connect']['secret_n'] = "";
$d['connect']['use_n'] = "";
$d['connect']['key_k'] = "";
$d['connect']['secret_k'] = "";
$d['connect']['use_k'] = "";
$d['connect']['key_g'] = "";
$d['connect']['secret_g'] = "";
$d['connect']['use_g'] = "";
$d['connect']['key_f'] = "";
$d['connect']['secret_f'] = "";
$d['connect']['use_f'] = "";
$d['connect']['key_i'] = "";
$d['connect']['secret_i'] = "";
$d['connect']['use_i'] = "";
$d['connect']['jskey_k'] = "";
?>