Attempt CORS fixes.
This commit is contained in:
parent
fdd95b96fc
commit
4acbed15f2
4 changed files with 19 additions and 15 deletions
|
@ -36,7 +36,7 @@ class EEPROMContext {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function createRouting(bool $isApiDomain): RoutingContext {
|
public function createRouting(bool $isApiDomain): RoutingContext {
|
||||||
$routingCtx = new RoutingContext;
|
$routingCtx = new RoutingContext($this->config->scopeTo('cors'));
|
||||||
$routingCtx->register($this->database);
|
$routingCtx->register($this->database);
|
||||||
|
|
||||||
$routingCtx->register($uploadsViewsRoutes = new Uploads\UploadsViewRoutes(
|
$routingCtx->register($uploadsViewsRoutes = new Uploads\UploadsViewRoutes(
|
||||||
|
|
|
@ -8,7 +8,7 @@ use Index\Http\Routing\{HttpRouter,Router,RouteHandler};
|
||||||
class RoutingContext {
|
class RoutingContext {
|
||||||
private HttpRouter $router;
|
private HttpRouter $router;
|
||||||
|
|
||||||
public function __construct() {
|
public function __construct(private Config $config) {
|
||||||
$this->router = new HttpRouter(
|
$this->router = new HttpRouter(
|
||||||
errorHandler: new EEPROMErrorHandler,
|
errorHandler: new EEPROMErrorHandler,
|
||||||
);
|
);
|
||||||
|
@ -17,6 +17,22 @@ class RoutingContext {
|
||||||
|
|
||||||
private function middleware($response, $request) {
|
private function middleware($response, $request) {
|
||||||
$response->setPoweredBy('EEPROM');
|
$response->setPoweredBy('EEPROM');
|
||||||
|
|
||||||
|
if($request->hasHeader('Origin')) {
|
||||||
|
$origin = $request->getHeaderLine('Origin');
|
||||||
|
$response->setHeader('Access-Control-Allow-Origin', $origin);
|
||||||
|
$response->setHeader('Vary', 'Origin');
|
||||||
|
$host = parse_url($origin, PHP_URL_HOST);
|
||||||
|
if(is_string($host)) {
|
||||||
|
$host = '.' . $host;
|
||||||
|
$allowCookieOrigins = $this->config->getArray('origins');
|
||||||
|
foreach($allowCookieOrigins as $allowCookieOrigin)
|
||||||
|
if(str_ends_with($host, '.' . $allowCookieOrigin)) {
|
||||||
|
$response->setHeader('Access-Control-Allow-Credentials', 'true');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else
|
||||||
$response->setHeader('Access-Control-Allow-Origin', '*');
|
$response->setHeader('Access-Control-Allow-Origin', '*');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,6 @@ class UploadsLegacyRoutes implements RouteHandler {
|
||||||
|
|
||||||
#[HttpOptions('/uploads')]
|
#[HttpOptions('/uploads')]
|
||||||
public function optionsUpload($response, $request): int {
|
public function optionsUpload($response, $request): int {
|
||||||
if($request->hasHeader('Origin'))
|
|
||||||
$response->setHeader('Access-Control-Allow-Credentials', 'true');
|
|
||||||
|
|
||||||
$response->setHeader('Access-Control-Allow-Headers', 'Authorization');
|
$response->setHeader('Access-Control-Allow-Headers', 'Authorization');
|
||||||
$response->setHeader('Access-Control-Allow-Methods', 'POST');
|
$response->setHeader('Access-Control-Allow-Methods', 'POST');
|
||||||
|
|
||||||
|
@ -33,9 +30,6 @@ class UploadsLegacyRoutes implements RouteHandler {
|
||||||
|
|
||||||
#[HttpPost('/uploads')]
|
#[HttpPost('/uploads')]
|
||||||
public function postUpload($response, $request) {
|
public function postUpload($response, $request) {
|
||||||
if($request->hasHeader('Origin'))
|
|
||||||
$response->setHeader('Access-Control-Allow-Credentials', 'true');
|
|
||||||
|
|
||||||
if(!$request->isFormContent())
|
if(!$request->isFormContent())
|
||||||
return 400;
|
return 400;
|
||||||
|
|
||||||
|
@ -195,9 +189,6 @@ class UploadsLegacyRoutes implements RouteHandler {
|
||||||
|
|
||||||
#[HttpDelete('/uploads/([A-Za-z0-9]+|[A-Za-z0-9\-_]{32})')]
|
#[HttpDelete('/uploads/([A-Za-z0-9]+|[A-Za-z0-9\-_]{32})')]
|
||||||
public function deleteUpload($response, $request, string $uploadId) {
|
public function deleteUpload($response, $request, string $uploadId) {
|
||||||
if($request->hasHeader('Origin'))
|
|
||||||
$response->setHeader('Access-Control-Allow-Credentials', 'true');
|
|
||||||
|
|
||||||
if(!$this->authCtx->info->authed) {
|
if(!$this->authCtx->info->authed) {
|
||||||
$response->setStatusCode(401);
|
$response->setStatusCode(401);
|
||||||
return [
|
return [
|
||||||
|
|
|
@ -28,9 +28,6 @@ class UploadsViewRoutes implements RouteHandler {
|
||||||
#[HttpOptions('/([A-Za-z0-9]+|[A-Za-z0-9\-_]{32})(?:\.([a-z0-9]+))?')]
|
#[HttpOptions('/([A-Za-z0-9]+|[A-Za-z0-9\-_]{32})(?:\.([a-z0-9]+))?')]
|
||||||
public function optionsUpload($response, $request, string $uploadId, string $uploadVariant = ''): int {
|
public function optionsUpload($response, $request, string $uploadId, string $uploadVariant = ''): int {
|
||||||
if($this->isApiDomain && $uploadVariant === '') {
|
if($this->isApiDomain && $uploadVariant === '') {
|
||||||
if($request->hasHeader('Origin'))
|
|
||||||
$response->setHeader('Access-Control-Allow-Credentials', 'true');
|
|
||||||
|
|
||||||
$response->setHeader('Access-Control-Allow-Headers', 'Authorization, Content-Type, Content-Length');
|
$response->setHeader('Access-Control-Allow-Headers', 'Authorization, Content-Type, Content-Length');
|
||||||
$response->setHeader('Access-Control-Allow-Methods', 'HEAD, GET, PUT, DELETE');
|
$response->setHeader('Access-Control-Allow-Methods', 'HEAD, GET, PUT, DELETE');
|
||||||
$response->setHeader('Access-Control-Max-Age', '300');
|
$response->setHeader('Access-Control-Max-Age', '300');
|
||||||
|
|
Loading…
Add table
Reference in a new issue