2023-11-09 20:29:57 +00:00
|
|
|
<?php
|
|
|
|
namespace EEPROM;
|
|
|
|
|
|
|
|
use Index\Http\HttpRequest;
|
2024-03-29 23:21:40 +00:00
|
|
|
use Index\Http\Routing\{HttpRouter,IRouter,IRouteHandler};
|
2023-11-09 20:29:57 +00:00
|
|
|
use Syokuhou\IConfig;
|
|
|
|
|
|
|
|
class RoutingContext {
|
2024-03-29 23:21:40 +00:00
|
|
|
private HttpRouter $router;
|
2023-11-09 20:29:57 +00:00
|
|
|
|
|
|
|
public function __construct(private IConfig $config) {
|
2024-03-29 23:21:40 +00:00
|
|
|
$this->router = new HttpRouter;
|
2023-11-09 20:29:57 +00:00
|
|
|
$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);
|
|
|
|
}
|
|
|
|
}
|