diff options
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" => [], + ]); + } +} |