Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
RangeBlock
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
3 / 3
4
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 execute
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
2
 getMessage
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace MediaWiki\Extension\AbuseFilter\Consequences\Consequence;
4
5use MediaWiki\Block\BlockUserFactory;
6use MediaWiki\Extension\AbuseFilter\Consequences\Parameters;
7use MediaWiki\Extension\AbuseFilter\FilterUser;
8use MediaWiki\Extension\AbuseFilter\GlobalNameUtils;
9use MessageLocalizer;
10use Psr\Log\LoggerInterface;
11use Wikimedia\IPUtils;
12
13/**
14 * Consequence that blocks an IP range (retrieved from the current request for both anons and registered users).
15 */
16class RangeBlock extends BlockingConsequence {
17    /** @var int[] */
18    private $rangeBlockSize;
19    /** @var int[] */
20    private $blockCIDRLimit;
21
22    /**
23     * @param Parameters $parameters
24     * @param string $expiry
25     * @param BlockUserFactory $blockUserFactory
26     * @param FilterUser $filterUser
27     * @param MessageLocalizer $messageLocalizer
28     * @param LoggerInterface $logger
29     * @param array $rangeBlockSize
30     * @param array $blockCIDRLimit
31     */
32    public function __construct(
33        Parameters $parameters,
34        string $expiry,
35        BlockUserFactory $blockUserFactory,
36        FilterUser $filterUser,
37        MessageLocalizer $messageLocalizer,
38        LoggerInterface $logger,
39        array $rangeBlockSize,
40        array $blockCIDRLimit
41    ) {
42        parent::__construct( $parameters, $expiry, $blockUserFactory, $filterUser, $messageLocalizer, $logger );
43        $this->rangeBlockSize = $rangeBlockSize;
44        $this->blockCIDRLimit = $blockCIDRLimit;
45    }
46
47    /**
48     * @inheritDoc
49     */
50    public function execute(): bool {
51        $requestIP = $this->parameters->getActionSpecifier()->getIP();
52        $type = IPUtils::isIPv6( $requestIP ) ? 'IPv6' : 'IPv4';
53        $CIDRsize = max( $this->rangeBlockSize[$type], $this->blockCIDRLimit[$type] );
54        $blockCIDR = $requestIP . '/' . $CIDRsize;
55
56        $target = IPUtils::sanitizeRange( $blockCIDR );
57        $status = $this->doBlockInternal(
58            $this->parameters->getFilter()->getName(),
59            $this->parameters->getFilter()->getID(),
60            $target,
61            $this->expiry,
62            $autoblock = false,
63            $preventTalk = false
64        );
65        return $status->isOK();
66    }
67
68    /**
69     * @inheritDoc
70     */
71    public function getMessage(): array {
72        $filter = $this->parameters->getFilter();
73        return [
74            'abusefilter-blocked-display',
75            $filter->getName(),
76            GlobalNameUtils::buildGlobalName( $filter->getID(), $this->parameters->getIsGlobalFilter() )
77        ];
78    }
79}