Slim::getIPAddress()   A
last analyzed

Complexity

Conditions 3
Paths 2

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 6
nc 2
nop 1
dl 0
loc 12
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * @license LGPLv3, http://opensource.org/licenses/LGPL-3.0
5
 * @copyright Aimeos (aimeos.org), 2016-2020
6
 * @package MW
7
 * @subpackage View
8
 */
9
10
11
namespace Aimeos\MW\View\Helper\Request;
12
13
14
/**
15
 * View helper class for accessing request data from Slim
16
 *
17
 * @package MW
18
 * @subpackage View
19
 */
20
class Slim
21
	extends \Aimeos\MW\View\Helper\Request\Standard
22
	implements \Aimeos\MW\View\Helper\Request\Iface
23
{
24
	/**
25
	 * Initializes the request view helper.
26
	 *
27
	 * @param \Aimeos\MW\View\Iface $view View instance with registered view helpers
28
	 * @param \Psr\Http\Message\ServerRequestInterface $request PSR-7 request object
29
	 */
30
	public function __construct( \Aimeos\MW\View\Iface $view, \Psr\Http\Message\ServerRequestInterface $request )
31
	{
32
		$route = $request->getAttribute( 'route' );
33
34
		parent::__construct( $view, $request, $this->getIPAddress( $request ), ( $route ? $route->getName() : null ) );
35
	}
36
37
38
	/**
39
	 * Returns the client IP address
40
	 *
41
	 * @param \Psr\Http\Message\ServerRequestInterface $request
42
	 * @return string|null IPv4 or IPv6 address or null if invalid
43
	 */
44
	protected function getIPAddress( \Psr\Http\Message\ServerRequestInterface $request ) : ?string
45
	{
46
		$server = $request->getServerParams();
47
		$flags = FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6;
48
49
		if( isset( $server['REMOTE_ADDR'] )
50
			&& ( $ip = filter_var( $server['REMOTE_ADDR'], FILTER_VALIDATE_IP, $flags ) ) !== false
51
		) {
52
			return $ip;
53
		}
54
55
		return null;
56
	}
57
}
58