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
title
Description
Body
title
Description
Body
title
Description
Body
title
Body