Passed
Push — master ( c53668...8969dd )
by Jean-Christophe
08:33
created

IpValidator::getParameters()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 2
ccs 0
cts 2
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Ubiquity\contents\validation\validators\strings;
4
5
use Ubiquity\contents\validation\validators\ValidatorHasNotNull;
6
7
/**
8
 * Validates an address ip
9
 * Usage @validator("ip","4")
10
 * Inspired from Bernhard Schussek Symfony IpValidator
11
 *
12
 * @author jcheron <[email protected]>
13
 * @version 1.0.1
14
 */
15
class IpValidator extends ValidatorHasNotNull {
16
	protected $ref = Ip::V4;
17
	const FLAGS = [
18
					Ip::V4 => FILTER_FLAG_IPV4,
19
					Ip::V6 => FILTER_FLAG_IPV6,
20
					Ip::V4_NO_PRIV => FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE,
21
					Ip::V6_NO_PRIV => FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE,
22
					Ip::ALL_NO_PRIV => FILTER_FLAG_NO_PRIV_RANGE,
23
					Ip::V4_NO_RES => FILTER_FLAG_IPV4 | FILTER_FLAG_NO_RES_RANGE,
24
					Ip::V6_NO_RES => FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE,
25
					Ip::ALL_NO_RES => FILTER_FLAG_NO_RES_RANGE,
26
					Ip::V4_ONLY_PUBLIC => FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE,
27
					Ip::V6_ONLY_PUBLIC => FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE,
28
					Ip::ALL_ONLY_PUBLIC => FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ];
29
30
	public function __construct() {
31
		$this->message = "{value} is not a valid ip of type {ref}";
32
	}
33
34
	public function validate($value) {
35
		parent::validate ( $value );
36
		$value = ( string ) $value;
37
		$flag = null;
38
		if ($this->notNull !== false) {
39
			if (isset ( self::FLAGS [$this->ref] )) {
40
				$flag = self::FLAGS [$this->ref];
41
			}
42
			return filter_var ( $value, FILTER_VALIDATE_IP, $flag );
43
		}
44
		return true;
45
	}
46
47
	/**
48
	 *
49
	 * {@inheritdoc}
50
	 * @see \Ubiquity\contents\validation\validators\Validator::getParameters()
51
	 */
52
	public function getParameters(): array {
53
		return [ "value","ref" ];
54
	}
55
}
56
57