summaryrefslogtreecommitdiff
path: root/src/Controllers/RoomController.php
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2025-09-11 13:19:21 +0200
committerDaniel Weipert <git@mail.dweipert.de>2025-09-11 13:19:21 +0200
commitb1b101fd98c8b4354a4e0c73e867d817466de30e (patch)
tree763e6d3dab13a2af8c324f7f879c5874dced76f2 /src/Controllers/RoomController.php
parentdb014ebf9f8f84a1a0d0972298e70bf29e57c37e (diff)
sync, rooms, events, etc
Diffstat (limited to 'src/Controllers/RoomController.php')
-rwxr-xr-xsrc/Controllers/RoomController.php54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/Controllers/RoomController.php b/src/Controllers/RoomController.php
new file mode 100755
index 0000000..1067d29
--- /dev/null
+++ b/src/Controllers/RoomController.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace App\Controllers;
+
+use App\Database;
+use App\Errors\AppException;
+use App\Errors\ErrorCode;
+use App\Support\Parser;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpFoundation\JsonResponse;
+
+class RoomController
+{
+ /**
+ * GET /_matrix/client/v3/directory/room/{roomAlias}
+ *
+ * @see https://spec.matrix.org/v1.15/client-server-api/#get_matrixclientv3directoryroomroomalias
+ */
+ public function resolveAlias(Request $request): Response
+ {
+ $alias = $request->attributes->get("roomAlias");
+
+ $roomAlias = Parser::parseRoomAlias($alias); # TODO: on parse error => 400
+ $roomId = null;
+
+ if ($roomAlias["server"] != $_ENV["DOMAIN"]) {
+ # TODO: federation API resolve
+ $roomId = -1;
+ }
+ else {
+ $room = Database::getInstance()->query(<<<SQL
+ select id from rooms where name = :name
+ SQL, [
+ "name" => $roomAlias["name"],
+ ])->fetch();
+
+ $roomId = $room["id"] ?? null;
+ }
+
+ if (empty($roomId)) {
+ throw new AppException(
+ ErrorCode::NOT_FOUND,
+ "Room alias $alias not found.",
+ Response::HTTP_NOT_FOUND
+ );
+ }
+
+ return new JsonResponse([
+ "room_id" => $roomId,
+ "servers" => [],
+ ]);
+ }
+}