scratch

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 125  →  ?path2? @ 126
/vendor/aura/uri/src/Aura/Uri/PublicSuffixList.php
@@ -0,0 +1,146 @@
<?php
/**
*
* This file is part of the Aura project for PHP.
*
* @package Aura.Uri
*
* @license http://opensource.org/licenses/bsd-license.php BSD
*
*/
namespace Aura\Uri;
 
/**
*
* Object representation of the Public Suffix List
*
* @package Aura.Uri
*
*/
class PublicSuffixList
{
/**
*
* Public suffix list data.
*
* @var array
*
*/
protected $psl;
 
/**
*
* Constructor.
*
* @param array $list Array representation of the Public Suffix List
*
*/
public function __construct(array $list)
{
$this->psl = $list;
}
 
/**
* Returns the public suffix portion of provided host
*
* @param string $host host
* @return string public suffix
*/
public function getPublicSuffix($host)
{
if (strpos($host, '.') === 0) {
return null;
}
 
if (strpos($host, '.') === false) {
return null;
}
 
$host = strtolower($host);
$parts = array_reverse(explode('.', $host));
$publicSuffix = array();
$psl = $this->psl;
 
foreach ($parts as $part) {
if (array_key_exists($part, $psl)
&& array_key_exists('!', $psl[$part])) {
break;
}
 
if (array_key_exists($part, $psl)) {
array_unshift($publicSuffix, $part);
$psl = $psl[$part];
continue;
}
 
if (array_key_exists('*', $psl)) {
array_unshift($publicSuffix, $part);
$psl = $psl['*'];
continue;
}
 
// Avoids improper parsing when $host's subdomain + public suffix ===
// a valid public suffix (e.g. host 'us.example.com' and public suffix 'us.com')
break;
}
 
// Apply algorithm rule #2: If no rules match, the prevailing rule is "*".
if (empty($publicSuffix)) {
$publicSuffix[0] = $parts[0];
}
 
return implode('.', array_filter($publicSuffix, 'strlen'));
}
 
/**
* Returns registerable domain portion of provided host
*
* Per the test cases provided by Mozilla
* (http://mxr.mozilla.org/mozilla-central/source/netwerk/test/unit/data/test_psl.txt?raw=1),
* this method should return null if the domain provided is a public suffix.
*
* @param string $host host
* @return string registerable domain
*/
public function getRegisterableDomain($host)
{
if (strpos($host, '.') === false) {
return null;
}
 
$host = strtolower($host);
$publicSuffix = $this->getPublicSuffix($host);
 
if ($publicSuffix === null || $host == $publicSuffix) {
return null;
}
 
$publicSuffixParts = array_reverse(explode('.', $publicSuffix));
$hostParts = array_reverse(explode('.', $host));
$registerableDomainParts = array_slice($hostParts, 0, count($publicSuffixParts) + 1);
 
return implode('.', array_reverse($registerableDomainParts));
}
 
/**
* Returns the subdomain portion of provided host
*
* @param string $host host
* @return string subdomain
*/
public function getSubdomain($host)
{
$host = strtolower($host);
$registerableDomain = $this->getRegisterableDomain($host);
 
if ($registerableDomain === null || $host == $registerableDomain) {
return null;
}
 
$registerableDomainParts = array_reverse(explode('.', $registerableDomain));
$hostParts = array_reverse(explode('.', $host));
$subdomainParts = array_slice($hostParts, count($registerableDomainParts));
 
return implode('.', array_reverse($subdomainParts));
}
}