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