class Garufa::Subscription
Attributes
error[R]
Public Class Methods
new(data, connection)
click to toggle source
# File lib/garufa/subscription.rb, line 10 def initialize(data, connection) @data = data @connection = connection @error = nil end
Public Instance Methods
channel()
click to toggle source
# File lib/garufa/subscription.rb, line 55 def channel @data['channel'] end
channel_data()
click to toggle source
# File lib/garufa/subscription.rb, line 59 def channel_data @data['channel_data'] end
channel_prefix()
click to toggle source
# File lib/garufa/subscription.rb, line 63 def channel_prefix channel[/^private-|presence-/].to_s[0...-1] end
notify(message)
click to toggle source
# File lib/garufa/subscription.rb, line 67 def notify(message) @connection.send_message message end
presence_channel?()
click to toggle source
# File lib/garufa/subscription.rb, line 43 def presence_channel? channel_prefix == 'presence' end
private_channel?()
click to toggle source
# File lib/garufa/subscription.rb, line 39 def private_channel? channel_prefix == 'private' end
public_channel?()
click to toggle source
# File lib/garufa/subscription.rb, line 35 def public_channel? !(private_channel? || presence_channel?) end
set_error(code, message)
click to toggle source
# File lib/garufa/subscription.rb, line 47 def set_error(code, message) @error = SubscriptionError.new(code, message) end
socket_id()
click to toggle source
# File lib/garufa/subscription.rb, line 71 def socket_id @connection.socket_id end
subscribe()
click to toggle source
# File lib/garufa/subscription.rb, line 16 def subscribe case true when !valid_channel? set_error(nil, 'Invalid channel') when !public_channel? && !valid_signature? set_error(nil, 'Invalid signature') when !public_channel? && !valid_app_key? set_error(nil, 'Invalid key') when already_subscribed? set_error(nil, "Already subscribed to channel: #{channel}") else Subscriptions.add self end end
success?()
click to toggle source
# File lib/garufa/subscription.rb, line 51 def success? @error.nil? end
unsubscribe()
click to toggle source
# File lib/garufa/subscription.rb, line 31 def unsubscribe Subscriptions.remove self end
Private Instance Methods
already_subscribed?()
click to toggle source
# File lib/garufa/subscription.rb, line 101 def already_subscribed? Subscriptions.include? self end
app_key()
click to toggle source
# File lib/garufa/subscription.rb, line 105 def app_key @data['auth'].split(':').first if @data['auth'] end
signature()
click to toggle source
# File lib/garufa/subscription.rb, line 109 def signature @data['auth'].split(':').last if @data['auth'] end
token(string_to_sign)
click to toggle source
# File lib/garufa/subscription.rb, line 96 def token(string_to_sign) digest = OpenSSL::Digest::SHA256.new OpenSSL::HMAC.hexdigest(digest, Config[:secret], string_to_sign) end
valid_app_key?()
click to toggle source
# File lib/garufa/subscription.rb, line 82 def valid_app_key? app_key && app_key == Config[:app_key] end
valid_channel?()
click to toggle source
# File lib/garufa/subscription.rb, line 77 def valid_channel? # See https://gist.github.com/mdpye/f062cacb8a9d5e3d102c channel =~ /^[A-Za-z0-9_\-=@,.;]+$/ end
valid_signature?()
click to toggle source
# File lib/garufa/subscription.rb, line 86 def valid_signature? string_to_sign = [ @connection.socket_id, channel, channel_data ].compact.join(':') token(string_to_sign) == signature end