PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 1.3.1
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v1.3.1
5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / app / libs / Zend / Validate / Ip.php
matomo / app / libs / Zend / Validate Last commit date
File 6 years ago Hostname 6 years ago Abstract.php 6 years ago Alnum.php 6 years ago Alpha.php 6 years ago Between.php 6 years ago Callback.php 6 years ago Ccnum.php 6 years ago CreditCard.php 6 years ago Date.php 6 years ago Digits.php 6 years ago Exception.php 6 years ago Float.php 6 years ago GreaterThan.php 6 years ago Hex.php 6 years ago Hostname.php 6 years ago Iban.php 6 years ago Identical.php 6 years ago InArray.php 6 years ago Int.php 6 years ago Interface.php 6 years ago Ip.php 6 years ago Isbn.php 6 years ago LessThan.php 6 years ago NotEmpty.php 6 years ago PostCode.php 6 years ago Regex.php 6 years ago StringLength.php 6 years ago
Ip.php
192 lines
1 <?php
2 /**
3 * Zend Framework
4 *
5 * LICENSE
6 *
7 * This source file is subject to the new BSD license that is bundled
8 * with this package in the file LICENSE.txt.
9 * It is also available through the world-wide-web at this URL:
10 * http://framework.zend.com/license/new-bsd
11 * If you did not receive a copy of the license and are unable to
12 * obtain it through the world-wide-web, please send an email
13 * to license@zend.com so we can send you a copy immediately.
14 *
15 * @category Zend
16 * @package Zend_Validate
17 * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
18 * @license http://framework.zend.com/license/new-bsd New BSD License
19 * @version $Id: Ip.php 23775 2011-03-01 17:25:24Z ralph $
20 */
21
22 /**
23 * @see Zend_Validate_Abstract
24 */
25 // require_once 'Zend/Validate/Abstract.php';
26
27 /**
28 * @category Zend
29 * @package Zend_Validate
30 * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
31 * @license http://framework.zend.com/license/new-bsd New BSD License
32 */
33 class Zend_Validate_Ip extends Zend_Validate_Abstract
34 {
35 const INVALID = 'ipInvalid';
36 const NOT_IP_ADDRESS = 'notIpAddress';
37
38 /**
39 * @var array
40 */
41 protected $_messageTemplates = array(
42 self::INVALID => "Invalid type given. String expected",
43 self::NOT_IP_ADDRESS => "'%value%' does not appear to be a valid IP address",
44 );
45
46 /**
47 * internal options
48 *
49 * @var array
50 */
51 protected $_options = array(
52 'allowipv6' => true,
53 'allowipv4' => true
54 );
55
56 /**
57 * Sets validator options
58 *
59 * @param array $options OPTIONAL Options to set, see the manual for all available options
60 * @return void
61 */
62 public function __construct($options = array())
63 {
64 if ($options instanceof Zend_Config) {
65 $options = $options->toArray();
66 } else if (!is_array($options)) {
67 $options = func_get_args();
68 $temp['allowipv6'] = array_shift($options);
69 if (!empty($options)) {
70 $temp['allowipv4'] = array_shift($options);
71 }
72
73 $options = $temp;
74 }
75
76 $options += $this->_options;
77 $this->setOptions($options);
78 }
79
80 /**
81 * Returns all set options
82 *
83 * @return array
84 */
85 public function getOptions()
86 {
87 return $this->_options;
88 }
89
90 /**
91 * Sets the options for this validator
92 *
93 * @param array $options
94 * @return Zend_Validate_Ip
95 */
96 public function setOptions($options)
97 {
98 if (array_key_exists('allowipv6', $options)) {
99 $this->_options['allowipv6'] = (boolean) $options['allowipv6'];
100 }
101
102 if (array_key_exists('allowipv4', $options)) {
103 $this->_options['allowipv4'] = (boolean) $options['allowipv4'];
104 }
105
106 if (!$this->_options['allowipv4'] && !$this->_options['allowipv6']) {
107 // require_once 'Zend/Validate/Exception.php';
108 throw new Zend_Validate_Exception('Nothing to validate. Check your options');
109 }
110
111 return $this;
112 }
113
114 /**
115 * Defined by Zend_Validate_Interface
116 *
117 * Returns true if and only if $value is a valid IP address
118 *
119 * @param mixed $value
120 * @return boolean
121 */
122 public function isValid($value)
123 {
124 if (!is_string($value)) {
125 $this->_error(self::INVALID);
126 return false;
127 }
128
129 $this->_setValue($value);
130 if (($this->_options['allowipv4'] && !$this->_options['allowipv6'] && !$this->_validateIPv4($value)) ||
131 (!$this->_options['allowipv4'] && $this->_options['allowipv6'] && !$this->_validateIPv6($value)) ||
132 ($this->_options['allowipv4'] && $this->_options['allowipv6'] && !$this->_validateIPv4($value) && !$this->_validateIPv6($value))) {
133 $this->_error(self::NOT_IP_ADDRESS);
134 return false;
135 }
136
137 return true;
138 }
139
140 /**
141 * Validates an IPv4 address
142 *
143 * @param string $value
144 */
145 protected function _validateIPv4($value) {
146 $ip2long = ip2long($value);
147 if($ip2long === false) {
148 return false;
149 }
150
151 return $value == long2ip($ip2long);
152 }
153
154 /**
155 * Validates an IPv6 address
156 *
157 * @param string $value Value to check against
158 * @return boolean True when $value is a valid ipv6 address
159 * False otherwise
160 */
161 protected function _validateIPv6($value) {
162 if (strlen($value) < 3) {
163 return $value == '::';
164 }
165
166 if (strpos($value, '.')) {
167 $lastcolon = strrpos($value, ':');
168 if (!($lastcolon && $this->_validateIPv4(substr($value, $lastcolon + 1)))) {
169 return false;
170 }
171
172 $value = substr($value, 0, $lastcolon) . ':0:0';
173 }
174
175 if (strpos($value, '::') === false) {
176 return preg_match('/\A(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}\z/i', $value);
177 }
178
179 $colonCount = substr_count($value, ':');
180 if ($colonCount < 8) {
181 return preg_match('/\A(?::|(?:[a-f0-9]{1,4}:)+):(?:(?:[a-f0-9]{1,4}:)*[a-f0-9]{1,4})?\z/i', $value);
182 }
183
184 // special case with ending or starting double colon
185 if ($colonCount == 8) {
186 return preg_match('/\A(?:::)?(?:[a-f0-9]{1,4}:){6}[a-f0-9]{1,4}(?:::)?\z/i', $value);
187 }
188
189 return false;
190 }
191 }
192