eeprom/src/RoutingContext.php

54 lines
1.5 KiB
PHP

<?php
namespace EEPROM;
use Index\Http\HttpRequest;
use Index\Http\Routing\{HttpRouter,IRouter,IRouteHandler};
use Syokuhou\IConfig;
class RoutingContext {
private HttpRouter $router;
public function __construct(private IConfig $config) {
$this->router = new HttpRouter;
$this->router->use('/', $this->middleware(...));
}
private function middleware($response, $request) {
$response->setPoweredBy('EEPROM');
$origin = $request->getHeaderLine('Origin');
if(!empty($origin)) {
$originHost = parse_url($origin, PHP_URL_HOST);
if(empty($originHost))
return 403;
if($originHost !== $request->getHeaderLine('Host')) {
$allowedOrigins = $this->config->getArray('origins');
if(!empty($allowedOrigins)) {
$originHost = strtolower($originHost);
if(!in_array($originHost, $allowedOrigins))
return 403;
}
}
$response->setHeader('Access-Control-Allow-Origin', $origin);
$response->setHeader('Vary', 'Origin');
}
}
public function getRouter(): IRouter {
return $this->router;
}
public function register(IRouteHandler $handler): void {
$this->router->register($handler);
}
public function dispatch(?HttpRequest $request = null): void {
$this->router->dispatch($request);
}
}