From 35b5dbeb2dbd8c3602fbb4933af698611fbf6d32 Mon Sep 17 00:00:00 2001 From: Finn Date: Sat, 19 Feb 2022 13:05:59 +0100 Subject: [PATCH] add basic invite handling --- lib/Service/MatrixListenerService.php | 75 +++++++++++++++++++++------ 1 file changed, 58 insertions(+), 17 deletions(-) diff --git a/lib/Service/MatrixListenerService.php b/lib/Service/MatrixListenerService.php index a1cf6d4..4ece0b5 100644 --- a/lib/Service/MatrixListenerService.php +++ b/lib/Service/MatrixListenerService.php @@ -7,10 +7,11 @@ use Aryess\PhpMatrixSdk\Exceptions\MatrixHttpLibException; use Aryess\PhpMatrixSdk\Exceptions\MatrixRequestException; use Aryess\PhpMatrixSdk\Exceptions\ValidationException; use Aryess\PhpMatrixSdk\MatrixClient; +use OCA\UPschooling\Exceptions\RoomNotFoundException; use Psr\Log\LoggerInterface; /** - * + * This service will be used by the matrix listener background job to execute events and handle incoming 'matrix requests' */ class MatrixListenerService { @@ -20,47 +21,87 @@ class MatrixListenerService { /** @var MatrixClient */ private $client; + /** @var MatrixService */ + private $matrixService; + + /** @var token */ + private $token; + /** @var string */ private $registrationSecret = "oyYh_iEJ7Aim.iB+ye.Xk;Gl3iHFab5*8K,zv~IulT85P=c-38"; /** * @param LoggerInterface $logger + * @param MatrixService $matrixService * @throws MatrixException * @throws MatrixHttpLibException * @throws MatrixRequestException * @throws ValidationException */ - public function __construct(LoggerInterface $logger) { + public function __construct(LoggerInterface $logger, MatrixService $matrixService) { $this->logger = $logger; + $this->matrixService = $matrixService; + $serverUrl = "http://synapse:8008"; $user = "upschooling"; + $this->client = new MatrixClient($serverUrl); - $this->client->login($user, "secret", true); + //TODO: Replace hard coded pw + $this->token = $this->client->login($user, "secret", true); $this->logger->debug("Logged in as " . $user . " on server " . $serverUrl); + } /** - * Handle invites + * listens on all sorts of incoming matrix requests * + * @return void * @throws MatrixException + * @throws MatrixHttpLibException + * @throws MatrixRequestException + * @throws RoomNotFoundException */ - public function handleInvites(int $roomId, array $someState) { - $this->client->joinRoom($roomId); - } - - public static function test() { - var_dump("Test"); - } - public function listen() { $syncResponse = $this->client->api()->sync(); + $nextBatch = $syncResponse['next_batch']; foreach (array_get($syncResponse, 'rooms.invite', []) as $roomId => $inviteRoom) { - try { - $this->client->joinRoom($roomId); - } catch (\Exception $e) { - $this->logger->info("Join for room: " . $roomId . " failed."); + $this->handleInvite($roomId); + } + + $rooms = $this->client->getRooms(); + + foreach ($rooms as $roomId => $room) { + $messages = $this->client->api()->getRoomMessages($roomId, $nextBatch, "b", 100)["chunk"]; + foreach ($messages as $message) { + if ($message["type"] == "m.room.message" && $message["content"]["msgtype"] == "m.text") + var_dump($message["content"]["body"]); } - $this->logger->debug("joined " . $roomId); } } + + /** + * TBD: Check if the user on the other side is actually allowed to talk to this matrix instance + * @return void + */ + private function auth() { + + } + + /** + * Given invitation object it'll enter the room + * + * @param int $roomId the roomID + * @return void + * @throws MatrixException|RoomNotFoundException + */ + private function handleInvite(int $roomId) { + try { + $this->client->joinRoom($roomId); + $this->client->api()->sendMessageEvent($roomId, "upschooling.matrix.accepted", []); + } catch (\Exception $e) { + $this->logger->info("Join for room: " . $roomId . " failed."); + } + $this->matrixService->setProperty($roomId, "upschooling.s2s", ["approved" => true]); + $this->logger->debug("joined " . $roomId); + } }