| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- <?php
- const IN_API = true;
- const IN_RESTFUL = true;
- const IN_MOBILE_API = true;
- if(!empty($_POST['debug'])) {
- define('IN_RESTFUL_DEBUG', true);
- }
- require_once 'class_restful.php';
- $_ENV['restful'] = new _dzRestful($_POST);
- [$api, $ver] = $_ENV['restful']->parseQuery();
- if($api[0] == 'token') {
- $_COOKIE = [];
- require_once '../../source/class/class_core.php';
- $discuz = C::app();
- $discuz->init_cron = false;
- $discuz->init_session = false;
- $discuz->init();
- //检测 appid 的有效性
- $_ENV['restful']->checkSign();
- //生成 token
- $token = strtoupper(random(16));
- $tokenData = $_ENV['restful']->isRefreshToken() ?
- $_ENV['restful']->refreshTokenData() :
- $_ENV['restful']->newTokenData();
- $_ENV['restful']->setToken($token, $tokenData);
- if($_ENV['restful']->isRefreshToken()) {
- $_ENV['restful']->delTokenData();
- }
- $_ENV['restful']->output([
- 'ret' => 0,
- 'token' => $token,
- 'expires_in' => TIMESTAMP + $_ENV['restful']::TokenTTL,
- ]);
- } elseif($api[0] == 'callback') {
- $_ENV['authtoken'] = $api[1];
- $_ENV['returntype'] = !empty($api[2]) ? $api[2] : '';
- require_once '../../source/class/class_core.php';
- $discuz = C::app();
- $discuz->init_cron = false;
- $discuz->init_session = false;
- $discuz->init();
- if(!$_G['uid']) {
- $authed = false;
- } else {
- $authed = $_ENV['restful']->setAuthToken($_ENV['authtoken'], [$_G['uid'], time()]);
- }
- if($authed) {
- require_once libfile('function/member');
- clearcookies();
- }
- if($_ENV['returntype'] == 'json') {
- if($authed) {
- $_ENV['restful']->error(0);
- } else {
- $_ENV['restful']->error(-119);
- }
- } elseif($_ENV['returntype'] == 'html') {
- $message = $authed ? lang('core', 'restful_auth_success') : lang('core', 'restful_auth_error');
- include template('common/header_common');
- include template('common/restful_auth');
- } else {
- if($authed) {
- echo lang('core', 'restful_auth_success');
- } else {
- echo lang('core', 'restful_auth_error');
- }
- }
- } elseif($api[0] == 'authtoken') {
- require_once '../../source/class/class_core.php';
- $discuz = C::app();
- $discuz->init_cron = false;
- $discuz->init_session = false;
- $discuz->init();
- $data = $_ENV['restful']->getAuthToken($_GET['authtoken']);
- if(!$data) {
- $_ENV['restful']->error(-119);
- } else {
- // token校验
- $_ENV['restful']->checkToken();
- require_once libfile('function/member');
- $member = getuserbyuid($data[0]);
- if(!$member) {
- $_ENV['restful']->error(-119);
- }
- setloginstatus($member, 2592000);
- $_ENV['restful']->convertOutput(['member/uid' => 'uid']);
- }
- } elseif($api[0] == 'deltoken') {
- $_ENV['restful']->delTokenData();
- $_ENV['restful']->output([
- 'ret' => 0,
- 'token' => '',
- 'data' => [
- 'msg' => 'ok'
- ]
- ]);
- } else {
- define('IN_RESTFUL_API', true);
- //检测 appid 的有效性
- $_ENV['restful']->checkSign();
- // token校验
- $_ENV['restful']->checkToken();
- // 初始化接口参数
- $_ENV['restful']->initParam($api, $ver);
- // 接口频率控制
- $_ENV['restful']->apiFreqCheck();
- // 接口权限校验
- $_ENV['restful']->apiPermCheck();
- // script校验
- $script = $_ENV['restful']->scriptCheck();
- // 释放 GPC
- $_GET = $_ENV['restful']->paramDecode('get');
- $_POST = $_ENV['restful']->paramDecode('post');
- $_COOKIE = $_ENV['restful']->sessionDecode();
- $requestParams = $_ENV['restful']->getRequestParam();
- if($requestParams) {
- if(!empty($requestParams['GET']) && is_array($requestParams['GET'])) {
- foreach($requestParams['GET'] as $k => $v) {
- $_GET[$k] = $v;
- }
- }
- if(!empty($_GET)) {
- $_SERVER['QUERY_STRING'] = http_build_query($_GET);
- }
- if(!empty($requestParams['POST']) && is_array($requestParams['POST'])) {
- foreach($requestParams['POST'] as $k => $v) {
- $_POST[$k] = $v;
- }
- }
- if(!empty($requestParams['COOKIE']) && is_array($requestParams['COOKIE'])) {
- foreach($requestParams['COOKIE'] as $k => $v) {
- $_COOKIE[$k] = $v;
- }
- }
- }
- foreach($_COOKIE as $k => $v) {
- !empty($v) && setcookie($k, $v);
- }
- if(!defined('IN_RESTFUL_DEBUG')) {
- // 准备输出
- [$shutdownFunc, $output] = $_ENV['restful']->getShutdownFunc();
- // 运行 script
- register_shutdown_function([$_ENV['restful'], $shutdownFunc], $output);
- }
- $empty = [];
- $_ENV['restful']->plugin('before', $empty);
- try {
- $_GET['index'] = $script;
- chdir('../../');
- require './index.php';
- } catch (Exception $e) {
- $_ENV['restful']->error(-100);
- }
- }
|