Sha256: be032ab1748b2947ce322a38332655d6a0a2bbd9f99cbc8940c607170453ae2e

Contents?: true

Size: 1.99 KB

Versions: 1

Compression:

Stored size: 1.99 KB

Contents

require 'geoip'
require 'sinatra'
require 'redis'
require 'json'
require_relative 'backend'

class RepsheetVisualizer < Sinatra::Base
  before do
    @mount = mount
  end

  helpers do
    def action(ip, blacklist=nil)
      blacklist = redis_connection.get("#{ip}:repsheet:blacklist") if blacklist.nil?
      if blacklist.nil? || blacklist == "false"
        "blacklist"
      else
        "allow"
      end
    end

    def h(text)
      Rack::Utils.escape_html(text)
    end
  end

  def redis_connection
    host = defined?(settings.redis_host) ? settings.redis_host : "localhost"
    port = defined?(settings.redis_port) ? settings.redis_port : 6379
    Redis.new(:host => host, :port => port)
  end

  def geoip_database
    geoip_database = defined?(settings.geoip_database) ? settings.geoip_database : nil
    raise "Missing GeoIP database settings" if geoip_database.nil?
    raise "Could not locate GeoIP database" unless File.exist?(geoip_database)
    GeoIP.new(settings.geoip_database)
  end

  def mount
    defined?(settings.mount) ? (settings.mount + "/") : "/"
  end

  def redis_expiry
    defined?(settings.redis_expiry) ? (settings.redis_expiry * 60 * 60) : (24 * 60 * 60)
  end

  get '/' do
    @suspects, @blacklisted = Backend.summary(redis_connection)
    erb :actors
  end

  get '/breakdown' do
    @data = Backend.breakdown(redis_connection)
    erb :breakdown
  end

  get '/worldview' do
    @data = Backend.worldview(redis_connection, geoip_database)
    erb :worldview
  end

  get '/activity/:ip' do
    @ip = params[:ip]
    @data = Backend.activity(redis_connection, @ip)
    @action = action(@ip)
    erb :activity
  end

  post '/action' do
    connection = redis_connection
    if params["action"] == "allow"
      connection.del("#{params[:ip]}:repsheet:blacklist")
    else
      ttl = connection.ttl("#{params[:ip]}:requests")
      connection.set("#{params[:ip]}:repsheet:blacklist", "true")
      connection.expire("#{params[:ip]}:repsheet:blacklist", ttl)
    end
    redirect back
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
repsheet_visualizer-0.2.1 lib/repsheet_visualizer/application/app.rb