mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter.git
synced 2024-12-12 14:15:16 +00:00
cbea88f818
Unfortunately, this isn't using DI completely, because of the User::newSystemUser call. I'm not even sure if we really need to call it or we can just stick to new UserIdentityValue, but leaving like this for now. Also, the types were weakened to UserIdentity, so the transition is going to be easy anyway. Change-Id: I08f8fae0fcc622ff0ac3f86771476d06d1c18549
68 lines
2.1 KiB
PHP
68 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Extension\AbuseFilter;
|
|
|
|
use MediaWiki\User\UserGroupManager;
|
|
use MediaWiki\User\UserIdentity;
|
|
use MessageLocalizer;
|
|
use Psr\Log\LoggerInterface;
|
|
use User;
|
|
|
|
class FilterUser {
|
|
public const SERVICE_NAME = 'AbuseFilterFilterUser';
|
|
|
|
/** @var MessageLocalizer */
|
|
private $messageLocalizer;
|
|
/** @var UserGroupManager */
|
|
private $userGroupManager;
|
|
/** @var LoggerInterface */
|
|
private $logger;
|
|
|
|
/**
|
|
* @param MessageLocalizer $messageLocalizer
|
|
* @param UserGroupManager $userGroupManager
|
|
* @param LoggerInterface $logger
|
|
*/
|
|
public function __construct(
|
|
MessageLocalizer $messageLocalizer,
|
|
UserGroupManager $userGroupManager,
|
|
LoggerInterface $logger
|
|
) {
|
|
$this->messageLocalizer = $messageLocalizer;
|
|
$this->userGroupManager = $userGroupManager;
|
|
$this->logger = $logger;
|
|
}
|
|
|
|
/**
|
|
* @todo Core should provide an alternative way to create system users, possibly returning just UserIdentity.
|
|
* Or can we just use `new UserIdentityValue` here?
|
|
* @return UserIdentity
|
|
*/
|
|
public function getUser() : UserIdentity {
|
|
$username = $this->messageLocalizer->msg( 'abusefilter-blocker' )->inContentLanguage()->text();
|
|
$user = User::newSystemUser( $username, [ 'steal' => true ] );
|
|
|
|
if ( !$user ) {
|
|
// User name is invalid. Don't throw because this is a system message, easy
|
|
// to change and make wrong either by mistake or intentionally to break the site.
|
|
$this->logger->warning(
|
|
'The AbuseFilter user\'s name is invalid. Please change it in ' .
|
|
'MediaWiki:abusefilter-blocker'
|
|
);
|
|
// Use the default name to avoid breaking other stuff. This should have no harm,
|
|
// aside from blocks temporarily attributed to another user.
|
|
$defaultName = $this->messageLocalizer->msg( 'abusefilter-blocker' )->inLanguage( 'en' )->text();
|
|
$user = User::newSystemUser( $defaultName, [ 'steal' => true ] );
|
|
}
|
|
'@phan-var User $user';
|
|
|
|
// Promote user to 'sysop' so it doesn't look
|
|
// like an unprivileged account is blocking users
|
|
if ( !in_array( 'sysop', $this->userGroupManager->getUserGroups( $user ) ) ) {
|
|
$this->userGroupManager->addUserToGroup( $user, 'sysop' );
|
|
}
|
|
|
|
return $user;
|
|
}
|
|
}
|