mirror of
https://github.com/renbaoshuo/S2OJ.git
synced 2024-12-27 04:11:53 +00:00
96d4a3ecf7
Due to historical reasons, the code is in subfolder "1". With SVN removal, we place the code back and remove the annoying "1" folder.
113 lines
3.3 KiB
PHP
113 lines
3.3 KiB
PHP
<?php
|
|
|
|
class HTMLPurifier_URIDefinition extends HTMLPurifier_Definition
|
|
{
|
|
|
|
public $type = 'URI';
|
|
protected $filters = array();
|
|
protected $postFilters = array();
|
|
protected $registeredFilters = array();
|
|
|
|
/**
|
|
* HTMLPurifier_URI object of the base specified at %URI.Base
|
|
*/
|
|
public $base;
|
|
|
|
/**
|
|
* String host to consider "home" base, derived off of $base
|
|
*/
|
|
public $host;
|
|
|
|
/**
|
|
* Name of default scheme based on %URI.DefaultScheme and %URI.Base
|
|
*/
|
|
public $defaultScheme;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->registerFilter(new HTMLPurifier_URIFilter_DisableExternal());
|
|
$this->registerFilter(new HTMLPurifier_URIFilter_DisableExternalResources());
|
|
$this->registerFilter(new HTMLPurifier_URIFilter_DisableResources());
|
|
$this->registerFilter(new HTMLPurifier_URIFilter_HostBlacklist());
|
|
$this->registerFilter(new HTMLPurifier_URIFilter_SafeIframe());
|
|
$this->registerFilter(new HTMLPurifier_URIFilter_MakeAbsolute());
|
|
$this->registerFilter(new HTMLPurifier_URIFilter_Munge());
|
|
}
|
|
|
|
public function registerFilter($filter)
|
|
{
|
|
$this->registeredFilters[$filter->name] = $filter;
|
|
}
|
|
|
|
public function addFilter($filter, $config)
|
|
{
|
|
$r = $filter->prepare($config);
|
|
if ($r === false) return; // null is ok, for backwards compat
|
|
if ($filter->post) {
|
|
$this->postFilters[$filter->name] = $filter;
|
|
} else {
|
|
$this->filters[$filter->name] = $filter;
|
|
}
|
|
}
|
|
|
|
protected function doSetup($config)
|
|
{
|
|
$this->setupMemberVariables($config);
|
|
$this->setupFilters($config);
|
|
}
|
|
|
|
protected function setupFilters($config)
|
|
{
|
|
foreach ($this->registeredFilters as $name => $filter) {
|
|
if ($filter->always_load) {
|
|
$this->addFilter($filter, $config);
|
|
} else {
|
|
$conf = $config->get('URI.' . $name);
|
|
if ($conf !== false && $conf !== null) {
|
|
$this->addFilter($filter, $config);
|
|
}
|
|
}
|
|
}
|
|
unset($this->registeredFilters);
|
|
}
|
|
|
|
protected function setupMemberVariables($config)
|
|
{
|
|
$this->host = $config->get('URI.Host');
|
|
$base_uri = $config->get('URI.Base');
|
|
if (!is_null($base_uri)) {
|
|
$parser = new HTMLPurifier_URIParser();
|
|
$this->base = $parser->parse($base_uri);
|
|
$this->defaultScheme = $this->base->scheme;
|
|
if (is_null($this->host)) $this->host = $this->base->host;
|
|
}
|
|
if (is_null($this->defaultScheme)) $this->defaultScheme = $config->get('URI.DefaultScheme');
|
|
}
|
|
|
|
public function getDefaultScheme($config, $context)
|
|
{
|
|
return HTMLPurifier_URISchemeRegistry::instance()->getScheme($this->defaultScheme, $config, $context);
|
|
}
|
|
|
|
public function filter(&$uri, $config, $context)
|
|
{
|
|
foreach ($this->filters as $name => $f) {
|
|
$result = $f->filter($uri, $config, $context);
|
|
if (!$result) return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public function postFilter(&$uri, $config, $context)
|
|
{
|
|
foreach ($this->postFilters as $name => $f) {
|
|
$result = $f->filter($uri, $config, $context);
|
|
if (!$result) return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
// vim: et sw=4 sts=4
|