Passed
Push — master ( e307b8...bd14b3 )
by Atanas
02:12
created

CsrfMiddleware::handle()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 3
eloc 6
c 1
b 0
f 1
nc 3
nop 2
dl 0
loc 11
ccs 0
cts 7
cp 0
crap 12
rs 10
1
<?php
2
/**
3
 * @package   WPEmerge
4
 * @author    Atanas Angelov <[email protected]>
5
 * @copyright 2018 Atanas Angelov
6
 * @license   https://www.gnu.org/licenses/gpl-2.0.html GPL-2.0
7
 * @link      https://wpemerge.com/
8
 */
9
10
namespace WPEmerge\Csrf;
11
12
use Closure;
13
use WPEmerge\Requests\RequestInterface;
14
15
/**
16
 * Store current request data and clear old request data
17
 */
18
class CsrfMiddleware {
19
	/**
20
	 * CSRF service.
21
	 *
22
	 * @var Csrf
23
	 */
24
	protected $csrf = null;
25
26
	/**
27
	 * Constructor.
28
	 *
29
	 * @param Csrf $csrf
30
	 */
31
	public function __construct( $csrf ) {
32
		$this->csrf = $csrf;
33
	}
34
35
	/**
36
	 * {@inheritDoc}
37
	 * @throws InvalidCsrfTokenException
38
	 */
39
	public function handle( RequestInterface $request, Closure $next ) {
40
		if ( ! $request->isReadVerb() ) {
41
			$token = $this->csrf->getTokenFromRequest( $request );
42
			if ( ! $this->csrf->isValidToken( $token ) ) {
43
				throw new InvalidCsrfTokenException();
44
			}
45
		}
46
47
		$this->csrf->generateToken();
48
49
		return $next( $request );
50
	}
51
}
52