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:
Kunal Mehta 2013-09-07 21:24:56 -07:00
parent 394e78b8fd
commit 6863a39ed9
3 changed files with 39 additions and 4 deletions

View file

@ -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 );

View file

@ -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'
);
}
}

View file

@ -2,3 +2,4 @@
.*[Ff]ail.*
.*[Nn]yancat.* <errmsg=blacklisted-nyancat>
.*evil_acc.* <newaccountonly>
AW{1,10} <antispoof>