diff --git a/app/controllers/broadcasts_controller.rb b/app/controllers/broadcasts_controller.rb
index aad9bb1..060fe08 100644
--- a/app/controllers/broadcasts_controller.rb
+++ b/app/controllers/broadcasts_controller.rb
@@ -33,6 +33,11 @@ class BroadcastsController < ApplicationController
end
def update
+ unless params.has_key?(:broadcast)
+ @broadcast.regenerate_token
+ redirect_to([@project, @broadcast], notice: t('.reset_notice')) and return
+ end
+
@broadcast.update(broadcast_params)
@files = @broadcast.files.order("created_at DESC").paginate(page: 1)
diff --git a/app/views/broadcasts/show.html.erb b/app/views/broadcasts/show.html.erb
index 4d6e507..12e0a93 100644
--- a/app/views/broadcasts/show.html.erb
+++ b/app/views/broadcasts/show.html.erb
@@ -102,6 +102,7 @@
Copy URL
+ <%= link_to t('.actions.reset_url'), [@project, @broadcast], method: :patch, class: "btn btn-danger" %>
<% else %>
@@ -110,6 +111,7 @@
Copy URL
+ <%= link_to t('.actions.reset_url'), [@project, @broadcast], method: :patch, class: "btn btn-danger" %>
<% end %>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 290ef7e..54ae14f 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -217,6 +217,9 @@ en:
new:
heading:
Create Live Stream
+ show:
+ actions:
+ reset_url: Reset URL
splash:
actions:
book_demo: Schedule a Demo
@@ -235,6 +238,8 @@ en:
share_stream: Share live stream link with clients
stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera
stream_multiple_cameras: Stream multiple cameras at one time
+ update:
+ reset_notice: The Share URL has been reset, and the previous URL will no longer work. Please click "Copy URL" and share it again with those who you want to have access to this live stream
bulk_taggings:
new_bulk_tag_modal:
submit: Add
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 8c6711c..1bae211 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -81,6 +81,9 @@ es:
do_not_copy_warning: "Do not copy (ES)"
serial_number_label: "Serial Number (ES)"
broadcasts:
+ show:
+ actions:
+ reset_url: Reset URL (ES)
splash:
actions:
book_demo: Schedule a Demo
@@ -99,6 +102,8 @@ es:
share_stream: Share live stream link with clients
stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera
stream_multiple_cameras: Stream multiple cameras at one time
+ update:
+ reset_notice: The Share URL has been reset, and the previous URL will no longer work. Please click "Copy URL" and share it again with those who you want to have access to this live stream
contract_templates:
blank_contracts:
create:
diff --git a/spec/controllers/broadcasts_controller_spec.rb b/spec/controllers/broadcasts_controller_spec.rb
index 782299d..ed37ad2 100644
--- a/spec/controllers/broadcasts_controller_spec.rb
+++ b/spec/controllers/broadcasts_controller_spec.rb
@@ -203,6 +203,15 @@ RSpec.describe BroadcastsController, type: :controller do
expect(BroadcastsChannel).to have_received(:broadcast_file_upload_updates)
end
+
+ it "regenerates token if #update is called without broadcast param" do
+ old_token = broadcast.token
+ patch :update, params: { project_id: project.id, id: broadcast.id }
+
+ expect(response).to redirect_to [project, broadcast]
+ expect(flash.notice).to eq token_reset_notice
+ expect(Broadcast.last.token).not_to eq old_token
+ end
end
describe "#destroy" do
@@ -252,4 +261,8 @@ RSpec.describe BroadcastsController, type: :controller do
def create_stream
t 'broadcasts.splash.actions.create_stream'
end
+
+ def token_reset_notice
+ t 'broadcasts.update.reset_notice'
+ end
end
diff --git a/spec/features/user_managing_broadcasts_spec.rb b/spec/features/user_managing_broadcasts_spec.rb
index 9be98bc..21eac96 100644
--- a/spec/features/user_managing_broadcasts_spec.rb
+++ b/spec/features/user_managing_broadcasts_spec.rb
@@ -63,6 +63,21 @@ feature 'User managing broadcasts' do
expect(page).to have_content(recording.download_file_name)
end
+ scenario 'Clicking Reset URL regenerates broadcast token' do
+ broadcast = create(:broadcast, :with_stream, :with_files, project: project)
+ old_token = broadcast.token
+
+ visit project_broadcast_path(project, broadcast)
+
+ expect(page).to have_content reset_url
+ expect(page).to have_xpath "//input[@readonly][@value='#{broadcast_url(old_token)}']"
+
+ click_link reset_url
+ expect(Broadcast.last.token).not_to eq old_token
+ expect(page).to have_xpath "//input[@readonly][@value='#{broadcast_url(Broadcast.last.token)}']"
+ expect(page).to have_content token_reset_notice
+ end
+
scenario 'user can go back and forth between live session and previous sessions', js: true do
broadcast = create(:broadcast, :with_stream, :with_files, project: project)
recording = create(:broadcast_recording, broadcast: broadcast)
@@ -189,4 +204,12 @@ feature 'User managing broadcasts' do
def create_stream
t 'broadcasts.splash.actions.create_stream'
end
+
+ def reset_url
+ t 'broadcasts.show.actions.reset_url'
+ end
+
+ def token_reset_notice
+ t 'broadcasts.update.reset_notice'
+ end
end