From 1fc29c6029cfa8c7dce5535ff9cfb2daaa6427e0 Mon Sep 17 00:00:00 2001 From: Daniel Weipert Date: Sun, 10 Aug 2025 19:47:35 +0200 Subject: next commit --- .gitignore | 2 ++ bin/generate-self-signed-certificate | 3 +++ bin/matrix-commander | 3 +++ docker/nginx/.gitignore | 2 ++ docker/nginx/Dockerfile | 3 +++ docker/nginx/default.conf.template | 5 ++++- src/Controllers/ServerDiscoveryController.php | 8 +++++++ src/Controllers/ServerImplementationController.php | 9 ++++++++ src/ErrorCode.php | 11 ++++++++++ src/ErrorResponse.php | 16 ++++++++++++++ src/Router.php | 13 ++++++++++- src/routes.php | 25 +++++++++++++++++----- 12 files changed, 93 insertions(+), 7 deletions(-) create mode 100755 bin/generate-self-signed-certificate create mode 100755 bin/matrix-commander create mode 100644 docker/nginx/.gitignore create mode 100644 src/ErrorCode.php create mode 100644 src/ErrorResponse.php diff --git a/.gitignore b/.gitignore index 3d5163b..fde1da4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ /vendor/ .env + +credentials.json diff --git a/bin/generate-self-signed-certificate b/bin/generate-self-signed-certificate new file mode 100755 index 0000000..8f9cf6a --- /dev/null +++ b/bin/generate-self-signed-certificate @@ -0,0 +1,3 @@ +#!/bin/sh + +openssl req -x509 -nodes -newkey rsa:2048 -keyout docker/nginx/self-signed.key -out docker/nginx/self-signed.crt -subj "/CN=localhost" diff --git a/bin/matrix-commander b/bin/matrix-commander new file mode 100755 index 0000000..87ea5ae --- /dev/null +++ b/bin/matrix-commander @@ -0,0 +1,3 @@ +#!/bin/sh + +matrix-commander --no-ssl --plain -c credentials.json $@ diff --git a/docker/nginx/.gitignore b/docker/nginx/.gitignore new file mode 100644 index 0000000..d189a82 --- /dev/null +++ b/docker/nginx/.gitignore @@ -0,0 +1,2 @@ +self-signed.crt +self-signed.key diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile index cad37d9..47a3d22 100644 --- a/docker/nginx/Dockerfile +++ b/docker/nginx/Dockerfile @@ -1,3 +1,6 @@ FROM nginx:alpine ADD default.conf.template /etc/nginx/templates/ + +ADD self-signed.crt /etc/nginx/certs/ +ADD self-signed.key /etc/nginx/certs/ diff --git a/docker/nginx/default.conf.template b/docker/nginx/default.conf.template index c82c019..de2dc82 100644 --- a/docker/nginx/default.conf.template +++ b/docker/nginx/default.conf.template @@ -1,5 +1,8 @@ server { - listen 0.0.0.0:80; + listen 0.0.0.0:80 ssl; + + ssl_certificate /etc/nginx/certs/self-signed.crt; + ssl_certificate_key /etc/nginx/certs/self-signed.key; root /var/www/html/public; index index.php; diff --git a/src/Controllers/ServerDiscoveryController.php b/src/Controllers/ServerDiscoveryController.php index e5fdd31..076329b 100644 --- a/src/Controllers/ServerDiscoveryController.php +++ b/src/Controllers/ServerDiscoveryController.php @@ -22,4 +22,12 @@ class ServerDiscoveryController ], ]); } + + public function support(): Response + { + return new JsonResponse([ + "contacts" => [], + "support_page" => "", + ]); + } } diff --git a/src/Controllers/ServerImplementationController.php b/src/Controllers/ServerImplementationController.php index 4531ce5..b5d9d0f 100644 --- a/src/Controllers/ServerImplementationController.php +++ b/src/Controllers/ServerImplementationController.php @@ -16,4 +16,13 @@ class ServerImplementationController ], ]); } + + public function versions(): Response + { + return new JsonResponse([ + "versions" => [ + "v1.1", + ], + ]); + } } diff --git a/src/ErrorCode.php b/src/ErrorCode.php new file mode 100644 index 0000000..048ef34 --- /dev/null +++ b/src/ErrorCode.php @@ -0,0 +1,11 @@ + $code, + "error" => $message, + ]); + } +} diff --git a/src/Router.php b/src/Router.php index deb852e..319d5e2 100644 --- a/src/Router.php +++ b/src/Router.php @@ -28,6 +28,17 @@ class Router { $request = Request::createFromGlobals(); + if ($request->isMethod("OPTIONS")) { + $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", + ]); + + return $response; + } + $context = new RequestContext(); $context->fromRequest($request); @@ -40,7 +51,7 @@ class Router return (new $class)->$method(); } catch (\Exception $exception) { - return new Response("500: " . $exception->getMessage(), 500); + return new ErrorResponse(ErrorCode::UNKNOWN, "Unknown error occured"); } } diff --git a/src/routes.php b/src/routes.php index ff16ecc..25e2e1f 100644 --- a/src/routes.php +++ b/src/routes.php @@ -10,17 +10,32 @@ return function (RouteConfigurator $routes): void { $routes ->add("well_known_matrix_server", "/.well-known/matrix/server") - ->controller([ServerDiscoveryController::class, "server"]); - + ->controller([ServerDiscoveryController::class, "server"]) + ->methods(["GET"]); + $routes ->add("well_known_matrix_client", "/.well-known/matrix/client") - ->controller([ServerDiscoveryController::class, "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_federation_version", "/_matrix/federation/v1/version") - ->controller([ServerImplementationController::class, "version"]); + ->controller([ServerImplementationController::class, "version"]) + ->methods(["GET"]); + + $routes + ->add("matrix_client_versions", "/_matrix/client/versions") + ->controller([ServerImplementationController::class, "versions"]) + ->methods(["GET"]); # /_matrix/key/v2/server # /_matrix/key/v2/query # /_matrix/key/v2/query/{serverName} + + }; -- cgit v1.2.3