Seditio Source
Root |
./othercms/phpBB3/vendor/s9e/text-formatter/src/Configurator/UrlConfig.php
<?php

/**
* @package   s9e\TextFormatter
* @copyright Copyright (c) 2010-2021 The s9e authors
* @license   http://www.opensource.org/licenses/mit-license.php The MIT License
*/
namespace s9e\TextFormatter\Configurator;

use
RuntimeException;
use
s9e\TextFormatter\Configurator\Collections\HostnameList;
use
s9e\TextFormatter\Configurator\Collections\SchemeList;
use
s9e\TextFormatter\Configurator\Helpers\ConfigHelper;

class
UrlConfig implements ConfigProvider
{
   
/**
    * @var SchemeList List of allowed schemes
    */
   
protected $allowedSchemes;

   
/**
    * @var HostnameList List of disallowed hosts
    */
   
protected $disallowedHosts;

   
/**
    * @var HostnameList List of allowed hosts
    */
   
protected $restrictedHosts;

   
/**
    * Constructor
    */
   
public function __construct()
    {
       
$this->disallowedHosts = new HostnameList;
       
$this->restrictedHosts = new HostnameList;

       
$this->allowedSchemes   = new SchemeList;
       
$this->allowedSchemes[] = 'http';
       
$this->allowedSchemes[] = 'https';
    }

   
/**
    * {@inheritdoc}
    */
   
public function asConfig()
    {
        return
ConfigHelper::toArray(get_object_vars($this));
    }

   
/**
    * Allow a URL scheme
    *
    * @param string $scheme URL scheme, e.g. "file" or "ed2k"
    * @return void
    */
   
public function allowScheme($scheme)
    {
        if (
strtolower($scheme) === 'javascript')
        {
            throw new
RuntimeException('The JavaScript URL scheme cannot be allowed');
        }

       
$this->allowedSchemes[] = $scheme;
    }

   
/**
    * Disallow a hostname (or hostname mask) from being used in URLs
    *
    * @param  string $host            Hostname or hostmask
    * @param  bool   $matchSubdomains Whether to match subdomains of given host
    * @return void
    */
   
public function disallowHost($host, $matchSubdomains = true)
    {
       
$this->disallowedHosts[] = $host;

        if (
$matchSubdomains && substr($host, 0, 1) !== '*')
        {
           
$this->disallowedHosts[] = '*.' . $host;
        }
    }

   
/**
    * Remove a scheme from the list of allowed URL schemes
    *
    * @param  string $scheme URL scheme, e.g. "file" or "ed2k"
    * @return void
    */
   
public function disallowScheme($scheme)
    {
       
$this->allowedSchemes->remove($scheme);
    }

   
/**
    * Return the list of allowed URL schemes
    *
    * @return array
    */
   
public function getAllowedSchemes()
    {
        return
iterator_to_array($this->allowedSchemes);
    }

   
/**
    * Allow a hostname (or hostname mask) to being used in URLs while disallowing everything else
    *
    * Can be called multiple times to restricts URLs to a set of given hostnames
    *
    * @param  string $host            Hostname or hostmask
    * @param  bool   $matchSubdomains Whether to match subdomains of given host
    * @return void
    */
   
public function restrictHost($host, $matchSubdomains = true)
    {
       
$this->restrictedHosts[] = $host;

        if (
$matchSubdomains && substr($host, 0, 1) !== '*')
        {
           
$this->restrictedHosts[] = '*.' . $host;
        }
    }
}