Blame view

vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIDefinition.php 3.35 KB
abf1649b   andryeyev   Чистая установка ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
  <?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