class Colossus::Faye::Extension
Faye
extension implementing all the presence, authorization, authentification and push logic.
Constants
- VALID_STATUSES
Attributes
colossus[R]
faye[R]
Public Class Methods
new(faye, colossus = Colossus.new)
click to toggle source
# File lib/colossus/faye/extension.rb, line 10 def initialize(faye, colossus = Colossus.new) @faye = faye @colossus = colossus faye.add_extension(self) end
Public Instance Methods
acceptable?(message)
click to toggle source
# File lib/colossus/faye/extension.rb, line 32 def acceptable?(message) message['ext'] && (message['ext']['user_token'] || message['ext']['writer_token']) end
handle_invalid_token(message)
click to toggle source
# File lib/colossus/faye/extension.rb, line 51 def handle_invalid_token(message) message['error'] = 'Invalid Token' message end
handle_set_status(message)
click to toggle source
# File lib/colossus/faye/extension.rb, line 72 def handle_set_status(message) token = message['ext']['user_token'] user_id = message['channel'].partition('/users/').last status = message['data'] && message['data']['status'] if invalid_user_channel?(user_id) message['error'] = 'The only accepted channel_name is users/:user_id' return message end unless status && VALID_STATUSES.include?(status) message['error'] = 'Invalid Status' return message end unless colossus.verifier.verify_token(token, user_id) message['error'] = 'Invalid Token' return message end colossus.set(user_id, message['clientId'], status) message end
handle_subscribe(message)
click to toggle source
# File lib/colossus/faye/extension.rb, line 56 def handle_subscribe(message) token = message['ext']['user_token'] user_id = message['subscription'].partition('/users/').last if invalid_user_channel?(user_id) message['error'] = 'The only accepted channel_name is users/:user_id' return message end unless colossus.verifier.verify_token(token, user_id) message['error'] = 'Invalid Token' end message end
handle_user_action(message)
click to toggle source
# File lib/colossus/faye/extension.rb, line 37 def handle_user_action(message) if message['channel'] == '/meta/subscribe' handle_subscribe(message) elsif message['channel'].start_with?('/meta/') message elsif message['channel'].start_with?('/users/') handle_set_status(message) else message['error'] = 'Unknown Action' end message end
incoming(message, callback)
click to toggle source
# File lib/colossus/faye/extension.rb, line 16 def incoming(message, callback) if !acceptable?(message) handle_invalid_token(message) message.delete('data') message.delete('ext') elsif message['ext']['user_token'] handle_user_action(message) message.delete('data') message.delete('ext') elsif message['ext']['writer_token'] message.delete('ext') end callback.call(message) end
invalid_user_channel?(user_id)
click to toggle source
# File lib/colossus/faye/extension.rb, line 97 def invalid_user_channel?(user_id) user_id.empty? || user_id.include?('*') || user_id.include?('/') end