Skip to content

Commit b529c87

Browse files
committed
Added skipCSRF method to \Pecee\SimpleRouter\Route\RouteUrl to exclude a route from CSRF checking
1 parent 51f0659 commit b529c87

File tree

4 files changed

+42
-0
lines changed

4 files changed

+42
-0
lines changed

src/Pecee/Http/Middleware/BaseCsrfVerifier.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,13 @@ public function setTokenProvider(ITokenProvider $provider): void
129129
$this->tokenProvider = $provider;
130130
}
131131

132+
/**
133+
* Add a URL to the exception list.
134+
* @param string $url The URL to be added to the exception list.
135+
*/
136+
public function addException(string $url)
137+
{
138+
$this->except[] = $url;
139+
}
140+
132141
}

src/Pecee/SimpleRouter/Route/RouteUrl.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,16 @@ public function matchRoute(string $url, Request $request): bool
4444
return true;
4545
}
4646

47+
/**
48+
* Add an exception to CSRF verifier
49+
* Excludes the route from CSRF token verification.
50+
* @example
51+
* \Pecee\SimpleRouter\SimpleRouter::post("/some/url", ...)->skipCSRF();
52+
*/
53+
public function skipCSRF()
54+
{
55+
\Pecee\SimpleRouter\SimpleRouter::router()->getCsrfVerifier()->addException($this->url);
56+
return $this;
57+
}
58+
4759
}

tests/Pecee/SimpleRouter/Dummy/CsrfVerifier/DummyCsrfVerifier.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,8 @@ public function testSkip(\Pecee\Http\Request $request) {
1515
return $this->skip($request);
1616
}
1717

18+
public function getExcept() {
19+
return $this->except;
20+
}
21+
1822
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
require_once 'Dummy/CsrfVerifier/DummyCsrfVerifier.php';
3+
require_once 'Dummy/Security/SilentTokenProvider.php';
4+
require_once 'Dummy/DummyController.php';
5+
6+
class SkipCSRFTest extends \PHPUnit\Framework\TestCase
7+
{
8+
9+
public function testSkipCSRF()
10+
{
11+
$csrf = new DummyCsrfVerifier();
12+
TestRouter::csrfVerifier($csrf);
13+
TestRouter::post("/skip-csrf", [DummyController::class, "method1"])->skipCSRF();
14+
$this->assertContains("/skip-csrf/", $csrf->getExcept());
15+
}
16+
17+
}

0 commit comments

Comments
 (0)