From 140ea86b7c48bcfc8b8da1cf2cca15692f401af7 Mon Sep 17 00:00:00 2001 From: Aaron Suggs Date: Tue, 24 Jul 2012 19:40:55 -0400 Subject: [PATCH] Initial commit --- .gitignore | 1 + Gemfile | 2 ++ lib/rack/attack.rb | 27 +++++++++++++++++++++++++++ lib/rack/attack/version.rb | 5 +++++ rack-attack.gemspec | 29 +++++++++++++++++++++++++++++ spec/rack_attack_spec.rb | 18 ++++++++++++++++++ spec/spec_helper.rb | 7 +++++++ 7 files changed, 89 insertions(+) create mode 100644 .gitignore create mode 100644 Gemfile create mode 100644 lib/rack/attack.rb create mode 100644 lib/rack/attack/version.rb create mode 100644 rack-attack.gemspec create mode 100644 spec/rack_attack_spec.rb create mode 100644 spec/spec_helper.rb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b844b14 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +Gemfile.lock diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..e45e65f --- /dev/null +++ b/Gemfile @@ -0,0 +1,2 @@ +source :rubygems +gemspec diff --git a/lib/rack/attack.rb b/lib/rack/attack.rb new file mode 100644 index 0000000..1f3b7f0 --- /dev/null +++ b/lib/rack/attack.rb @@ -0,0 +1,27 @@ +require 'rack' +module Rack + class Attack + class << self + + def block + end + + def throttle + end + + def whitelist + end + + end + + def initialize(app) + @app = app + end + + def call(env) + puts 'Rack attack!' + @app.call(env) + end + + end +end diff --git a/lib/rack/attack/version.rb b/lib/rack/attack/version.rb new file mode 100644 index 0000000..d1560dd --- /dev/null +++ b/lib/rack/attack/version.rb @@ -0,0 +1,5 @@ +module Rack + class Attack + VERSION = '0.0.1' + end +end diff --git a/rack-attack.gemspec b/rack-attack.gemspec new file mode 100644 index 0000000..babd70a --- /dev/null +++ b/rack-attack.gemspec @@ -0,0 +1,29 @@ +# -*- encoding: utf-8 -*- +lib = File.expand_path('../lib/', __FILE__) +$:.unshift lib unless $:.include?(lib) + +require 'rack/attack/version' + +Gem::Specification.new do |s| + s.name = 'rack-attack' + s.version = Rack::Attack::VERSION + + s.authors = ["Aaron Suggs"] + s.description = "A flexible rack middleware for throttling and blocking requests" + s.email = "aaron@ktheory.com" + + s.files = Dir.glob("{bin,lib}/**/*") + %w(LICENSE README.rdoc Rakefile) + s.homepage = 'http://github.com/kickstarter/rack-attack' + s.rdoc_options = ["--charset=UTF-8"] + s.require_paths = ["lib"] + s.summary = %q{Block & throttle abusive requests} + s.test_files = Dir.glob("spec/**/*") + + s.required_ruby_version = '>= 1.9.3' # Maybe less? + + s.add_dependency 'rack' + s.add_development_dependency 'minitest' + s.add_development_dependency 'rack-test' + s.add_development_dependency 'debugger', '~> 1.1.3' +end + diff --git a/spec/rack_attack_spec.rb b/spec/rack_attack_spec.rb new file mode 100644 index 0000000..5cdd426 --- /dev/null +++ b/spec/rack_attack_spec.rb @@ -0,0 +1,18 @@ +require_relative 'spec_helper' + +describe 'Rack::Attack' do + include Rack::Test::Methods + + def app + Rack::Builder.new { + use Rack::Attack + run lambda {|env| [200, {}, ['Hello World']]} + }.to_app + end + + it "says hello" do + get '/' + last_response.status.must_equal 200 + last_response.body.must_equal 'Hello World' + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..afb51d8 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,7 @@ +require "rubygems" +require "bundler/setup" + +require "minitest/autorun" +require "rack" +require "rack/test" +require "rack/attack"