Module: Honeypot
- Defined in:
- lib/honeypot/rack.rb,
lib/honeypot.rb,
lib/honeypot/railtie.rb
Overview
inspired by hoptoad_notifier charlesmaxwood.com/sessions-in-rack-and-rails-metal/
Defined Under Namespace
Class Method Summary collapse
Instance Method Summary collapse
- #log_action_dispatch_request(request) ⇒ Object
- #log_rack_env(env) ⇒ Object
- #log_remote_request(ip_address, url, referer) ⇒ Object
- #related_requestables(seen_remote_host_ids = Array.new) ⇒ Object
Class Method Details
.included(base) ⇒ Object
21 22 23 24 25 26 |
# File 'lib/honeypot.rb', line 21 def self.included(base) base.class_eval do has_many :remote_requests, :as => :requestable, :dependent => :destroy has_many :remote_hosts, :through => :remote_requests, :uniq => true end end |
Instance Method Details
#log_action_dispatch_request(request) ⇒ Object
28 29 30 |
# File 'lib/honeypot.rb', line 28 def log_action_dispatch_request(request) log_remote_request request.env['honeypot.remote_ip'], request.url, request.referer end |
#log_rack_env(env) ⇒ Object
32 33 34 35 |
# File 'lib/honeypot.rb', line 32 def log_rack_env(env) request = ::Rack::Request.new env log_remote_request request.env['honeypot.remote_ip'], request.url, request.referer end |
#log_remote_request(ip_address, url, referer) ⇒ Object
37 38 39 40 41 42 43 44 45 |
# File 'lib/honeypot.rb', line 37 def log_remote_request(ip_address, url, referer) remote_host = RemoteHost.find_or_create_by_ip_address ip_address remote_request = remote_requests.find_or_create_by_remote_host_id remote_host.id remote_request.last_http_referer = referer remote_request.last_request_uri = url remote_request.increment :hits remote_request.save! true end |
#related_requestables(seen_remote_host_ids = Array.new) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/honeypot.rb', line 47 def (seen_remote_host_ids = Array.new) set = Set.new conditions = seen_remote_host_ids.present? ? [ "remote_hosts.id NOT IN (?)", seen_remote_host_ids ] : nil remote_hosts.where(conditions).find_in_batches do |batch| batch.each do |remote_host| seen_remote_host_ids << remote_host.id remote_host.remote_requests.all(:include => :requestable).each do |remote_request| set << remote_request.requestable end end end if respond_to?(:actor) and actor != self set += actor.(seen_remote_host_ids) end set.delete self set end |