root/afridex/plugins/Flutter/purifier_lib/HTMLPurifier/URISchemeRegistry.php @ 23

Revision 21, 2.3 kB (checked in by admin, 18 years ago)
Line 
1<?php
2
3/**
4 * Registry for retrieving specific URI scheme validator objects.
5 */
6class HTMLPurifier_URISchemeRegistry
7{
8   
9    /**
10     * Retrieve sole instance of the registry.
11     * @param $prototype Optional prototype to overload sole instance with,
12     *                   or bool true to reset to default registry.
13     * @note Pass a registry object $prototype with a compatible interface and
14     *       the function will copy it and return it all further times.
15     */
16    public static function instance($prototype = null) {
17        static $instance = null;
18        if ($prototype !== null) {
19            $instance = $prototype;
20        } elseif ($instance === null || $prototype == true) {
21            $instance = new HTMLPurifier_URISchemeRegistry();
22        }
23        return $instance;
24    }
25   
26    /**
27     * Cache of retrieved schemes.
28     */
29    protected $schemes = array();
30   
31    /**
32     * Retrieves a scheme validator object
33     * @param $scheme String scheme name like http or mailto
34     * @param $config HTMLPurifier_Config object
35     * @param $config HTMLPurifier_Context object
36     */
37    public function getScheme($scheme, $config, $context) {
38        if (!$config) $config = HTMLPurifier_Config::createDefault();
39        $null = null; // for the sake of passing by reference
40       
41        // important, otherwise attacker could include arbitrary file
42        $allowed_schemes = $config->get('URI', 'AllowedSchemes');
43        if (!$config->get('URI', 'OverrideAllowedSchemes') &&
44            !isset($allowed_schemes[$scheme])
45        ) {
46            return $null;
47        }
48       
49        if (isset($this->schemes[$scheme])) return $this->schemes[$scheme];
50        if (!isset($allowed_schemes[$scheme])) return $null;
51       
52        $class = 'HTMLPurifier_URIScheme_' . $scheme;
53        if (!class_exists($class)) return $null;
54        $this->schemes[$scheme] = new $class();
55        return $this->schemes[$scheme];
56    }
57   
58    /**
59     * Registers a custom scheme to the cache, bypassing reflection.
60     * @param $scheme Scheme name
61     * @param $scheme_obj HTMLPurifier_URIScheme object
62     */
63    public function register($scheme, $scheme_obj) {
64        $this->schemes[$scheme] = $scheme_obj;
65    }
66   
67}
68
69
Note: See TracBrowser for help on using the browser.