138 行
4.3 KiB
PHP
138 行
4.3 KiB
PHP
<?php
|
|
error_reporting(0);
|
|
ini_set('display_errors', 0);
|
|
|
|
require_once __DIR__ . \DIRECTORY_SEPARATOR . 'loadRequires.php';
|
|
require_once __DIR__ . \DIRECTORY_SEPARATOR . 'template.php';
|
|
|
|
use MediaWiki\OAuthClient\Client;
|
|
use MediaWiki\OAuthClient\ClientConfig;
|
|
use MediaWiki\OAuthClient\Consumer;
|
|
use MediaWiki\OAuthClient\Token;
|
|
|
|
if (!isset($_GET['oauth_verifier'])) {
|
|
$pageContent = <<<EOF
|
|
<p>本页面仅应该被求闻百科调用。</p>
|
|
<p><a href="/index.php">重新开始实名认证</a></p>
|
|
EOF;
|
|
pageTemplate('错误', $pageContent);
|
|
exit(1);
|
|
}
|
|
|
|
$conf = new ClientConfig($rnrsOAuthUrl);
|
|
$conf->setConsumer(new Consumer($rnrsConsumerKey, $rnrsConsumerSecret));
|
|
$conf->setUserAgent('Qiuwen/1.1 (MediaWikiOAuthClient/1.0; RNRS/1.0)');
|
|
$client = new Client($conf);
|
|
|
|
// 根据Session存储的RK,重新创建Token对象
|
|
session_start();
|
|
$requestToken = new Token($_SESSION['request_key'], $_SESSION['request_secret']);
|
|
|
|
// 获取AK
|
|
$accessToken = $client->complete($requestToken, $_GET['oauth_verifier']);
|
|
$_SESSION['access_key'] = $accessToken->key;
|
|
$_SESSION['access_secret'] = $accessToken->secret;
|
|
|
|
// 销毁RK
|
|
unset($_SESSION['request_key'], $_SESSION['request_secret']);
|
|
|
|
// 使用AK获取对应用户的信息。我们只需要ID、用户名等信息
|
|
$ident = $client->identify($accessToken);
|
|
$_SESSION['qwUserId'] = $ident->sub;
|
|
$_SESSION['qwUserName'] = $ident->username;
|
|
|
|
// 我们不再需要证明你是你了。
|
|
unset($ident, $client);
|
|
|
|
// 连接数据库
|
|
$dsn = "$rnrsDatabaseType:host=$rnrsDatabaseServer;dbname=$rnrsDatabaseName";
|
|
try {
|
|
$dbconn = new PDO($dsn, $rnrsDatabaseUser, $rnrsDatabasePass);
|
|
} catch (PDOException $e) {
|
|
echo "打开数据库错误:" . $e->getMessage();
|
|
}
|
|
$dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
|
|
// 创建实名信息数据表
|
|
try {
|
|
$sql = "CREATE TABLE IF NOT EXISTS `rnrs_users` (
|
|
`rnrsu_userid` INT(10) UNSIGNED NOT NULL,
|
|
`rnrsu_username` VARBINARY(255) UNIQUE NOT NULL,
|
|
`rnrsu_mobile_idd` int(4) NOT NULL,
|
|
`rnrsu_mobile` BINARY(20) NOT NULL,
|
|
`rnrsu_bot` TINYINT UNSIGNED NOT NULL,
|
|
`rnrsu_bot_parent` INT(10) UNSIGNED,
|
|
`rnrsu_confirm_time` BIGINT UNSIGNED NOT NULL,
|
|
`rnrsu_hash` TINYBLOB NOT NULL,
|
|
PRIMARY KEY (`rnrsu_userid`),
|
|
KEY `rnrsu_bot_parent`(`rnrsu_bot_parent`)
|
|
) ENGINE=INNODB DEFAULT CHARSET=binary;";
|
|
$dbconn->exec($sql);
|
|
} catch (PDOException $e) {
|
|
echo "创建数据表时错误:" . $e->getMessage();
|
|
}
|
|
|
|
// 创建实名日志数据表
|
|
try {
|
|
$sql = "CREATE TABLE IF NOT EXISTS `rnrs_log` (
|
|
`rnrsl_logid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`rnrsl_userid` INT(10) UNSIGNED NOT NULL,
|
|
`rnrsl_username` VARBINARY(255) NOT NULL,
|
|
`rnrsl_mobile_idd` int(4) NOT NULL,
|
|
`rnrsl_mobile` BINARY(20) NOT NULL,
|
|
`rnrsl_bot` TINYINT UNSIGNED NOT NULL,
|
|
`rnrsl_bot_parent` INT(10) UNSIGNED,
|
|
`rnrsl_confirm_time` BIGINT UNSIGNED NOT NULL,
|
|
`rnrsl_hash` TINYBLOB NOT NULL,
|
|
PRIMARY KEY (`rnrsl_logid`),
|
|
KEY `rnrsl_bot_parent`(`rnrsl_bot_parent`)
|
|
) ENGINE=INNODB DEFAULT CHARSET=binary;";
|
|
$dbconn->exec($sql);
|
|
} catch (PDOException $e) {
|
|
echo "创建数据表时错误:" . $e->getMessage();
|
|
}
|
|
|
|
// 试图获取用户既有实名信息
|
|
$qwUserId = $_SESSION['qwUserId'];
|
|
$qwUserName = $_SESSION['qwUserName'];
|
|
try {
|
|
$sql = "SELECT * FROM `rnrs_users` WHERE `rnrsu_userid` = $qwUserId;";
|
|
$result = $dbconn->query($sql);
|
|
$rows = $result->rowCount();
|
|
if ($rows == 0) {
|
|
$isNewRNR = 1;
|
|
} else {
|
|
$isNewRNR = 0;
|
|
$rowall = $result->fetchAll();
|
|
}
|
|
} catch (PDOException $e) {
|
|
echo "获取实名信息时错误:" . $e->getMessage();
|
|
}
|
|
|
|
if ($isNewRNR) {
|
|
$dbconn = null;
|
|
refreshPage('/reg.php');
|
|
} else {
|
|
foreach ($rowall as $row) {
|
|
$qwdbUserName = $row['rnrsu_username'];
|
|
$_SESSION['qwUserMobile'] = rtrim($row['rnrsu_mobile']);
|
|
$_SESSION['qwPhoneNumberIdd'] = rtrim($row['rnrsu_mobile_idd']) ?? '86';
|
|
$_SESSION['qwUserConfirmTime'] = rtrim($row['rnrsu_confirm_time']);
|
|
$_SESSION['qwUserHash'] = rtrim($row['rnrsu_hash']);
|
|
}
|
|
|
|
$_SESSION['qwUserInfoStatus'] = 0;
|
|
if ($qwUserName != $qwdbUserName) {
|
|
try {
|
|
$sql = "UPDATE `rnrs_users` SET `rnrsu_username`='$qwUserName' WHERE `rnrsu_userid`=$qwUserId";
|
|
$tempint = $dbconn->exec($sql);
|
|
} catch (PDOException $e) {
|
|
echo "同步用户名信息时错误:" . $e->getMessage();
|
|
}
|
|
$_SESSION['qwUserInfoStatus'] += 4;
|
|
}
|
|
|
|
$dbconn = null;
|
|
refreshPage('/verify.php');
|
|
}
|