Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
96.97% |
32 / 33 |
|
50.00% |
1 / 2 |
CRAP | |
0.00% |
0 / 1 |
BlockingConsequence | |
96.97% |
32 / 33 |
|
50.00% |
1 / 2 |
5 | |
0.00% |
0 / 1 |
__construct | |
100.00% |
6 / 6 |
|
100.00% |
1 / 1 |
1 | |||
doBlockInternal | |
96.30% |
26 / 27 |
|
0.00% |
0 / 1 |
4 |
1 | <?php |
2 | |
3 | namespace MediaWiki\Extension\AbuseFilter\Consequences\Consequence; |
4 | |
5 | use MediaWiki\Block\BlockUserFactory; |
6 | use MediaWiki\Extension\AbuseFilter\Consequences\Parameters; |
7 | use MediaWiki\Extension\AbuseFilter\FilterUser; |
8 | use MediaWiki\Logging\LogPage; |
9 | use MediaWiki\Status\Status; |
10 | use MessageLocalizer; |
11 | use Psr\Log\LoggerInterface; |
12 | use Wikimedia\IPUtils; |
13 | |
14 | /** |
15 | * Base class for consequences that block a user |
16 | */ |
17 | abstract class BlockingConsequence extends Consequence implements HookAborterConsequence { |
18 | /** @var BlockUserFactory */ |
19 | private $blockUserFactory; |
20 | |
21 | /** @var FilterUser */ |
22 | protected $filterUser; |
23 | |
24 | /** @var MessageLocalizer */ |
25 | private $messageLocalizer; |
26 | |
27 | /** @var LoggerInterface */ |
28 | private $logger; |
29 | |
30 | /** @var string Expiry of the block */ |
31 | protected $expiry; |
32 | |
33 | /** |
34 | * @param Parameters $params |
35 | * @param string $expiry |
36 | * @param BlockUserFactory $blockUserFactory |
37 | * @param FilterUser $filterUser |
38 | * @param MessageLocalizer $messageLocalizer |
39 | * @param LoggerInterface $logger |
40 | */ |
41 | public function __construct( |
42 | Parameters $params, |
43 | string $expiry, |
44 | BlockUserFactory $blockUserFactory, |
45 | FilterUser $filterUser, |
46 | MessageLocalizer $messageLocalizer, |
47 | LoggerInterface $logger |
48 | ) { |
49 | parent::__construct( $params ); |
50 | $this->expiry = $expiry; |
51 | $this->blockUserFactory = $blockUserFactory; |
52 | $this->filterUser = $filterUser; |
53 | $this->messageLocalizer = $messageLocalizer; |
54 | $this->logger = $logger; |
55 | } |
56 | |
57 | /** |
58 | * Perform a block by the AbuseFilter system user |
59 | * @param string $ruleDesc |
60 | * @param int|string $ruleNumber |
61 | * @param string $target |
62 | * @param string $expiry |
63 | * @param bool $isAutoBlock |
64 | * @param bool $preventEditOwnUserTalk |
65 | * @return Status |
66 | */ |
67 | protected function doBlockInternal( |
68 | string $ruleDesc, |
69 | $ruleNumber, |
70 | string $target, |
71 | string $expiry, |
72 | bool $isAutoBlock, |
73 | bool $preventEditOwnUserTalk |
74 | ): Status { |
75 | $reason = $this->messageLocalizer->msg( |
76 | 'abusefilter-blockreason', |
77 | $ruleDesc, |
78 | $ruleNumber |
79 | )->inContentLanguage()->text(); |
80 | |
81 | $blockUser = $this->blockUserFactory->newBlockUser( |
82 | $target, |
83 | $this->filterUser->getAuthority(), |
84 | $expiry, |
85 | $reason, |
86 | [ |
87 | 'isHardBlock' => false, |
88 | 'isAutoblocking' => $isAutoBlock, |
89 | 'isCreateAccountBlocked' => true, |
90 | 'isUserTalkEditBlocked' => $preventEditOwnUserTalk |
91 | ] |
92 | ); |
93 | if ( |
94 | strpos( $this->parameters->getAction(), 'createaccount' ) !== false && |
95 | IPUtils::isIPAddress( $target ) |
96 | ) { |
97 | $blockUser->setLogDeletionFlags( LogPage::SUPPRESSED_ACTION ); |
98 | } |
99 | $status = $blockUser->placeBlockUnsafe(); |
100 | if ( !$status->isGood() ) { |
101 | $this->logger->warning( |
102 | 'AbuseFilter block to {block_target} failed: {errors}', |
103 | [ 'block_target' => $target, 'errors' => $status->__toString() ] |
104 | ); |
105 | } |
106 | return $status; |
107 | } |
108 | } |