Module: Honeypot

Defined in:
lib/honeypot/rack.rb,
lib/honeypot.rb,
lib/honeypot/railtie.rb

Overview

Defined Under Namespace

Classes: Rack, Railtie

Class Method Summary collapse

Instance Method Summary collapse

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


47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/honeypot.rb', line 47

def related_requestables(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.related_requestables(seen_remote_host_ids)
  end
  set.delete self
  set
end