class CableX::Cable::Connection
Connection
class to serve entry point
Attributes
rate_limit[RW]
redis_config[RW]
device_id[RW]
rate_limit[RW]
redis[RW]
redis_config[RW]
Public Instance Methods
check_message(message)
click to toggle source
# File lib/cable_x/cable/connection.rb, line 52 def check_message(message) JSON.parse(message) rescue false end
close(reason, reconnect = false)
click to toggle source
# File lib/cable_x/cable/connection.rb, line 40 def close(reason, reconnect = false) transmit(type: ActionCable::INTERNAL[:message_types][:disconnect], reason: reason, reconnect: reconnect) websocket.close end
connect()
click to toggle source
# File lib/cable_x/cable/connection.rb, line 23 def connect self.device_id = Digest::SHA1.hexdigest(request_str) setup_rate_limit rescue StandardError => _e reject_unauthorized_connection end
malformed_message_response()
click to toggle source
# File lib/cable_x/cable/connection.rb, line 47 def malformed_message_response transmit(type: 'error', message: 'malformed_message') end
receive(message)
click to toggle source
Calls superclass method
# File lib/cable_x/cable/connection.rb, line 30 def receive(message) if (blocked_unit = check_block) || (blocked_unit = do_rate_limit) disconnect_client(blocked_unit) elsif check_message(message) super(message) else malformed_message_response end end
request_str()
click to toggle source
# File lib/cable_x/cable/connection.rb, line 66 def request_str headers_to_get = %w[SERVER_PROTOCOL SERVER_SOFTWARE REQUEST_METHOD REQUEST_PATH HTTP_USER_AGENT\ HTTP_CONNECTION HTTP_ORIGIN REMOTE_ADDR ORIGINAL_FULLPATH ORIGINAL_SCRIPT_NAME\ action_dispatch.authorized_host] headers = request.headers.to_h headers_to_get.map { |key| headers[key] }.join('-').gsub(' ', '') end
setup_rate_limit()
click to toggle source
# File lib/cable_x/cable/connection.rb, line 56 def setup_rate_limit self.rate_limit = self.class.rate_limit self.redis_config = self.class.redis_config if rate_limit self.redis = Redis.new(url: redis_config[:url]) raise StandardError, 'Rate limiting: Slow down!. Try after some time' if check_block end true end