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
Class Method Details
.included(base) ⇒ Object
20 21 22 23 24 25 |
# File 'lib/honeypot.rb', line 20 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_remote_request(request) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/honeypot.rb', line 27 def log_remote_request(request) effective_ip_address = [ request.env['rack.session']['honeypot.last_known_remote_ip'].to_s, request.remote_ip.to_s ].detect(&:present?) remote_host = RemoteHost.find_or_create_by_ip_address effective_ip_address remote_request = remote_requests.find_or_create_by_remote_host_id remote_host.id remote_request.last_http_referer = request.referer if request.referer.present? remote_request.last_request_uri = request.url if request.url.present? remote_request.increment :hits remote_request.save! true end |
#related_requestables(seen_remote_host_ids = []) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/honeypot.rb', line 41 def (seen_remote_host_ids = []) 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 |