Skip to content

Commit cc33364

Browse files
committed
added backend check + tests
1 parent 731e339 commit cc33364

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

app/controllers/api/v1/recordings_controller.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ def update_visibility
6969

7070
return render_error status: :forbidden unless allowed_visibilities.include?(new_visibility)
7171

72+
protected_visibilities = [Recording::VISIBILITIES[:protected], Recording::VISIBILITIES[:public_protected]]
73+
return render_error status: :forbidden if protected_visibilities.include?(new_visibility) && !@recording.protectable
74+
7275
BigBlueButtonApi.new(provider: current_provider).update_recording_visibility(record_id: @recording.record_id, visibility: new_visibility)
7376

7477
@recording.update!(visibility: new_visibility)

spec/controllers/recordings_controller_spec.rb

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,58 @@
236236
end
237237
end
238238

239+
context 'non-protectable recording' do
240+
let(:recording) { create(:recording, room:, protectable: false) }
241+
242+
it 'returns :forbidden when setting visibility to Protected' do
243+
expect_any_instance_of(BigBlueButtonApi).not_to receive(:update_recording_visibility)
244+
245+
expect do
246+
post :update_visibility, params: { visibility: Recording::VISIBILITIES[:protected], id: recording.record_id }
247+
end.not_to(change { recording.reload.visibility })
248+
249+
expect(response).to have_http_status(:forbidden)
250+
end
251+
252+
it 'returns :forbidden when setting visibility to Public/Protected' do
253+
expect_any_instance_of(BigBlueButtonApi).not_to receive(:update_recording_visibility)
254+
255+
expect do
256+
post :update_visibility, params: { visibility: Recording::VISIBILITIES[:public_protected], id: recording.record_id }
257+
end.not_to(change { recording.reload.visibility })
258+
259+
expect(response).to have_http_status(:forbidden)
260+
end
261+
end
262+
263+
context 'protectable recording' do
264+
let(:recording) { create(:recording, room:, protectable: true) }
265+
266+
it 'allows setting visibility to Protected' do
267+
expect_any_instance_of(BigBlueButtonApi)
268+
.to receive(:update_recording_visibility)
269+
.with(record_id: recording.record_id, visibility: Recording::VISIBILITIES[:protected])
270+
271+
expect do
272+
post :update_visibility, params: { visibility: Recording::VISIBILITIES[:protected], id: recording.record_id }
273+
end.to(change { recording.reload.visibility })
274+
275+
expect(response).to have_http_status(:ok)
276+
end
277+
278+
it 'allows setting visibility to Public/Protected' do
279+
expect_any_instance_of(BigBlueButtonApi)
280+
.to receive(:update_recording_visibility)
281+
.with(record_id: recording.record_id, visibility: Recording::VISIBILITIES[:public_protected])
282+
283+
expect do
284+
post :update_visibility, params: { visibility: Recording::VISIBILITIES[:public_protected], id: recording.record_id }
285+
end.to(change { recording.reload.visibility })
286+
287+
expect(response).to have_http_status(:ok)
288+
end
289+
end
290+
239291
context 'shared access' do
240292
let(:signed_in_user) { create(:user) }
241293
let(:recording) { create(:recording, room:, visibility: Recording::VISIBILITIES[:published]) }

0 commit comments

Comments
 (0)