diff --git a/app/controllers/concerns/bbb_server.rb b/app/controllers/concerns/bbb_server.rb index 1346f187ff0701a278cde2c392a229d203e077a6..26d9ea2d46db9dcd32617c8b4c9e1db238fca019 100644 --- a/app/controllers/concerns/bbb_server.rb +++ b/app/controllers/concerns/bbb_server.rb @@ -119,6 +119,20 @@ module BbbServer bbb_server.publish_recordings(record_id, false) end + # Protect a recording + def protect_recording(record_id, meta = {}) + meta[:recordID] = record_id + meta[:protect] = true + bbb_server.send_api_request("updateRecordings", meta) + end + + # Unprotect a recording + def unprotect_recording(record_id, meta = {}) + meta[:recordID] = record_id + meta[:protect] = false + bbb_server.send_api_request("updateRecordings", meta) + end + # Deletes a recording from a room. def delete_recording(record_id) bbb_server.delete_recordings(record_id) diff --git a/app/controllers/recordings_controller.rb b/app/controllers/recordings_controller.rb index f3e200bac2b1ec58445fd6ac081ca42bb802efc9..54b9d784d40c51f15814be59a53f29ee5ccf475c 100644 --- a/app/controllers/recordings_controller.rb +++ b/app/controllers/recordings_controller.rb @@ -28,6 +28,12 @@ class RecordingsController < ApplicationController "meta_#{META_LISTED}" => (params[:state] == "public"), } + if params[:state] == "protected" + protect_recording(params[:record_id]) + else + unprotect_recording(params[:record_id]) + end + if params[:state] == "inaccessible" unpublish_recording(params[:record_id]) else diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 6e752d0bd0558bc1aca14aadcf677004d7f4b15e..550c71a212f0e6989b9bb4e73a91ce4e91052f7e 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -147,4 +147,9 @@ module ApplicationHelper current_user&.role&.get_permission("can_launch_recording") end end + + # Returns true if protected recordings is enabled on BigBlueButton/Scalelite server + def protected_recording?(rec) + !rec[:protected].nil? + end end diff --git a/app/views/shared/components/_recording_row.html.erb b/app/views/shared/components/_recording_row.html.erb index a6c4cb3cd06326973238e9c4153c85e83fe00571..091fbc152cb534118cce40e1fdff102c48bc78ff 100644 --- a/app/views/shared/components/_recording_row.html.erb +++ b/app/views/shared/components/_recording_row.html.erb @@ -52,6 +52,8 @@ <div class="dropdown"> <% if recording[:metadata][:"gl-listed"] == "true" %> <button class="btn btn-sm btn-secondary dropdown-toggle" data-toggle="dropdown"><i class="dropdown-icon fas fa-globe px-2"></i> <%= t("recording.visibility.public") %></button> + <% elsif recording[:protected] == "true" %> + <button class="btn btn-sm btn-secondary dropdown-toggle" data-toggle="dropdown"><i class="dropdown-icon fas fa-shield-alt px-2"></i> <%= t("recording.visibility.protected") %></button> <% elsif !recording[:published] %> <button class="btn btn-sm btn-secondary dropdown-toggle" data-toggle="dropdown"><i class="dropdown-icon fas fa-lock px-2"></i> <%= t("recording.visibility.inaccessible") %></button> <% else %> @@ -61,6 +63,11 @@ <%= button_to update_recording_path(meetingID: recording[:meetingID], record_id: recording[:recordID], state: "public"), class: "dropdown-item", "data-disable": "" do %> <i class="dropdown-icon fas fa-globe"></i> <%= t("recording.visibility.public") %> <% end %> + <% if protected_recording?(recording) %> + <%= button_to update_recording_path(meetingID: recording[:meetingID], record_id: recording[:recordID], state: "protected"), class: "dropdown-item", "data-disable": "" do %> + <i class="dropdown-icon fas fa-shield-alt"></i> <%= t("recording.visibility.protected") %> + <% end %> + <% end %> <%= button_to update_recording_path(meetingID: recording[:meetingID], record_id: recording[:recordID], state: "unlisted"), class: "dropdown-item", "data-disable": "" do %> <i class="dropdown-icon fas fa-link"></i> <%= t("recording.visibility.unlisted") %> <% end %>