summaryrefslogtreecommitdiff
path: root/src/Router
diff options
context:
space:
mode:
Diffstat (limited to 'src/Router')
-rw-r--r--src/Router/Router.php109
-rw-r--r--src/Router/routes_client_server.php116
-rw-r--r--src/Router/routes_server_server.php24
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}
-};