mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/TitleBlacklist
synced 2024-11-23 21:53:40 +00:00
Optionally integrate with AntiSpoof
Introduces a new "antispoof" parameter. If set, try to normalize the title using the AntiSpoof extension. Bug: 53901 Change-Id: I9b3c5f5f5d9eeda65562fd83e21c9c2ba97e5569
This commit is contained in:
parent
394e78b8fd
commit
6863a39ed9
|
@ -175,7 +175,7 @@ class TitleBlacklist {
|
|||
}
|
||||
$blacklist = $this->getBlacklist();
|
||||
foreach ( $blacklist as $item ) {
|
||||
if ( $item->matches( $title, $action ) ) {
|
||||
if ( $item->matches( $title->getFullText(), $action ) ) {
|
||||
if ( $this->isWhitelisted( $title, $action ) ) {
|
||||
return false;
|
||||
}
|
||||
|
@ -199,7 +199,7 @@ class TitleBlacklist {
|
|||
}
|
||||
$whitelist = $this->getWhitelist();
|
||||
foreach ( $whitelist as $item ) {
|
||||
if ( $item->matches( $title, $action ) ) {
|
||||
if ( $item->matches( $title->getFullText(), $action ) ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -343,7 +343,7 @@ class TitleBlacklistEntry {
|
|||
* Check whether a user can perform the specified action
|
||||
* on the specified Title
|
||||
*
|
||||
* @param $title Title to check
|
||||
* @param $title string to check
|
||||
* @param $action %Action to check
|
||||
* @return bool TRUE if the the regex matches the title, and is not overridden
|
||||
* else false if it doesn't match (or was overridden)
|
||||
|
@ -357,8 +357,17 @@ class TitleBlacklistEntry {
|
|||
return false;
|
||||
}
|
||||
|
||||
if ( isset( $this->mParams['antispoof'] ) && is_callable( 'AntiSpoof::checkUnicodeString' ) ) {
|
||||
list( $ok, $norm ) = AntiSpoof::checkUnicodeString( $title );
|
||||
if ( $ok == "OK" ) {
|
||||
list( $ver, $title ) = explode( ':', $norm, 2 );
|
||||
} else {
|
||||
wfDebugLog( 'TitleBlacklist', 'AntiSpoof could not normalize "' . $title . '".' );
|
||||
}
|
||||
}
|
||||
|
||||
wfSuppressWarnings();
|
||||
$match = preg_match( "/^(?:{$this->mRegex})$/us" . ( isset( $this->mParams['casesensitive'] ) ? '' : 'i' ), $title->getFullText() );
|
||||
$match = preg_match( "/^(?:{$this->mRegex})$/us" . ( isset( $this->mParams['casesensitive'] ) ? '' : 'i' ), $title );
|
||||
wfRestoreWarnings();
|
||||
|
||||
global $wgUser;
|
||||
|
@ -427,6 +436,9 @@ class TitleBlacklistEntry {
|
|||
if ( preg_match( '/errmsg\s*=\s*(.+)/i', $opt, $matches ) ) {
|
||||
$options['errmsg'] = $matches[1];
|
||||
}
|
||||
if ( $opt2 == 'antispoof' ) {
|
||||
$options['antispoof'] = true;
|
||||
}
|
||||
}
|
||||
// Process magic words
|
||||
preg_match_all( '/{{\s*([a-z]+)\s*:\s*(.+?)\s*}}/', $regex, $magicwords, PREG_SET_ORDER );
|
||||
|
|
|
@ -105,6 +105,28 @@ class ApiQueryTitleBlacklistTest extends ApiTestCase {
|
|||
$listed[0]['titleblacklist']['line'],
|
||||
'Correct blacklist line is returned'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests integration with the AntiSpoof extension
|
||||
*/
|
||||
function testAntiSpoofIntegration() {
|
||||
if ( !class_exists( 'AntiSpoof') ) {
|
||||
$this->markTestSkipped( "This test requires the AntiSpoof extension" );
|
||||
}
|
||||
|
||||
$listed = $this->doApiRequest( array(
|
||||
'action' => 'titleblacklist',
|
||||
'tbtitle' => 'AVVVV',
|
||||
'tbaction' => 'create',
|
||||
'tbnooverride' => true,
|
||||
) );
|
||||
|
||||
$this->assertEquals(
|
||||
'blacklisted',
|
||||
$listed[0]['titleblacklist']['result'],
|
||||
'Spoofed title is blacklisted'
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,3 +2,4 @@
|
|||
.*[Ff]ail.*
|
||||
.*[Nn]yancat.* <errmsg=blacklisted-nyancat>
|
||||
.*evil_acc.* <newaccountonly>
|
||||
AW{1,10} <antispoof>
|
||||
|
|
Loading…
Reference in a new issue