summaryrefslogtreecommitdiff
path: root/src/Controllers/SyncController.php
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2025-09-11 13:19:21 +0200
committerDaniel Weipert <git@mail.dweipert.de>2025-09-11 13:19:21 +0200
commitb1b101fd98c8b4354a4e0c73e867d817466de30e (patch)
tree763e6d3dab13a2af8c324f7f879c5874dced76f2 /src/Controllers/SyncController.php
parentdb014ebf9f8f84a1a0d0972298e70bf29e57c37e (diff)
sync, rooms, events, etc
Diffstat (limited to 'src/Controllers/SyncController.php')
-rwxr-xr-xsrc/Controllers/SyncController.php59
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" => [],
+ ],
]);
}
}