jenkins-bot has submitted this change and it was merged.

Change subject: Migrate (un)block logging to new system
......................................................................


Migrate (un)block logging to new system

Also
* Fix a bug where action-reverts doesn't work for anons
since the userid is always 0 for them, instead use the username.
* Start adding block log flags consistently with core

Bug: T124789
Change-Id: Ic6680dad891e2169b392fcfefc1e313af85bc92f
---
M AbuseFilter.class.php
M Views/AbuseFilterViewRevert.php
2 files changed, 78 insertions(+), 73 deletions(-)

Approvals:
  Alex Monk: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/AbuseFilter.class.php b/AbuseFilter.class.php
index b2db560..7fd453a 100755
--- a/AbuseFilter.class.php
+++ b/AbuseFilter.class.php
@@ -1193,23 +1193,7 @@
                                break;
 
                        case 'block':
-                               global $wgUser, $wgAbuseFilterBlockDuration, 
$wgAbuseFilterAnonBlockDuration;
-                               $filterUser = AbuseFilter::getFilterUser();
-
-                               // Create a block.
-                               $block = new Block;
-                               $block->setTarget( $wgUser->getName() );
-                               $block->setBlocker( $filterUser );
-                               $block->mReason = wfMessage(
-                                       'abusefilter-blockreason',
-                                       $rule_desc,
-                                       $rule_number
-                               )->inContentLanguage()->text();
-                               $block->isHardblock( false );
-                               $block->isAutoblocking( true );
-                               $block->prevents( 'createaccount', true );
-                               $block->prevents( 'editownusertalk', false );
-
+                               global $wgAbuseFilterBlockDuration, 
$wgAbuseFilterAnonBlockDuration, $wgUser;
                                if ( $wgUser->isAnon() && 
$wgAbuseFilterAnonBlockDuration !== null ) {
                                        // The user isn't logged in and the 
anon block duration
                                        // doesn't default to 
$wgAbuseFilterBlockDuration.
@@ -1218,25 +1202,16 @@
                                        $expiry = $wgAbuseFilterBlockDuration;
                                }
 
-                               $block->mExpiry = 
SpecialBlock::parseExpiryInput( $expiry );
-                               if ( $block->insert() ) {
-                                       // Log it if successful
-                                       # Prepare log parameters
-                                       $logParams = array();
-                                       if ( $block->mExpiry == 'infinity' ) {
-                                               $logParams[] = 'indefinite';
-                                       } else {
-                                               $logParams[] = $expiry;
-                                       }
-                                       $logParams[] = 'nocreate';
+                               self::doAbuseFilterBlock(
+                                       array(
+                                               'desc' => $rule_desc,
+                                               'number' => $rule_number
+                                       ),
+                                       $wgUser->getName(),
+                                       $expiry,
+                                       true
+                               );
 
-                                       $log = new LogPage( 'block' );
-                                       $log->addEntry( 'block',
-                                               Title::makeTitle( NS_USER, 
$wgUser->getName() ),
-                                               wfMessage( 
'abusefilter-blockreason', $rule_desc, $rule_number 
)->inContentLanguage()->text(),
-                                               $logParams, 
self::getFilterUser()
-                                       );
-                               }
                                $message = array(
                                        'abusefilter-blocked-display',
                                        $rule_desc,
@@ -1244,37 +1219,16 @@
                                );
                                break;
                        case 'rangeblock':
-                               $filterUser = AbuseFilter::getFilterUser();
+                               self::doAbuseFilterBlock(
+                                       array(
+                                               'desc' => $rule_desc,
+                                               'number' => $rule_number
+                                       ),
+                                       IP::sanitizeRange( $wgRequest->getIP() 
. '/16' ),
+                                       '1 week',
+                                       false
+                               );
 
