1<?php
2
3class HTMLPurifier_URIFilter_DisableExternal extends HTMLPurifier_URIFilter
4{
5    /**
6     * @type string
7     */
8    public $name = 'DisableExternal';
9
10    /**
11     * @type array
12     */
13    protected $ourHostParts = false;
14
15    /**
16     * @param HTMLPurifier_Config $config
17     * @return void
18     */
19    public function prepare($config)
20    {
21        $our_host = $config->getDefinition('URI')->host;
22        if ($our_host !== null) {
23            $this->ourHostParts = array_reverse(explode('.', $our_host));
24        }
25    }
26
27    /**
28     * @param HTMLPurifier_URI $uri Reference
29     * @param HTMLPurifier_Config $config
30     * @param HTMLPurifier_Context $context
31     * @return bool
32     */
33    public function filter(&$uri, $config, $context)
34    {
35        if (is_null($uri->host)) {
36            return true;
37        }
38        if ($this->ourHostParts === false) {
39            return false;
40        }
41        $host_parts = array_reverse(explode('.', $uri->host));
42        foreach ($this->ourHostParts as $i => $x) {
43            if (!isset($host_parts[$i])) {
44                return false;
45            }
46            if ($host_parts[$i] != $this->ourHostParts[$i]) {
47                return false;
48            }
49        }
50        return true;
51    }
52}
53
54// vim: et sw=4 sts=4
55