summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2024-05-16 11:37:02 +0200
committerDaniel Calviño Sánchez <danxuliu@gmail.com>2024-05-20 11:57:44 +0200
commit623575db6c467663d3f46802bc9c5f755077c779 (patch)
tree82127516d6242b75a2d111313c6f9faba2cb9b51
parentf40ece0acd19c7da2303780ebe4fea4fff742b52 (diff)
fix(recording): Stop broken recording backend
Signed-off-by: Joas Schilling <coding@schilljs.com> Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
-rw-r--r--lib/Controller/PageController.php8
-rw-r--r--lib/Controller/RecordingController.php17
2 files changed, 25 insertions, 0 deletions
diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php
index c91c28413..96925a0a7 100644
--- a/lib/Controller/PageController.php
+++ b/lib/Controller/PageController.php
@@ -280,6 +280,7 @@ class PageController extends Controller {
#[NoCSRFRequired]
#[PublicPage]
#[BruteForceProtection(action: 'talkRoomToken')]
+ #[BruteForceProtection(action: 'talkRecordingStatus')]
public function recording(string $token): Response {
try {
$room = $this->manager->getRoomByToken($token);
@@ -291,6 +292,13 @@ class PageController extends Controller {
return $response;
}
+ if ($room->getCallRecording() !== Room::RECORDING_VIDEO_STARTING && $room->getCallRecording() !== Room::RECORDING_AUDIO_STARTING) {
+ $response = new NotFoundResponse();
+ $this->logger->debug('Recording "' . ($this->userId ?? 'ANONYMOUS') . '" throttled for accessing "' . $token . '"', ['app' => 'spreed-bfp']);
+ $response->throttle(['token' => $token, 'action' => 'talkRecordingStatus']);
+ return $response;
+ }
+
if (class_exists(LoadViewer::class)) {
$this->eventDispatcher->dispatchTyped(new LoadViewer());
}
diff --git a/lib/Controller/RecordingController.php b/lib/Controller/RecordingController.php
index 91c84d520..77e15a048 100644
--- a/lib/Controller/RecordingController.php
+++ b/lib/Controller/RecordingController.php
@@ -161,6 +161,7 @@ class RecordingController extends AEnvironmentAwareController {
#[OpenAPI(scope: 'backend-recording')]
#[PublicPage]
#[BruteForceProtection(action: 'talkRecordingSecret')]
+ #[BruteForceProtection(action: 'talkRecordingStatus')]
public function backend(): DataResponse {
$json = $this->getInputStream();
if (!$this->validateBackendRequest($json)) {
@@ -218,6 +219,22 @@ class RecordingController extends AEnvironmentAwareController {
], Http::STATUS_NOT_FOUND);
}
+ if ($room->getCallRecording() !== Room::RECORDING_VIDEO_STARTING && $room->getCallRecording() !== Room::RECORDING_AUDIO_STARTING) {
+ $this->logger->error('Recording backend tried to start recording in room {token}, but it was not requested by a moderator.', [
+ 'token' => $token,
+ 'app' => 'spreed-recording',
+ ]);
+ $response = new DataResponse([
+ 'type' => 'error',
+ 'error' => [
+ 'code' => 'no_such_room',
+ 'message' => 'Room not found.',
+ ],
+ ], Http::STATUS_NOT_FOUND);
+ $response->throttle(['action' => 'talkRecordingStatus']);
+ return $response;
+ }
+
try {
$participant = $this->participantService->getParticipantByActor($room, $actor['type'], $actor['id']);
} catch (ParticipantNotFoundException $e) {