|
<?php |
|
|
|
namespace Kanboard\Core\Controller; |
|
|
|
use Kanboard\Controller\AppController; |
|
use Kanboard\Core\Base; |
|
use Kanboard\Middleware\ApplicationAuthorizationMiddleware; |
|
use Kanboard\Middleware\AuthenticationMiddleware; |
|
use Kanboard\Middleware\BootstrapMiddleware; |
|
use Kanboard\Middleware\PostAuthenticationMiddleware; |
|
use Kanboard\Middleware\ProjectAuthorizationMiddleware; |
|
use RuntimeException; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Runner extends Base |
|
{ |
|
|
|
|
|
|
|
public function execute() |
|
{ |
|
try { |
|
$this->executeMiddleware(); |
|
|
|
if (!$this->response->isResponseAlreadySent()) { |
|
$this->executeController(); |
|
} |
|
} catch (PageNotFoundException $e) { |
|
$controllerObject = new AppController($this->container); |
|
$controllerObject->notFound($e->hasLayout()); |
|
} catch (AccessForbiddenException $e) { |
|
$controllerObject = new AppController($this->container); |
|
$controllerObject->accessForbidden($e->hasLayout(), $e->getMessage()); |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
protected function executeMiddleware() |
|
{ |
|
if (DEBUG) { |
|
$this->logger->debug(__METHOD__); |
|
} |
|
|
|
$bootstrapMiddleware = new BootstrapMiddleware($this->container); |
|
$authenticationMiddleware = new AuthenticationMiddleware($this->container); |
|
$postAuthenticationMiddleware = new PostAuthenticationMiddleware($this->container); |
|
$appAuthorizationMiddleware = new ApplicationAuthorizationMiddleware($this->container); |
|
$projectAuthorizationMiddleware = new ProjectAuthorizationMiddleware($this->container); |
|
|
|
$bootstrapMiddleware->setNextMiddleware($authenticationMiddleware); |
|
$authenticationMiddleware->setNextMiddleware($postAuthenticationMiddleware); |
|
$postAuthenticationMiddleware->setNextMiddleware($appAuthorizationMiddleware); |
|
$appAuthorizationMiddleware->setNextMiddleware($projectAuthorizationMiddleware); |
|
|
|
$bootstrapMiddleware->execute(); |
|
} |
|
|
|
|
|
|
|
|
|
protected function executeController() |
|
{ |
|
$className = $this->getControllerClassName(); |
|
|
|
if (DEBUG) { |
|
$this->logger->debug(__METHOD__.' => '.$className.'::'.$this->router->getAction()); |
|
} |
|
|
|
$controllerObject = new $className($this->container); |
|
$controllerObject->{$this->router->getAction()}(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected function getControllerClassName() |
|
{ |
|
if ($this->router->getPlugin() !== '') { |
|
$className = '\Kanboard\Plugin\\'.$this->router->getPlugin().'\Controller\\'.$this->router->getController(); |
|
} else { |
|
$className = '\Kanboard\Controller\\'.$this->router->getController(); |
|
} |
|
|
|
if (! class_exists($className)) { |
|
throw new RuntimeException('Controller not found'); |
|
} |
|
|
|
if (! method_exists($className, $this->router->getAction())) { |
|
throw new RuntimeException('Action not implemented'); |
|
} |
|
|
|
return $className; |
|
} |
|
} |
|
|