-                               $range = IP::sanitizeRange( $wgRequest->getIP() 
. '/16' );
-
-                               // Create a block.
-                               $block = new Block;
-                               $block->setTarget( $range );
-                               $block->setBlocker( $filterUser );
-                               $block->mReason = wfMessage(
-                                       'abusefilter-blockreason',
-                                       $rule_desc,
-                                       $rule_number
-                               )->inContentLanguage()->text();
-                               $block->isHardblock( false );
-                               $block->prevents( 'createaccount', true );
-                               $block->prevents( 'editownusertalk', false );
-                               $block->mExpiry = 
SpecialBlock::parseExpiryInput( '1 week' );
-
-                               if ( $block->insert() ) {
-                                       // Log it if the block was successful
-                                       # Prepare log parameters
-                                       $logParams = array();
-                                       $logParams[] = 'indefinite';
-                                       $logParams[] = 'nocreate';
-
-                                       $log = new LogPage( 'block' );
-                                       $log->addEntry( 'block', 
Title::makeTitle( NS_USER, $range ),
-                                               wfMessage( 
'abusefilter-blockreason', $rule_desc, $rule_number 
)->inContentLanguage()->text(),
-                                               $logParams, 
self::getFilterUser()
-                                       );
-                               }
                                $message = array(
                                        'abusefilter-blocked-display',
                                        $rule_desc,
@@ -1385,6 +1339,56 @@
        }
 
        /**
+        * Perform a block by the AbuseFilter system user
+        * @param array $rule should have 'desc' and 'number'
+        * @param string $target
+        * @param string $expiry
+        * @param bool $isAutoBlock
+        */
+       protected static function doAbuseFilterBlock( array $rule, $target, 
$expiry, $isAutoBlock ) {
+               $filterUser = AbuseFilter::getFilterUser();
+               $reason = wfMessage(
+                       'abusefilter-blockreason',
+                       $rule['desc'], $rule['number']
+               )->inContentLanguage()->text();
+
+               $block = new Block();
+               $block->setTarget( $target );
+               $block->setBlocker( $filterUser );
+               $block->mReason = $reason;
+               $block->isHardblock( false );
+               $block->isAutoblocking( $isAutoBlock );
+               $block->prevents( 'createaccount', true );
+               $block->prevents( 'editownusertalk', false );
+               $block->mExpiry = SpecialBlock::parseExpiryInput( $expiry );
+
+               $success = $block->insert();
+
+               if ( $success ) {
+                       // Log it only if the block was successful
+                       $logParams = array();
+                       $logParams['5::duration'] = ( $block->mExpiry === 
'infinity' )
+                               ? 'indefinite'
+                               : $expiry;
+                       $flags = array( 'anononly' , 'nocreate' );
+                       if ( !$block->isAutoblocking() && !IP::isIPAddress( 
$target ) ) {
+                               // Conditionally added same as SpecialBlock
+                               $flags[] = 'noautoblock';
+                       }
+                       $logParams['6::flags'] = implode( ',', $flags );
+
+                       $logEntry = new ManualLogEntry( 'block', 'block' );
+                       $logEntry->setTarget( Title::makeTitle( NS_USER, 
$target ) );
+                       $logEntry->setComment( $reason );
+                       $logEntry->setPerformer( $filterUser );
+                       $logEntry->setParameters( $logParams );
+                       $blockIds = array_merge( array( $success['id'] ), 
$success['autoIds'] );
+                       $logEntry->setRelations( array( 'ipb_id' => $blockIds ) 
);
+                       $logEntry->publish( $logEntry->insert() );
+               }
+       }
+
+       /**
         * @param $throttleId
         * @param $types
         * @param $title
diff --git a/Views/AbuseFilterViewRevert.php b/Views/AbuseFilterViewRevert.php
index b360e90..4e39998 100755
--- a/Views/AbuseFilterViewRevert.php
+++ b/Views/AbuseFilterViewRevert.php
@@ -193,20 +193,21 @@
        function revertAction( $action, $result ) {
                switch ( $action ) {
                        case 'block':
-                               $block = Block::newFromTarget( User::whoIs( 
$result['userid'] ) );
-                               if ( !$block || $block->getBy() != 
AbuseFilter::getFilterUser()->getId() ) {
-                                       return false; // Not blocked by abuse 
filter.
+                               $block = Block::newFromTarget( $result['user'] 
);
+                               if ( !( $block && $block->getBy() == 
AbuseFilter::getFilterUser()->getId() ) ) {
+                                       // Not blocked by abuse filter
+                                       return false;
                                }
-
                                $block->delete();
-                               $log = new LogPage( 'block' );
-                               $log->addEntry(
-                                       'unblock',
-                                       Title::makeTitle( NS_USER, 
$result['user'] ),
+                               $logEntry = new ManualLogEntry( 'block', 
'unblock' );
+                               $logEntry->setTarget( Title::makeTitle( 
NS_USER, $result['user'] ) );
+                               $logEntry->setComment(
                                        $this->msg(
                                                'abusefilter-revert-reason', 
$this->mPage->mFilter, $this->mReason
                                        )->inContentLanguage()->text()
                                );
+                               $logEntry->setPerformer( $this->getUser() );
+                               $logEntry->publish( $logEntry->insert() );
                                return true;
                        case 'blockautopromote':
                                ObjectCache::getMainStashInstance()->delete(

-- 
To view, visit https://gerrit.wikimedia.org/r/277286
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ic6680dad891e2169b392fcfefc1e313af85bc92f
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/AbuseFilter
Gerrit-Branch: master
Gerrit-Owner: Glaisher <glaisher.w...@gmail.com>
Gerrit-Reviewer: Alex Monk <kren...@gmail.com>
Gerrit-Reviewer: Glaisher <glaisher.w...@gmail.com>
Gerrit-Reviewer: Jackmcbarn <jackmcb...@gmail.com>
Gerrit-Reviewer: Se4598 <se4...@gmx.de>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to