summaryrefslogtreecommitdiffstats
path: root/lib/Federation
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2024-03-01 14:17:02 +0100
committerJoas Schilling <coding@schilljs.com>2024-03-01 14:17:02 +0100
commit2343f89a6c0642964f0f8bba581cc83ba7e59329 (patch)
tree6c988eae72431c691fca03901918db098fe033d6 /lib/Federation
parent138d5851987382442ea7f8dfb8f55cea0a9303c8 (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.php31
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);
}