diff options
Diffstat (limited to 'src/Controllers')
-rw-r--r-- | src/Controllers/KeyController.php | 10 | ||||
-rwxr-xr-x | src/Controllers/RoomController.php | 21 | ||||
-rwxr-xr-x | src/Controllers/SyncController.php | 12 | ||||
-rwxr-xr-x | src/Controllers/UserController.php | 32 |
4 files changed, 71 insertions, 4 deletions
diff --git a/src/Controllers/KeyController.php b/src/Controllers/KeyController.php index b2a17a6..a8b4fb1 100644 --- a/src/Controllers/KeyController.php +++ b/src/Controllers/KeyController.php @@ -4,7 +4,9 @@ namespace App\Controllers; use App\Errors\AppException; use App\Errors\ErrorCode; +use App\Errors\UnauthorizedError; use App\Models\Tokens; +use App\Models\User; use App\Support\RequestValidator; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -27,11 +29,19 @@ class KeyController */ public function upload(Request $request): Response { + $accessToken = str_replace("Bearer ", "", $request->headers->get("authorization") ?: ""); + $user = User::fetchWithAccessToken($accessToken); + + if (empty($user)) { + throw new UnauthorizedError(); + } + $body = json_decode($request->getContent(), true); RequestValidator::validateJson(); return new JsonResponse([ "one_time_key_counts" => [ + "curve25519" => 0, "signed_curve25519" => count($body["one_time_keys"]) ], ]); diff --git a/src/Controllers/RoomController.php b/src/Controllers/RoomController.php index 367d754..c02d5ce 100755 --- a/src/Controllers/RoomController.php +++ b/src/Controllers/RoomController.php @@ -6,10 +6,12 @@ use App\Database; use App\Errors\AppException; use App\Errors\ErrorCode; use App\Errors\UnauthorizedError; +use App\Events\RoomMessageEvent; use App\Models\User; use App\Support\Parser; use App\Support\RequestValidator; use App\Types\EventType; +use App\Types\MembershipState; use App\Types\MessageType; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -81,8 +83,25 @@ class RoomController $message = $body["body"]; $messageType = MessageType::from($body["msgtype"]); + $eventId = "\$" . md5(random_bytes(512)) . ":" . $_ENV["DOMAIN"]; + $event = new RoomMessageEvent( + id: $eventId, + sender: $user->getId(), + originServerTimestamp: new \DateTime("now"), + content: [ + "body" => $message, + "msgtype" => $messageType->value, + ], + unsigned: [ + "age" => 1234, + "membership" => MembershipState::JOIN->value, + ], + roomId: $roomId, + ); + $event->insert(); + return new JsonResponse([ - "event_id" => "\$asdfghjkl:" . $_ENV["DOMAIN"], + "event_id" => $eventId, ]); } } diff --git a/src/Controllers/SyncController.php b/src/Controllers/SyncController.php index b7d51c3..243fab5 100755 --- a/src/Controllers/SyncController.php +++ b/src/Controllers/SyncController.php @@ -5,7 +5,10 @@ namespace App\Controllers; use App\Database; use App\Errors\UnauthorizedError; use App\Events\PresenceEvent; +use App\Events\RoomMemberEvent; +use App\Events\RoomMessageEvent; use App\Models\User; +use App\Types\MembershipState; use App\Types\PresenceState; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -62,14 +65,17 @@ class SyncController ], "timeline" => [ - "events" => [], + "events" => [ + (new RoomMemberEvent($user->getId(), $user->getId(), MembershipState::JOIN))->toJsonEncodeable(), + (new RoomMessageEvent($user->getId(), "Hallo Test Nachricht"))->toJsonEncodeable(), + ], "limited" => false, "prev_batch" => "", ], "unread_notifications" => [ - "highlight_count" => 1, - "notification_count" => 2, + "highlight_count" => random_int(0, 1), + "notification_count" => random_int(0, 10), ], "unread_thread_notifications" => new \stdClass(), diff --git a/src/Controllers/UserController.php b/src/Controllers/UserController.php new file mode 100755 index 0000000..a056e1d --- /dev/null +++ b/src/Controllers/UserController.php @@ -0,0 +1,32 @@ +<?php + +namespace App\Controllers; + +use App\Errors\UnauthorizedError; +use App\Models\User; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpFoundation\JsonResponse; + +class UserController +{ + /** + * POST /_matrix/client/r0/user/{userId}/filter + * POST /_matrix/client/v3/user/{userId}/filter + * + * @see https://spec.matrix.org/v1.16/client-server-api/#post_matrixclientv3useruseridfilter + */ + public function uploadFilter(Request $request): Response + { + $accessToken = str_replace("Bearer ", "", $request->headers->get("authorization") ?: ""); + $user = User::fetchWithAccessToken($accessToken); + + if (empty($user)) { + throw new UnauthorizedError(); + } + + return new JsonResponse([ + "filter_id" => "1234", + ]); + } +} |