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/SyncController.php | |
parent | db014ebf9f8f84a1a0d0972298e70bf29e57c37e (diff) |
sync, rooms, events, etc
Diffstat (limited to 'src/Controllers/SyncController.php')
-rwxr-xr-x | src/Controllers/SyncController.php | 59 |
1 files changed, 53 insertions, 6 deletions
diff --git a/src/Controllers/SyncController.php b/src/Controllers/SyncController.php index 19da1b5..76b6a26 100755 --- a/src/Controllers/SyncController.php +++ b/src/Controllers/SyncController.php @@ -2,25 +2,72 @@ namespace App\Controllers; +use App\Database; use App\Errors\UnauthorizedError; +use App\Events\PresenceEvent; +use App\Types\PresenceState; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\JsonResponse; class SyncController { - public function sync(): Response + /** + * GET /_matrix/client/v3/sync + * + * @see https://spec.matrix.org/v1.15/client-server-api/#get_matrixclientv3sync + * @see https://spec.matrix.org/v1.15/client-server-api/#extensions-to-sync + */ + public function sync(Request $request): Response { - $request = Request::createFromGlobals(); + $accessToken = str_replace("Bearer ", "", $request->headers->get("authorization") ?: ""); + $user = Database::getInstance()->query(<<<SQL + select users.* from users left join tokens on tokens.user_id = users.id where tokens.access_token=:access_token + SQL, [ + "access_token" => $accessToken, + ])->fetch(); - if ($request->headers->get("authorization") != "Bearer abc123") { - # TODO: get user based on bearer token + # TODO: token validation + + if (empty($user)) { throw new UnauthorizedError(); } + $filter = $request->query->get("filter", ""); + $syncFullState = $request->query->get("full_state", false); + $setPresence = PresenceState::tryFrom($request->query->get("set_presence") ?? "") ?? PresenceState::ONLINE; + $since = $request->query->get("since", ""); + $timeout = $request->query->get("timeout", 0); + return new JsonResponse([ - "account_data" => [], - "next_batch" => "", + "account_data" => [ + "events" => [ + + ], + ], + + "device_lists" => [], + + "device_one_time_keys_count" => 10, + + "next_batch" => "next_batch_id", + + "presence" => [ + "events" => [ + (new PresenceEvent(sender: $user["id"]))->toJsonEncodeable(), + ], + ], + + "rooms" => [ + "invite" => [], + "join" => [], + "knock" => [], + "leave" => [], + ], + + "to_device" => [ + "events" => [], + ], ]); } } |