父节点
9f7f68c854
当前提交
350eb81a41
|
@ -1,5 +1,5 @@
|
|||
# RNRSHook
|
||||
|
||||
本插件为MediaWiki后台提供一个按钮,指向已部署的[实名验证系统](https://git.qiuwen.wiki/Qiuwen/qiuwen-rnrs)。
|
||||
本插件为 MediaWiki 后台提供一个按钮,指向已部署的[实名验证系统](https://git.qiuwen.wiki/Qiuwen/qiuwen-rnrs)。
|
||||
|
||||
若要更换默认的实名验证系统URL,请修改界面文字 _MediaWiki:Rnrshook-url_。
|
||||
若要更换默认的实名验证系统 URL,请修改界面文字 _MediaWiki:Rnrshook-url_。
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
# 反馈安全问题
|
||||
|
||||
若您确信本插件存在安全问题,请将邮件发送至`adjcom at volunteers.qiuwen.org`,来信标题请附带“参数设置界面RNRS按钮插件安全报告”字样。
|
||||
若您确信本插件存在安全问题,请将邮件发送至`adjcom at volunteers.qiuwen.org`,来信标题请附带“参数设置界面 RNRS 按钮插件安全报告”字样。
|
||||
|
|
|
@ -1,40 +1,38 @@
|
|||
{
|
||||
"name": "RNRS Hook",
|
||||
"version": "1.0.0",
|
||||
"author": [
|
||||
"Ryan Lane",
|
||||
"Robert Vogel <vogel@hallowelt.com>",
|
||||
"Dejan Savuljesku <savuljesku@hallowelt.com>",
|
||||
"Andrew Garrett <andrew@epstone.net>",
|
||||
"Qiuwen Baike Contributors"
|
||||
],
|
||||
"url": "https://git.qiuwen.wiki/qiuwen/RNRSHook",
|
||||
"descriptionmsg": "rnrshook-desc",
|
||||
"type": "other",
|
||||
"requires": {
|
||||
"MediaWiki": ">= 1.37.0"
|
||||
},
|
||||
"license-name": "GPL-2.0-or-later AND GPL-3.0-or-later",
|
||||
"AutoloadNamespaces": {
|
||||
"MediaWiki\\Extension\\RNRSHook\\": "src/"
|
||||
},
|
||||
"Hooks": {
|
||||
"GetPreferences": "PreferencesHook",
|
||||
"AbuseFilterAlterVariables": "AbuseFilterHooks",
|
||||
"AbuseFilter-builder": "AbuseFilterHooks"
|
||||
},
|
||||
"HookHandlers": {
|
||||
"PreferencesHook": {
|
||||
"class": "\\MediaWiki\\Extension\\RNRSHook\\PreferencesHook"
|
||||
},
|
||||
"AbuseFilterHooks": {
|
||||
"class": "MediaWiki\\Extension\\RNRSHook\\AbuseFilterHooks"
|
||||
}
|
||||
},
|
||||
"MessagesDirs": {
|
||||
"RNRSHook": [
|
||||
"i18n"
|
||||
]
|
||||
},
|
||||
"manifest_version": 2
|
||||
}
|
||||
{
|
||||
"name": "RNRS Hook",
|
||||
"version": "1.0.0",
|
||||
"author": [
|
||||
"Ryan Lane",
|
||||
"Robert Vogel <vogel@hallowelt.com>",
|
||||
"Dejan Savuljesku <savuljesku@hallowelt.com>",
|
||||
"Andrew Garrett <andrew@epstone.net>",
|
||||
"Qiuwen Baike Contributors"
|
||||
],
|
||||
"url": "https://git.qiuwen.wiki/qiuwen/RNRSHook",
|
||||
"descriptionmsg": "rnrshook-desc",
|
||||
"type": "other",
|
||||
"requires": {
|
||||
"MediaWiki": ">= 1.37.0"
|
||||
},
|
||||
"license-name": "GPL-2.0-or-later AND GPL-3.0-or-later",
|
||||
"AutoloadNamespaces": {
|
||||
"MediaWiki\\Extension\\RNRSHook\\": "src/"
|
||||
},
|
||||
"Hooks": {
|
||||
"GetPreferences": "PreferencesHook",
|
||||
"AbuseFilterAlterVariables": "AbuseFilterHooks",
|
||||
"AbuseFilter-builder": "AbuseFilterHooks"
|
||||
},
|
||||
"HookHandlers": {
|
||||
"PreferencesHook": {
|
||||
"class": "\\MediaWiki\\Extension\\RNRSHook\\PreferencesHook"
|
||||
},
|
||||
"AbuseFilterHooks": {
|
||||
"class": "MediaWiki\\Extension\\RNRSHook\\AbuseFilterHooks"
|
||||
}
|
||||
},
|
||||
"MessagesDirs": {
|
||||
"RNRSHook": ["i18n"]
|
||||
},
|
||||
"manifest_version": 2
|
||||
}
|
||||
|
|
22
i18n/en.json
22
i18n/en.json
|
@ -1,12 +1,10 @@
|
|||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Qiuwen Baike Contributors"
|
||||
]
|
||||
},
|
||||
"rnrshook-desc": "Real-name registration interface.",
|
||||
"rnrshook-prefs-label": "Real-name registration: ",
|
||||
"rnrshook-ui-manage": "Verify/change your mobile phone number",
|
||||
"rnrshook-prefs-label-desc": "",
|
||||
"rnrshook-url": "https://rnrs.qiuwen.net.cn/"
|
||||
}
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": ["Qiuwen Baike Contributors"]
|
||||
},
|
||||
"rnrshook-desc": "Real-name registration interface.",
|
||||
"rnrshook-prefs-label": "Real-name registration: ",
|
||||
"rnrshook-ui-manage": "Verify/change your mobile phone number",
|
||||
"rnrshook-prefs-label-desc": "",
|
||||
"rnrshook-url": "https://rnrs.qiuwen.net.cn/"
|
||||
}
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Qiuwen Baike Contributors"
|
||||
]
|
||||
},
|
||||
"rnrshook-desc": "{{desc|name=RNRS Hook|url=https://git.qiuwen.wiki/qiuwen/RNRSHook}}",
|
||||
"rnrshook-prefs-label": "Real-name registration: ",
|
||||
"rnrshook-ui-manage": "Verify/change your mobile phone number",
|
||||
"rnrshook-prefs-label-desc": "",
|
||||
"rnrshook-url": "https://rnrs.qiuwen.net.cn/"
|
||||
}
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": ["Qiuwen Baike Contributors"]
|
||||
},
|
||||
"rnrshook-desc": "{{desc|name=RNRS Hook|url=https://git.qiuwen.wiki/qiuwen/RNRSHook}}",
|
||||
"rnrshook-prefs-label": "Real-name registration: ",
|
||||
"rnrshook-ui-manage": "Verify/change your mobile phone number",
|
||||
"rnrshook-prefs-label-desc": "",
|
||||
"rnrshook-url": "https://rnrs.qiuwen.net.cn/"
|
||||
}
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Qiuwen Baike Contributors"
|
||||
]
|
||||
},
|
||||
"rnrshook-desc": "实名制验证界面",
|
||||
"rnrshook-prefs-label": "实名制验证:",
|
||||
"rnrshook-ui-manage": "验证/更换手机号",
|
||||
"rnrshook-prefs-label-desc": "",
|
||||
"rnrshook-url": "https://rnrs.qiuwen.net.cn/"
|
||||
}
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": ["Qiuwen Baike Contributors"]
|
||||
},
|
||||
"rnrshook-desc": "实名制验证界面",
|
||||
"rnrshook-prefs-label": "实名制验证:",
|
||||
"rnrshook-ui-manage": "验证/更换手机号",
|
||||
"rnrshook-prefs-label-desc": "",
|
||||
"rnrshook-url": "https://rnrs.qiuwen.net.cn/"
|
||||
}
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Qiuwen Baike Contributors"
|
||||
]
|
||||
},
|
||||
"rnrshook-desc": "實名制認證介面",
|
||||
"rnrshook-prefs-label": "實名制認證:",
|
||||
"rnrshook-ui-manage": "認證/更換行動電話號碼",
|
||||
"rnrshook-prefs-label-desc": "",
|
||||
"rnrshook-url": "https://rnrs.qiuwen.net.cn/"
|
||||
}
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": ["Qiuwen Baike Contributors"]
|
||||
},
|
||||
"rnrshook-desc": "實名制認證介面",
|
||||
"rnrshook-prefs-label": "實名制認證:",
|
||||
"rnrshook-ui-manage": "認證/更換行動電話號碼",
|
||||
"rnrshook-prefs-label-desc": "",
|
||||
"rnrshook-url": "https://rnrs.qiuwen.net.cn/"
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
<?php
|
||||
|
||||
namespace MediaWiki\Extension\RNRSHook;
|
||||
|
||||
use MediaWiki\Extension\AbuseFilter\Hooks\AbuseFilterAlterVariablesHook;
|
||||
|
@ -9,18 +10,20 @@ use User;
|
|||
use RequestContext;
|
||||
use Wikimedia\IPUtils;
|
||||
|
||||
class AbuseFilterHooks implements AbuseFilterAlterVariablesHook, AbuseFilterBuilderHook {
|
||||
/**
|
||||
* Determine if a given IP is an internal server node
|
||||
*
|
||||
* @param string|null $ip The IP address to check, or null to use the request IP
|
||||
* @return bool True if an internal server node, false otherwise
|
||||
*/
|
||||
public static function isInternalNode( $ip = null ) {
|
||||
if ( $ip == null ) {
|
||||
$ip = RequestContext::getMain()->getRequest()->getIP();
|
||||
}
|
||||
|
||||
class AbuseFilterHooks implements AbuseFilterAlterVariablesHook, AbuseFilterBuilderHook
|
||||
{
|
||||
/**
|
||||
* Determine if a given IP is an internal server node
|
||||
*
|
||||
* @param string|null $ip The IP address to check, or null to use the request IP
|
||||
* @return bool True if an internal server node, false otherwise
|
||||
*/
|
||||
public static function isInternalNode($ip = null)
|
||||
{
|
||||
if ($ip == null) {
|
||||
$ip = RequestContext::getMain()->getRequest()->getIP();
|
||||
}
|
||||
|
||||
// IPv4 only
|
||||
$low_ip_1 = '172.20.0.0';
|
||||
$high_ip_1 = '172.20.0.255';
|
||||
|
@ -29,28 +32,29 @@ class AbuseFilterHooks implements AbuseFilterAlterVariablesHook, AbuseFilterBuil
|
|||
$low_ip_3 = '127.0.0.0';
|
||||
$high_ip_3 = '127.255.255.255';
|
||||
|
||||
$result = (
|
||||
version_compare ( $low_ip_1, IPUtils::sanitizeIP( $ip ) ) + version_compare( IPUtils::sanitizeIP( $ip ), $high_ip_1 ) === -2 ||
|
||||
version_compare ( $low_ip_2, IPUtils::sanitizeIP( $ip ) ) + version_compare( IPUtils::sanitizeIP( $ip ), $high_ip_2 ) === -2 ||
|
||||
version_compare ( $low_ip_3, IPUtils::sanitizeIP( $ip ) ) + version_compare( IPUtils::sanitizeIP( $ip ), $high_ip_3 ) === -2
|
||||
$result = (version_compare($low_ip_1, IPUtils::sanitizeIP($ip)) + version_compare(IPUtils::sanitizeIP($ip), $high_ip_1) === -2 ||
|
||||
version_compare($low_ip_2, IPUtils::sanitizeIP($ip)) + version_compare(IPUtils::sanitizeIP($ip), $high_ip_2) === -2 ||
|
||||
version_compare($low_ip_3, IPUtils::sanitizeIP($ip)) + version_compare(IPUtils::sanitizeIP($ip), $high_ip_3) === -2
|
||||
);
|
||||
|
||||
return (bool)$result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function onAbuseFilterAlterVariables( VariableHolder &$vars, Title $title, User $user ) {
|
||||
$vars->setVar( 'internal_node', self::isInternalNode() );
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function onAbuseFilterAlterVariables(VariableHolder &$vars, Title $title, User $user)
|
||||
{
|
||||
$vars->setVar('internal_node', self::isInternalNode());
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function onAbuseFilter_builder( array &$realValues ) {
|
||||
$realValues['vars']['internal_node'] = 'internal-node';
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function onAbuseFilter_builder(array &$realValues)
|
||||
{
|
||||
$realValues['vars']['internal_node'] = 'internal-node';
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,31 +7,33 @@ use OOUI\ButtonWidget;
|
|||
use OOUI\HorizontalLayout;
|
||||
use User;
|
||||
|
||||
class PreferencesHook implements GetPreferencesHook {
|
||||
/**
|
||||
* @param User $user
|
||||
* @param array &$preferences
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function onGetPreferences( $user, &$preferences ) {
|
||||
$manageButton = new ButtonWidget( [
|
||||
'href' => wfMessage( 'rnrshook-url' )->text(),
|
||||
'label' => wfMessage( 'rnrshook-ui-manage' )->text()
|
||||
] );
|
||||
class PreferencesHook implements GetPreferencesHook
|
||||
{
|
||||
/**
|
||||
* @param User $user
|
||||
* @param array &$preferences
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function onGetPreferences($user, &$preferences)
|
||||
{
|
||||
$manageButton = new ButtonWidget([
|
||||
'href' => wfMessage('rnrshook-url')->text(),
|
||||
'label' => wfMessage('rnrshook-ui-manage')->text()
|
||||
]);
|
||||
|
||||
$control = new HorizontalLayout( [
|
||||
'items' => [ $manageButton ]
|
||||
] );
|
||||
$control = new HorizontalLayout([
|
||||
'items' => [$manageButton]
|
||||
]);
|
||||
|
||||
$preferences['rnrshook-module'] = [
|
||||
'type' => 'info',
|
||||
'raw' => true,
|
||||
'default' => (string)$control,
|
||||
'label-message' => 'rnrshook-prefs-label',
|
||||
$preferences['rnrshook-module'] = [
|
||||
'type' => 'info',
|
||||
'raw' => true,
|
||||
'default' => (string)$control,
|
||||
'label-message' => 'rnrshook-prefs-label',
|
||||
'help-message' => 'rnrshook-prefs-label-desc',
|
||||
'section' => 'personal/info',
|
||||
];
|
||||
return true;
|
||||
}
|
||||
}
|
||||
'section' => 'personal/info',
|
||||
];
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
正在加载...
在新工单中引用