summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rwxr-xr-xbin/generate-self-signed-certificate3
-rwxr-xr-xbin/matrix-commander3
-rw-r--r--docker/nginx/.gitignore2
-rw-r--r--docker/nginx/Dockerfile3
-rw-r--r--docker/nginx/default.conf.template5
-rw-r--r--src/Controllers/ServerDiscoveryController.php8
-rw-r--r--src/Controllers/ServerImplementationController.php9
-rw-r--r--src/ErrorCode.php11
-rw-r--r--src/ErrorResponse.php16
-rw-r--r--src/Router.php13
-rw-r--r--src/routes.php25
12 files changed, 93 insertions, 7 deletions
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 @@
+<?php
+
+namespace App;
+
+enum ErrorCode: string
+{
+ case FORBIDDEN = "M_FORBIDDEN";
+ case UNKNOWN_TOKEN = "M_UNKNOWN_TOKEN";
+
+ case UNKNOWN = "M_UNKNOWN";
+}
diff --git a/src/ErrorResponse.php b/src/ErrorResponse.php
new file mode 100644
index 0000000..05a77d1
--- /dev/null
+++ b/src/ErrorResponse.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace App;
+
+use Symfony\Component\HttpFoundation\JsonResponse;
+
+class ErrorResponse extends JsonResponse
+{
+ public function __construct(ErrorCode $code, string $message)
+ {
+ parent::__construct([
+ "errcode" => $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}
+
+
};