diff options
author | Daniel Weipert <git@mail.dweipert.de> | 2025-09-11 13:19:21 +0200 |
---|---|---|
committer | Daniel Weipert <git@mail.dweipert.de> | 2025-09-11 13:19:21 +0200 |
commit | b1b101fd98c8b4354a4e0c73e867d817466de30e (patch) | |
tree | 763e6d3dab13a2af8c324f7f879c5874dced76f2 /src/Controllers/RoomController.php | |
parent | db014ebf9f8f84a1a0d0972298e70bf29e57c37e (diff) |
sync, rooms, events, etc
Diffstat (limited to 'src/Controllers/RoomController.php')
-rwxr-xr-x | src/Controllers/RoomController.php | 54 |
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" => [], + ]); + } +} |