class StreamNotificationsController < ApplicationController skip_before_action :require_login skip_after_action :verify_authorized, except: :index skip_after_action :verify_policy_scoped, only: :index skip_before_action :verify_authenticity_token before_action :set_broadcast, only: :create def create case notification_type when "video.live_stream.connected" @broadcast.streamer_connected! notify_users when "video.live_stream.recording" @broadcast.streamer_recording! notify_users when "video.live_stream.active" @broadcast.active! notify_users when "video.live_stream.disconnected" @broadcast.streamer_disconnected! notify_users when "video.live_stream.idle" @broadcast.streamer_idle! @broadcast.idle! notify_users when "video.asset.static_renditions.ready" asset_uid = notification.dig(:object, :id) playback_uid = notification.dig(:data, :playback_ids, 0, :id) file_name = notification.dig(:data, :static_renditions, :files, -1, :name) recording = @broadcast.broadcast_recordings.create!(asset_uid: asset_uid, asset_playback_uid: playback_uid, file_name: file_name) recordings = @broadcast.broadcast_recordings.order_by_recent.paginate(page: params[:page]) link = helpers.link_to(recording.broadcast_name.titleize, recording.download_url, target: "_blank") message = "Your recent live stream has been recorded and is available for download here: #{link}" BroadcastsChannel.stream_recording_ready(@broadcast, recordings, message) else Rails.logger.info notification_type Rails.logger.info notification end head :ok end private def notification params end def notification_type notification.dig(:type) end def notification_object_id notification.dig(:object, :id) end def set_broadcast if notification_type == "video.asset.static_renditions.ready" live_stream_id = notification.dig(:stream_notification, :data, :live_stream_id) @broadcast = Broadcast.find_by(stream_uid: live_stream_id) else @broadcast = Broadcast.find_by(stream_uid: notification_object_id) end if @broadcast.nil? logger.info "Ignoring broadcast from other environment. Type = #{notification_type}. Id = #{live_stream_id} / #{notification_object_id}" head :ok end end def notify_users BroadcastsChannel.broadcast_stream_updates(@broadcast) end end