From c14579871fa1241713128a2d0d5514af004e3371 Mon Sep 17 00:00:00 2001 From: Daniel Weipert Date: Sun, 10 Aug 2025 10:46:41 +0200 Subject: initial commit --- src/App.php | 19 ++++++++ src/Controllers/KeyController.php | 22 +++++++++ src/Controllers/ServerDiscoveryController.php | 25 +++++++++++ src/Controllers/ServerImplementationController.php | 19 ++++++++ src/DB.php | 22 +++++++++ src/Router.php | 52 ++++++++++++++++++++++ src/Singleton.php | 17 +++++++ src/routes.php | 26 +++++++++++ 8 files changed, 202 insertions(+) create mode 100644 src/App.php create mode 100644 src/Controllers/KeyController.php create mode 100644 src/Controllers/ServerDiscoveryController.php create mode 100644 src/Controllers/ServerImplementationController.php create mode 100644 src/DB.php create mode 100644 src/Router.php create mode 100644 src/Singleton.php create mode 100644 src/routes.php (limited to 'src') diff --git a/src/App.php b/src/App.php new file mode 100644 index 0000000..4c67f76 --- /dev/null +++ b/src/App.php @@ -0,0 +1,19 @@ +load(dirname(__DIR__) . "/.env"); + } + + public function run(): void + { + Router::getInstance()->run()->send(); + } +} diff --git a/src/Controllers/KeyController.php b/src/Controllers/KeyController.php new file mode 100644 index 0000000..bde1642 --- /dev/null +++ b/src/Controllers/KeyController.php @@ -0,0 +1,22 @@ + [ + "name" => "Matrix PHP", + "version" => "0.1.0", + ], + ]); + } + + public function query(string $serverName): Response + {} +} diff --git a/src/Controllers/ServerDiscoveryController.php b/src/Controllers/ServerDiscoveryController.php new file mode 100644 index 0000000..e5fdd31 --- /dev/null +++ b/src/Controllers/ServerDiscoveryController.php @@ -0,0 +1,25 @@ + "$_ENV[DOMAIN]:443", + ]); + } + + public function client(): Response + { + return new JsonResponse([ + "m.homeserver" => [ + "base_url" => "https://$_ENV[DOMAIN]", + ], + ]); + } +} diff --git a/src/Controllers/ServerImplementationController.php b/src/Controllers/ServerImplementationController.php new file mode 100644 index 0000000..4531ce5 --- /dev/null +++ b/src/Controllers/ServerImplementationController.php @@ -0,0 +1,19 @@ + [ + "name" => "Matrix PHP", + "version" => "0.1.0", + ], + ]); + } +} diff --git a/src/DB.php b/src/DB.php new file mode 100644 index 0000000..b536079 --- /dev/null +++ b/src/DB.php @@ -0,0 +1,22 @@ +connection = new \PDO("$driver:host=$host;port=$port;dbname=$dbname", $user, $password); + } +} diff --git a/src/Router.php b/src/Router.php new file mode 100644 index 0000000..deb852e --- /dev/null +++ b/src/Router.php @@ -0,0 +1,52 @@ +routes = new RouteCollection(); + $this->configurator = new RouteConfigurator($this->routes, $this->routes); + + $this->addRoutes(); + } + + public function run(): Response + { + $request = Request::createFromGlobals(); + + $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]; + + return (new $class)->$method(); + } catch (\Exception $exception) { + return new Response("500: " . $exception->getMessage(), 500); + } + } + + private function addRoutes(): void + { + $routes = include_once(__DIR__ . "/routes.php"); + $routes($this->configurator); + } +} diff --git a/src/Singleton.php b/src/Singleton.php new file mode 100644 index 0000000..b4d4598 --- /dev/null +++ b/src/Singleton.php @@ -0,0 +1,17 @@ +add("well_known_matrix_server", "/.well-known/matrix/server") + ->controller([ServerDiscoveryController::class, "server"]); + + $routes + ->add("well_known_matrix_client", "/.well-known/matrix/client") + ->controller([ServerDiscoveryController::class, "client"]); + + $routes + ->add("matrix_federation_version", "/_matrix/federation/v1/version") + ->controller([ServerImplementationController::class, "version"]); + + # /_matrix/key/v2/server + # /_matrix/key/v2/query + # /_matrix/key/v2/query/{serverName} +}; -- cgit v1.2.3