Skip to content

Commit 02d0504

Browse files
authored
Merge pull request #95 from utopia-php/fix-wildcards-g4
Fix wildcards for OPTIONS
2 parents 98c5469 + 3a3ed12 commit 02d0504

File tree

2 files changed

+72
-3
lines changed

2 files changed

+72
-3
lines changed

src/App.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -760,8 +760,41 @@ public function run(Request $request, Response $response): static
760760
$response->disablePayload();
761761
}
762762

763+
if(self::REQUEST_METHOD_OPTIONS == $method) {
764+
try {
765+
foreach ($groups as $group) {
766+
foreach (self::$options as $option) { // Group options hooks
767+
/** @var Hook $option */
768+
if (in_array($group, $option->getGroups())) {
769+
\call_user_func_array($option->getAction(), $this->getArguments($option, [], $request->getParams()));
770+
}
771+
}
772+
}
773+
774+
foreach (self::$options as $option) { // Global options hooks
775+
/** @var Hook $option */
776+
if (in_array('*', $option->getGroups())) {
777+
\call_user_func_array($option->getAction(), $this->getArguments($option, [], $request->getParams()));
778+
}
779+
}
780+
} catch (\Throwable $e) {
781+
foreach (self::$errors as $error) { // Global error hooks
782+
/** @var Hook $error */
783+
if (in_array('*', $error->getGroups())) {
784+
self::setResource('error', function () use ($e) {
785+
return $e;
786+
});
787+
\call_user_func_array($error->getAction(), $this->getArguments($error, [], $request->getParams()));
788+
}
789+
}
790+
}
791+
792+
return $this;
793+
}
794+
763795
if (null === $route && null !== self::$wildcardRoute) {
764796
$route = self::$wildcardRoute;
797+
$this->route = $route;
765798
$path = \parse_url($request->getURI(), PHP_URL_PATH);
766799
$route->path($path);
767800
}

tests/AppTest.php

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -612,20 +612,56 @@ public function testWildcardRoute(): void
612612
$_SERVER['REQUEST_METHOD'] = 'GET';
613613
$_SERVER['REQUEST_URI'] = '/unknown_path';
614614

615+
App::init()
616+
->action(function () {
617+
$route = $this->app->getRoute();
618+
App::setResource('myRoute', fn () => $route);
619+
});
620+
621+
App::options()
622+
->inject('request')
623+
->inject('response')
624+
->action(function (Request $request, Response $response) {
625+
$origin = $request->getOrigin();
626+
$response
627+
->addHeader('Server', 'Appwrite')
628+
->addHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE')
629+
->addHeader('Access-Control-Allow-Headers', 'Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-Appwrite-ID, Content-Range, Range, Cache-Control, Expires, Pragma, X-Fallback-Cookies')
630+
->addHeader('Access-Control-Expose-Headers', 'X-Fallback-Cookies')
631+
->addHeader('Access-Control-Allow-Origin', $origin)
632+
->addHeader('Access-Control-Allow-Credentials', 'true')
633+
->noContent();
634+
});
635+
615636
App::wildcard()
637+
->inject('myRoute')
616638
->inject('response')
617-
->action(function ($response) {
618-
$response->send('HELLO');
639+
->action(function (mixed $myRoute, $response) {
640+
if($myRoute == null) {
641+
$response->send('ROUTE IS NULL!');
642+
} else {
643+
$response->send('HELLO');
644+
}
619645
});
620646

621647
\ob_start();
622648
@$this->app->run(new Request(), new Response());
623649
$result = \ob_get_contents();
624650
\ob_end_clean();
625651

652+
$this->assertEquals('HELLO', $result);
653+
654+
\ob_start();
655+
$req = new Request();
656+
$req = $req->setMethod('OPTIONS');
657+
@$this->app->run($req, new Response());
658+
$result = \ob_get_contents();
659+
\ob_end_clean();
660+
661+
$this->assertEquals('', $result);
662+
626663
$_SERVER['REQUEST_METHOD'] = $method;
627664
$_SERVER['REQUEST_URI'] = $uri;
628665

629-
$this->assertEquals('HELLO', $result);
630666
}
631667
}

0 commit comments

Comments
 (0)