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(<< $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" => [], ]); } /** * PUT /_matrix/client/v3/rooms/{roomId}/send/{eventType}/{txnId} * * @see https://spec.matrix.org/v1.15/client-server-api/#put_matrixclientv3roomsroomidsendeventtypetxnid */ public function send(Request $request): Response { $accessToken = str_replace("Bearer ", "", $request->headers->get("authorization") ?: ""); $user = User::fetchWithAccessToken($accessToken); if (empty($user)) { throw new UnauthorizedError(); } $roomId = $request->attributes->get("roomId"); $eventType = EventType::from($request->attributes->get("eventType")); $transactionId = $request->attributes->get("txnId"); $body = json_decode($request->getContent(), true); RequestValidator::validateJson(); $message = $body["body"]; $messageType = MessageType::from($body["msgtype"]); return new JsonResponse([ "event_id" => "\$asdfghjkl:" . $_ENV["DOMAIN"], ]); } }