Class: BroadcastHub::StreamKeyResolver

Inherits:
Object
  • Object
show all
Defined in:
app/services/broadcast_hub/stream_key_resolver.rb

Overview

Validates subscription context and resolves an Action Cable stream key.

Defined Under Namespace

Classes: Unauthorized

Class Method Summary collapse

Class Method Details

.resolve!(context) ⇒ String

Resolves the stream key for a subscription context.

Parameters:

Returns:

  • (String)

    stream identifier used by Action Cable

Raises:

  • (Unauthorized)

    when the context is invalid or not authorized



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'app/services/broadcast_hub/stream_key_resolver.rb', line 15

def resolve!(context)
  reject!("missing_resource") if context.resource_name.to_s.strip.empty?

  allowed_resources = Array(configuration.allowed_resources).map(&:to_s)
  reject!("invalid_resource") unless allowed_resources.include?(context.resource_name.to_s)

  authorize_scope = configuration.authorize_scope
  reject!("missing_authorize_scope") unless authorize_scope.respond_to?(:call)
  reject!("unauthorized_scope") unless authorize_scope.call(context)

  stream_key_resolver = configuration.stream_key_resolver
  reject!("missing_stream_key_resolver") unless stream_key_resolver.respond_to?(:call)

  stream_key = stream_key_resolver.call(context)
  reject!("missing_identity") if stream_key.to_s.strip.empty?

  stream_key
end