diff options
Diffstat (limited to 'src/Router')
| -rw-r--r-- | src/Router/Router.php | 109 | ||||
| -rw-r--r-- | src/Router/routes_client_server.php | 116 | ||||
| -rw-r--r-- | src/Router/routes_server_server.php | 24 |
3 files changed, 0 insertions, 249 deletions
diff --git a/src/Router/Router.php b/src/Router/Router.php deleted file mode 100644 index 6859771..0000000 --- a/src/Router/Router.php +++ /dev/null @@ -1,109 +0,0 @@ -<?php - -namespace App\Router; - -use App\Errors\ErrorResponse; -use App\Errors\Exception; -use App\Singleton; -use App\Support\Logger; -use Matrix\Enums\ErrorCode; -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Exception\MethodNotAllowedException; -use Symfony\Component\Routing\Exception\ResourceNotFoundException; -use Symfony\Component\Routing\Loader\Configurator\RouteConfigurator; -use Symfony\Component\Routing\Matcher\UrlMatcher; -use Symfony\Component\Routing\RequestContext; -use Symfony\Component\Routing\RouteCollection; - -class Router -{ - use Singleton; - - private RouteCollection $routes; - private RouteConfigurator $configurator; - - public function __construct() - { - $this->routes = new RouteCollection(); - $this->configurator = new RouteConfigurator($this->routes, $this->routes); - - $this->addRoutes(); - } - - /** - * match the current url against the routes. - * also add preflight CORS headers on OPTIONS requests. - */ - public function run(): Response - { - $request = Request::createFromGlobals(); - - $response = new Response(); - $response->headers->add([ - "Access-Control-Allow-Origin" => "*", - "Access-Control-Allow-Methods" => "GET, POST, PUT, DELETE, OPTIONS, PATCH, HEAD", - "Access-Control-Allow-Headers" => "X-Requested-With, Content-Type, Authorization", - ]); - - if ($request->isMethod("OPTIONS")) { - return $response; - } - - $context = new RequestContext(); - $context->fromRequest($request); - - try { - $matcher = new UrlMatcher($this->routes, $context); - $match = $matcher->matchRequest($request); - - $class = $match["_controller"][0]; - $method = $match["_controller"][1]; - - $request->attributes->add(array_diff_key( - $match, - array_flip(["_controller", "_route"]) - )); - - Logger::logRequestToFile($request); - - $response = (new $class)->$method($request); - } catch (Exception $exception) { - $response = ErrorResponse::fromException($exception); - } catch (ResourceNotFoundException $exception) { - $response = new ErrorResponse(ErrorCode::NOT_FOUND, "404", Response::HTTP_NOT_FOUND); - } catch (MethodNotAllowedException $exception) { - $response = new ErrorResponse(ErrorCode::FORBIDDEN, "403", Response::HTTP_FORBIDDEN); - } catch (\LogicException $exception) { // display logic exceptions normally - throw $exception; - } catch (\Exception $exception) { - $response = new ErrorResponse( - ErrorCode::UNKNOWN, - $exception->getMessage() ?: "Unknown error occured", - Response::HTTP_INTERNAL_SERVER_ERROR - ); - } catch (\Error $error) { - error_log($error->getMessage() ?: "Unknown error occured"); - - $response = new ErrorResponse( - ErrorCode::UNKNOWN, - $error->getMessage() ?: "Unknown error occured", - Response::HTTP_INTERNAL_SERVER_ERROR - ); - } - - return $response; - } - - /** - * add routes from the routes file - */ - private function addRoutes(): void - { - $routesClientServer = include_once(__DIR__ . "/routes_client_server.php"); - $routesClientServer($this->configurator); - - $routesServerServer = include_once(__DIR__ . "/routes_server_server.php"); - $routesServerServer($this->configurator); - } -} diff --git a/src/Router/routes_client_server.php b/src/Router/routes_client_server.php deleted file mode 100644 index e888782..0000000 --- a/src/Router/routes_client_server.php +++ /dev/null @@ -1,116 +0,0 @@ -<?php - -namespace App\Router; - -use App\Controllers\AccountController; -use App\Controllers\KeyController; -use App\Controllers\LoginController; -use App\Controllers\RoomController; -use App\Controllers\ServerDiscoveryController; -use App\Controllers\ServerImplementationController; -use App\Controllers\SyncController; -use App\Controllers\UserController; -use Symfony\Component\Routing\Loader\Configurator\RouteConfigurator; - -return function (RouteConfigurator $routes): void -{ - $routes - ->add("well_known_matrix_client", "/.well-known/matrix/client") - ->controller([ServerDiscoveryController::class, "client"]) - ->methods(["GET"]); - - $routes - ->add("well_known_matrix_support", "/.well-known/matrix/support") - ->controller([ServerDiscoveryController::class, "support"]) - ->methods(["GET"]); - - $routes - ->add("matrix_client_versions", "/_matrix/client/versions") - ->controller([ServerImplementationController::class, "versions"]) - ->methods(["GET"]); - - $supportedLoginTypes = [LoginController::class, "supportedLoginTypes"]; - $routes - ->add("matrix_client_r0_login_types", "/_matrix/client/r0/login") - ->controller($supportedLoginTypes) - ->methods(["GET"]); - $routes - ->add("matrix_client_v3_login_types", "/_matrix/client/v3/login") - ->controller($supportedLoginTypes) - ->methods(["GET"]); - - $routes - ->add("matrix_client_r0_login", "/_matrix/client/r0/login") - ->controller([LoginController::class, "login"]) - ->methods(["POST"]); - - $routes - ->add("matrix_client_v3_login", "/_matrix/client/v3/login") - ->controller([LoginController::class, "login"]) - ->methods(["POST"]); - - $routes - ->add("matrix_client_v3_keys_upload", "/_matrix/client/v3/keys/upload") - ->controller([KeyController::class, "upload"]) - ->methods(["POST"]); - - $routes - ->add("matrix_client_r0_keys_upload", "/_matrix/client/r0/keys/upload") - ->controller([KeyController::class, "upload"]) - ->methods(["POST"]); - - $routes - ->add("matrix_client_v3_sync", "/_matrix/client/v3/sync") - ->controller([SyncController::class, "sync"]) - ->methods(["GET"]); - - $routes - ->add("matrix_client_r0_sync", "/_matrix/client/r0/sync") - ->controller([SyncController::class, "sync"]) - ->methods(["GET"]); - - $routes - ->add("matrix_client_v3_refresh", "/_matrix/client/v3/refresh") - ->controller([KeyController::class, "refresh"]) - ->methods(["POST"]); - - $routes - ->add("matrix_client_v3_directory_room_alias_get", "/_matrix/client/v3/directory/room/{roomAlias}") - ->controller([RoomController::class, "resolveAlias"]) - ->methods(["GET"]); - - $routes - ->add("matrix_client_v3_account_whoami", "/_matrix/client/v3/account/whoami") - ->controller([AccountController::class, "whoami"]) - ->methods(["GET"]); - - $routes - ->add("matrix_client_v3_rooms_id_send_event_transaction", "/_matrix/client/v3/rooms/{roomId}/send/{eventType}/{txnId}") - ->controller([RoomController::class, "send"]) - ->methods(["PUT"]); - - $routes - ->add("matrix_client_r0_user_id_filter", "/_matrix/client/r0/user/{userId}/filter") - ->controller([UserController::class, "uploadFilter"]) - ->methods(["POST"]); - - $routes - ->add("matrix_client_v3_user_id_filter", "/_matrix/client/v3/user/{userId}/filter") - ->controller([UserController::class, "uploadFilter"]) - ->methods(["POST"]); - - $routes - ->add("matrix_client_v3_room_create", "/_matrix/client/v3/createRoom") - ->controller([RoomController::class, "createRoom"]) - ->methods(["POST"]); - - $routes - ->add("matrix_client_v3_rooms_id_read_markers", "/_matrix/client/v3/rooms/{roomId}/read_markers") - ->controller([RoomController::class, "readMarkers"]) - ->methods(["POST"]); - - $routes - ->add("matrix_client_v3_rooms_id_messages", "/_matrix/client/v3/rooms/{roomId}/messages") - ->controller([RoomController::class, "getMessages"]) - ->methods(["GET"]); -}; diff --git a/src/Router/routes_server_server.php b/src/Router/routes_server_server.php deleted file mode 100644 index 2e85a17..0000000 --- a/src/Router/routes_server_server.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php - -namespace App\Router; - -use App\Controllers\ServerDiscoveryController; -use App\Controllers\ServerImplementationController; -use Symfony\Component\Routing\Loader\Configurator\RouteConfigurator; - -return function (RouteConfigurator $routes): void -{ - $routes - ->add("well_known_matrix_server", "/.well-known/matrix/server") - ->controller([ServerDiscoveryController::class, "server"]) - ->methods(["GET"]); - - $routes - ->add("matrix_federation_version", "/_matrix/federation/v1/version") - ->controller([ServerImplementationController::class, "version"]) - ->methods(["GET"]); - - # /_matrix/key/v2/server - # /_matrix/key/v2/query - # /_matrix/key/v2/query/{serverName} -}; |
