diff options
author | Joas Schilling <coding@schilljs.com> | 2024-03-01 14:17:02 +0100 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2024-03-01 14:17:02 +0100 |
commit | 2343f89a6c0642964f0f8bba581cc83ba7e59329 (patch) | |
tree | 6c988eae72431c691fca03901918db098fe033d6 /lib/Federation | |
parent | 138d5851987382442ea7f8dfb8f55cea0a9303c8 (diff) |
feat(federation): Proxy the Talk-Hash header so clients are aware of changes
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'lib/Federation')
-rw-r--r-- | lib/Federation/Proxy/TalkV1/Controller/RoomController.php | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/lib/Federation/Proxy/TalkV1/Controller/RoomController.php b/lib/Federation/Proxy/TalkV1/Controller/RoomController.php index 29180f30f..73ef617b7 100644 --- a/lib/Federation/Proxy/TalkV1/Controller/RoomController.php +++ b/lib/Federation/Proxy/TalkV1/Controller/RoomController.php @@ -81,6 +81,33 @@ class RoomController { } /** + * @see \OCA\Talk\Controller\RoomController::joinFederatedRoom() + * + * @return DataResponse<Http::STATUS_OK|Http::STATUS_NOT_FOUND, array<empty>, array{X-Nextcloud-Talk-Proxy-Hash: string}> + * @throws CannotReachRemoteException + * + * 200: Federated user is still part of the room + * 404: Room not found + */ + public function joinFederatedRoom(Room $room, Participant $participant): DataResponse { + $proxy = $this->proxy->post( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v4/room/' . $room->getRemoteToken() . '/federation/active', + ); + + $statusCode = $proxy->getStatusCode(); + if (!in_array($statusCode, [Http::STATUS_OK, Http::STATUS_NOT_FOUND], true)) { + $this->proxy->logUnexpectedStatusCode(__METHOD__, $proxy->getStatusCode()); + throw new CannotReachRemoteException(); + } + + $headers = ['X-Nextcloud-Talk-Proxy-Hash' => $proxy->getHeader('X-Nextcloud-Talk-Hash')]; + + return new DataResponse([], $statusCode, $headers); + } + + /** * @see \OCA\Talk\Controller\RoomController::getCapabilities() * * @return DataResponse<Http::STATUS_OK, TalkCapabilities|array<empty>, array{X-Nextcloud-Talk-Hash: string}> @@ -98,7 +125,9 @@ class RoomController { /** @var TalkCapabilities|array<empty> $data */ $data = $this->proxy->getOCSData($proxy); - $headers = ['X-Nextcloud-Talk-Hash' => $proxy->getHeader('X-Nextcloud-Talk-Hash')]; + $headers = [ + 'X-Nextcloud-Talk-Hash' => $proxy->getHeader('X-Nextcloud-Talk-Hash'), + ]; return new DataResponse($data, Http::STATUS_OK, $headers); } |