diff options
Diffstat (limited to 'inc/3rdparty/htmlpurifier/HTMLPurifier/URIDefinition.php')
-rw-r--r-- | inc/3rdparty/htmlpurifier/HTMLPurifier/URIDefinition.php | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/inc/3rdparty/htmlpurifier/HTMLPurifier/URIDefinition.php b/inc/3rdparty/htmlpurifier/HTMLPurifier/URIDefinition.php new file mode 100644 index 00000000..dbc2a752 --- /dev/null +++ b/inc/3rdparty/htmlpurifier/HTMLPurifier/URIDefinition.php | |||
@@ -0,0 +1,112 @@ | |||
1 | <?php | ||
2 | |||
3 | class HTMLPurifier_URIDefinition extends HTMLPurifier_Definition | ||
4 | { | ||
5 | |||
6 | public $type = 'URI'; | ||
7 | protected $filters = array(); | ||
8 | protected $postFilters = array(); | ||
9 | protected $registeredFilters = array(); | ||
10 | |||
11 | /** | ||
12 | * HTMLPurifier_URI object of the base specified at %URI.Base | ||
13 | */ | ||
14 | public $base; | ||
15 | |||
16 | /** | ||
17 | * String host to consider "home" base, derived off of $base | ||
18 | */ | ||
19 | public $host; | ||
20 | |||
21 | /** | ||
22 | * Name of default scheme based on %URI.DefaultScheme and %URI.Base | ||
23 | */ | ||
24 | public $defaultScheme; | ||
25 | |||
26 | public function __construct() | ||
27 | { | ||
28 | $this->registerFilter(new HTMLPurifier_URIFilter_DisableExternal()); | ||
29 | $this->registerFilter(new HTMLPurifier_URIFilter_DisableExternalResources()); | ||
30 | $this->registerFilter(new HTMLPurifier_URIFilter_DisableResources()); | ||
31 | $this->registerFilter(new HTMLPurifier_URIFilter_HostBlacklist()); | ||
32 | $this->registerFilter(new HTMLPurifier_URIFilter_SafeIframe()); | ||
33 | $this->registerFilter(new HTMLPurifier_URIFilter_MakeAbsolute()); | ||
34 | $this->registerFilter(new HTMLPurifier_URIFilter_Munge()); | ||
35 | } | ||
36 | |||
37 | public function registerFilter($filter) | ||
38 | { | ||
39 | $this->registeredFilters[$filter->name] = $filter; | ||
40 | } | ||
41 | |||
42 | public function addFilter($filter, $config) | ||
43 | { | ||
44 | $r = $filter->prepare($config); | ||
45 | if ($r === false) return; // null is ok, for backwards compat | ||
46 | if ($filter->post) { | ||
47 | $this->postFilters[$filter->name] = $filter; | ||
48 | } else { | ||
49 | $this->filters[$filter->name] = $filter; | ||
50 | } | ||
51 | } | ||
52 | |||
53 | protected function doSetup($config) | ||
54 | { | ||
55 | $this->setupMemberVariables($config); | ||
56 | $this->setupFilters($config); | ||
57 | } | ||
58 | |||
59 | protected function setupFilters($config) | ||
60 | { | ||
61 | foreach ($this->registeredFilters as $name => $filter) { | ||
62 | if ($filter->always_load) { | ||
63 | $this->addFilter($filter, $config); | ||
64 | } else { | ||
65 | $conf = $config->get('URI.' . $name); | ||
66 | if ($conf !== false && $conf !== null) { | ||
67 | $this->addFilter($filter, $config); | ||
68 | } | ||
69 | } | ||
70 | } | ||
71 | unset($this->registeredFilters); | ||
72 | } | ||
73 | |||
74 | protected function setupMemberVariables($config) | ||
75 | { | ||
76 | $this->host = $config->get('URI.Host'); | ||
77 | $base_uri = $config->get('URI.Base'); | ||
78 | if (!is_null($base_uri)) { | ||
79 | $parser = new HTMLPurifier_URIParser(); | ||
80 | $this->base = $parser->parse($base_uri); | ||
81 | $this->defaultScheme = $this->base->scheme; | ||
82 | if (is_null($this->host)) $this->host = $this->base->host; | ||
83 | } | ||
84 | if (is_null($this->defaultScheme)) $this->defaultScheme = $config->get('URI.DefaultScheme'); | ||
85 | } | ||
86 | |||
87 | public function getDefaultScheme($config, $context) | ||
88 | { | ||
89 | return HTMLPurifier_URISchemeRegistry::instance()->getScheme($this->defaultScheme, $config, $context); | ||
90 | } | ||
91 | |||
92 | public function filter(&$uri, $config, $context) | ||
93 | { | ||
94 | foreach ($this->filters as $name => $f) { | ||
95 | $result = $f->filter($uri, $config, $context); | ||
96 | if (!$result) return false; | ||
97 | } | ||
98 | return true; | ||
99 | } | ||
100 | |||
101 | public function postFilter(&$uri, $config, $context) | ||
102 | { | ||
103 | foreach ($this->postFilters as $name => $f) { | ||
104 | $result = $f->filter($uri, $config, $context); | ||
105 | if (!$result) return false; | ||
106 | } | ||
107 | return true; | ||
108 | } | ||
109 | |||
110 | } | ||
111 | |||
112 | // vim: et sw=4 sts=4 | ||