[FEATURE] Csrf token

- Added functionality to CsrfToken class.
- Added header support to Request class.
- Added option to set BaseCsrfVerifier class in RouterBase and
  SimpleRouter.
This commit is contained in:
Simon Sessingø
2015-10-21 18:12:53 +02:00
parent c221381c02
commit 1ba05b923c
7 changed files with 118 additions and 21 deletions
+31 -2
View File
@@ -2,6 +2,7 @@
namespace Pecee\SimpleRouter;
use Pecee\ArrayUtil;
use Pecee\Http\Middleware\BaseCsrfVerifier;
use Pecee\Http\Request;
use Pecee\Url;
@@ -17,6 +18,7 @@ class RouterBase {
protected $backstack;
protected $loadedRoute;
protected $defaultNamespace;
protected $baseCsrfVerifier;
// TODO: make interface for controller routers, so they can be easily detected
// TODO: clean up - cut some of the methods down to smaller pieces
@@ -26,6 +28,7 @@ class RouterBase {
$this->backstack = array();
$this->controllerUrlMap = array();
$this->request = new Request();
$this->baseCsrfVerifier = new BaseCsrfVerifier();
}
public function addRoute(RouterEntry $route) {
@@ -85,8 +88,16 @@ class RouterBase {
}
public function routeRequest() {
// Loop through each route-request
// Verify csrf token for request
if($this->baseCsrfVerifier !== null) {
/* @var $csrfVerifier BaseCsrfVerifier */
$csrfVerifier = $this->baseCsrfVerifier;
$csrfVerifier = new $csrfVerifier();
$csrfVerifier->handle($this->request);
}
// Loop through each route-request
$this->processRoutes($this->routes);
// Make sure the urls is in the right order when comparing
@@ -100,7 +111,6 @@ class RouterBase {
foreach($this->controllerUrlMap as $route) {
$routeMatch = $route->matchRoute($this->request);
if($routeMatch && !($routeMatch instanceof RouterGroup)) {
if(count($route->getRequestMethods()) && !in_array($this->request->getMethod(), $route->getRequestMethods())) {
@@ -179,6 +189,25 @@ class RouterBase {
return $this->request;
}
/**
* Get base csrf verifier class
* @return BaseCsrfVerifier
*/
public function getBaseCsrfVerifier() {
return $this->baseCsrfVerifier;
}
/**
* Set base csrf verifier class
*
* @param BaseCsrfVerifier $baseCsrfVerifier
* @return self
*/
public function setBaseCsrfVerifier(BaseCsrfVerifier $baseCsrfVerifier) {
$this->baseCsrfVerifier = $baseCsrfVerifier;
return $this;
}
protected function processUrl($route, $method = null, $parameters = null, $getParams = null) {
$url = $route->getUrl();