2024-08-31 01:03:37 +08:00

129 lines
3.9 KiB
PHP
Executable File

<?php
class oauthPlugin extends PluginBase{
function __construct(){
parent::__construct();
}
public function regist(){
$this->hookRegist(array(
'user.commonJs.insert' => 'oauthPlugin.echoJs',
'user.view.options.after' => 'oauthPlugin.updateOption',
'admin.setting.set.before' => 'oauthPlugin.adminSetBefore',
'user.bind.withApp' => 'oauthPlugin.bindHook', // app登录绑定
'user.bind.bind.before' => 'oauthPlugin.bindHook',
'user.bind.unbind.before' => 'oauthPlugin.bindHook',
'user.bind.bindmetainfo.before' => 'oauthPlugin.bindHook',
'user.bind.log' => 'oauthPlugin.logAdd',
'admin.log.typelist.after' => 'oauthPlugin.logType',
'admin.log.get.after' => 'oauthPlugin.logList',
));
}
public function echoJs(){
$this->echoFile('static/main.js');
}
/**
* 第三方登录项重置
* @param [type] $options
* @return void
*/
public function updateOption($options) {
$regist = Model('SystemOption')->get('regist');
if (isset($regist['loginWith'])) { // 只有定制插件默认安装时后台存在该参数(空),不存在时从插件配置中获取(安装时自动保存默认配置)
$loginWith = _get($regist,'loginWith',array());
} else {
$config = $this->getConfig();
$loginWith = explode(',', _get($config, 'loginWith', ''));
}
// $config = $this->getConfig();
// // 插件配置中该参数是在后台保存时添加,如果不存在,从后台原数据中获取
// if (!isset($config['loginWith'])) {
// $regist = Model('SystemOption')->get('regist');
// if (!isset($regist['loginWith'])) {
// $loginWith = array('qq', 'weixin'); // 全新安装不含此参数,则赋默认值
// } else {
// $loginWith = _get($regist,'loginWith',array());
// }
// $this->setConfig(array('loginWith' => implode(',', $loginWith)));
// } else {
// $loginWith = explode(',', _get($config, 'loginWith', ''));
// }
$options['system']['options']['loginConfig']['loginWith'] = array_filter($loginWith);
return $options;
}
/**
* 后台第三方登录设置
* @return void
*/
public function adminSetBefore(){
if(!Action('user.authRole')->authCan('admin.setting.set')){
show_json(LNG('explorer.noPermissionAction'),false);
}
$data = json_decode($this->in['data'], true);
$loginWith = $data['loginWith'];
unset($data['loginWith']);
$this->in['data'] = json_encode($data);
// 登录项保存至插件配置
$this->setConfig(array('loginWith' => $loginWith));
}
public function action($act = 'bind'){
return Action($this->pluginName . 'Plugin.'.$act.'.index');
}
/**
* 绑定相关操作请求
* @return void
*/
public function bind() {
$method = Input::get('method', 'require');
$action = $this->action();
if (!method_exists($action, $method)) {
show_json(LNG('common.invalidParam').'[method]', false);
}
return $action->$method();
}
/**
* 兼容app相关调用
* @param array $data
* @return void
*/
public function bindHook($data=array()){
$act = strtolower(ACT);
$actions = array(
'bind' => 'bind',
'unbind' => 'unbind',
'bindmetainfo' => 'bindInfo',
);
if (isset($actions[$act])) {
$this->in['method'] = $actions[$act];
return $this->bind();
}
// app绑定第三方账号
if (isset($this->in['third']) && !empty($data)) {
$this->in['method'] = 'bindWithApp';
return $this->action()->bindWithApp($data);
}
show_json(LNG('common.illegalRequest'), false);
}
/**
* 认证回调地址
* @return void
*/
public function callback(){
$this->display($this->pluginPath.'/static/oauth/index.html');
}
// 日志相关
public function logAdd($action, $data = array()) {
return $this->action('log')->logAdd($action, $data);
}
public function logType($data = array()){
return $this->action('log')->logType($data);
}
public function logList($data = array()){
return $this->action('log')->logList($data);
}
}