Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
BlockedDomainValidator
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 2
42
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 validateDomain
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
30
1<?php
2
3namespace MediaWiki\Extension\AbuseFilter\BlockedDomains;
4
5use MediaWiki\Utils\UrlUtils;
6
7class BlockedDomainValidator {
8
9    public const SERVICE_NAME = 'AbuseFilterBlockedDomainValidator';
10
11    public function __construct( private readonly UrlUtils $urlUtils ) {
12    }
13
14    /**
15     * Validate an input domain
16     *
17     * @param string|null $domain Domain such as foo.wikipedia.org
18     * @return string|false Parsed domain, or false otherwise
19     */
20    public function validateDomain( ?string $domain ) {
21        if ( !$domain ) {
22            return false;
23        }
24
25        $domain = trim( $domain );
26        if ( !str_contains( $domain, '//' ) ) {
27            $domain = 'https://' . $domain;
28        }
29
30        $parsedUrl = $this->urlUtils->parse( $domain );
31        // Parse url returns a valid URL for "foo"
32        if ( !$parsedUrl || !str_contains( $parsedUrl['host'], '.' ) ) {
33            return false;
34        }
35        return $parsedUrl['host'];
36    }
37}