56 lines
1.5 KiB
PHP
56 lines
1.5 KiB
PHP
|
<?php
|
||
|
namespace EEPROM;
|
||
|
|
||
|
use Index\Http\HttpFx;
|
||
|
use Index\Http\HttpRequest;
|
||
|
use Index\Routing\IRouter;
|
||
|
use Index\Routing\IRouteHandler;
|
||
|
use Syokuhou\IConfig;
|
||
|
|
||
|
class RoutingContext {
|
||
|
private HttpFx $router;
|
||
|
|
||
|
public function __construct(private IConfig $config) {
|
||
|
$this->router = new HttpFx;
|
||
|
$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);
|
||
|
}
|
||
|
}
|