public function testInvalidDomains() { foreach ($this->invalidDomains as $url) { $parsedRootDomain = \Nabble\SemaltBlocker\Domainparser::getRootDomain($url); $this->assertEquals(false, $parsedRootDomain); } }
function clean($url, $list = []) { // only hostnames & path $url = Domainparser::getHostname($url) . Domainparser::getPath($url); // delete redundant subdomains $root = Domainparser::getRootDomain($url); if (!empty($list) && $root !== Domainparser::getHostname($url) && in_array($root, $list)) { $url = ''; } // trailing / $url = trim($url, '/'); // lower case $url = strtolower($url); $url = trim($url); $punicode = new \TrueBV\Punycode(); $url = iconv("UTF-8", "ISO-8859-1", $punicode->encode($url)); return $url; }
/** * @depends testRetrieveDomainlist */ public function testBlocked() { $this->mockReferer(null); $this->assertFalse(Blocker::blocked(), 'Should not block unset referer'); $this->mockReferer(''); $this->assertFalse(Blocker::blocked(), 'Should not block empty referer'); $this->mockReferer(self::INVALID_DOMAIN); $this->assertFalse(Blocker::blocked(), 'Should not block invalid referer'); $badReferrals = $this->getBadReferrals(); if (empty($badReferrals)) { $this->markTestIncomplete('Could not fetch bad referers for testing'); } foreach ($badReferrals as $badReferral) { if ($badReferral && substr($badReferral, 0, 1) !== '#') { // Referer matches blocked domain exactly $this->mockReferer($badReferral); $this->assertTrue(Blocker::blocked(), 'Should block bad referer ' . $badReferral); // Hostname of referer matches blocked domain exactly $this->mockReferer('http://' . $badReferral); $this->assertTrue(Blocker::blocked(), 'Should block bad referer http://' . $badReferral); // Referer is a subdomain of blocked domain (only on root domains with no path) if (($root = Domainparser::getRootDomain($badReferral)) === $badReferral && !trim(Domainparser::getPath($badReferral), '/')) { $this->mockReferer('http://test.' . $badReferral); $this->assertTrue(Blocker::blocked(), 'Should block bad referer http://test.' . $badReferral . ' but it\'s not (' . Blocker::explain() . ')'); } // Referer is a root domain of blocked subdomain if ($root !== $badReferral) { $this->mockReferer($root); $this->assertFalse(Blocker::blocked(), 'Should not block root domain ' . $root); } } } foreach ($this->goodReferrals as $goodReferral) { $this->mockReferer($goodReferral); $this->assertFalse(Blocker::blocked(), 'Should not block good referer ' . $goodReferral); } }
} else { if (!empty($regex)) { preg_match_all($regex, $raw, $list); $list = array_filter($list[1], function ($v) { return filter_var($v, FILTER_VALIDATE_URL) || filter_var('http://' . $v, FILTER_VALIDATE_URL); }); } else { $list = explode("\n", $raw); } } echo $source . " contains " . count($list) . " source(s)\n"; $spammers = array_merge($spammers, $list); } // only top-level domains foreach ($spammers as &$spammer) { $spammer = \Nabble\SemaltBlocker\Domainparser::getRootDomain($spammer); } // merge & cleanup spammers if ($includeOldList) { $spammers = array_merge(\Nabble\SemaltBlocker\Blocker::getBlocklist(), $spammers); } $spammers = array_map('strtolower', $spammers); $spammers = array_map('trim', $spammers); $punicode = new \TrueBV\Punycode(); foreach ($spammers as &$spammer) { $spammer = iconv("UTF-8", "ISO-8859-1", $punicode->encode($spammer)); } $spammers = array_unique($spammers); $spammers = array_filter($spammers); sort($spammers); // echo some info