Compare commits

..

No commits in common. "master" and "v0.3.0" have entirely different histories.

10 changed files with 54 additions and 62 deletions

View File

@ -1,5 +1,4 @@
Copyright (c) 2010 Charles Max Wood chuck@teachmetocode.com Copyright (c) 2010 Charles Max Wood chuck@teachmetocode.com
Copyright (c) 2013 Guillaume DOTT guillaume+github@dott.fr
Permission is hereby granted, free of charge, to any person Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation obtaining a copy of this software and associated documentation
@ -20,4 +19,4 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE. OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,5 +0,0 @@
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(:spec)
task :default => :spec

View File

@ -1,7 +1,6 @@
require 'net/dns' require 'net/dns'
require "project_honeypot/url" require "project_honeypot/url"
require "project_honeypot/base" require "project_honeypot/base"
require "project_honeypot/rack"
require "project_honeypot/rack/header" require "project_honeypot/rack/header"
require "project_honeypot/rack/forbidden" require "project_honeypot/rack/forbidden"

View File

@ -1,10 +0,0 @@
module ProjectHoneypot
class Rack
def initialize(app, options={})
@app = app
raise ArgumentError, 'Must specify an API key' unless options[:api_key]
ProjectHoneypot.api_key = options[:api_key]
end
end
end

View File

@ -1,15 +1,20 @@
module ProjectHoneypot module ProjectHoneypot::Rack
class Rack class Forbidden
class Forbidden < Rack def initialize(app, options={})
def call(env) @app = app
request = ::Rack::Request.new(env)
url = ProjectHoneypot.lookup(request.ip)
if url.safe? raise ArgumentError, 'Must specify an API key' unless options[:api_key]
@app.call(request.env) ProjectHoneypot.api_key = options[:api_key]
else end
[403, {"Content-Type" => "text/html"}, ["Forbidden"]]
end def call(env)
request = ::Rack::Request.new(env)
url = ProjectHoneypot.lookup(request.ip)
if url.safe?
@app.call(request.env)
else
[403, {"Content-Type" => "text/html"}, ["Forbidden"]]
end end
end end
end end

View File

@ -1,14 +1,19 @@
module ProjectHoneypot module ProjectHoneypot::Rack
class Rack class Header
class Header < Rack def initialize(app, options={})
def call(env) @app = app
request = ::Rack::Request.new(env)
url = ProjectHoneypot.lookup(request.ip)
env['PROJECT_HONEYPOT_SAFE'] = url.safe? raise ArgumentError, 'Must specify an API key' unless options[:api_key]
ProjectHoneypot.api_key = options[:api_key]
end
@app.call(request.env) def call(env)
end request = ::Rack::Request.new(env)
url = ProjectHoneypot.lookup(request.ip)
env['PROJECT_HONEYPOT_SAFE'] = url.safe?
@app.call(request.env)
end end
end end
end end

View File

@ -1,3 +1,3 @@
module ProjectHoneypot module ProjectHoneypot
VERSION = "0.3.1" VERSION = "0.3.0"
end end

View File

@ -10,7 +10,7 @@ Gem::Specification.new do |s|
s.email = ["chuck@teachmetocode.com", "guillaume+github@dott.fr"] s.email = ["chuck@teachmetocode.com", "guillaume+github@dott.fr"]
s.summary = %q{Project-Honeypot provides a programatic interface to the Project Honeypot services.} s.summary = %q{Project-Honeypot provides a programatic interface to the Project Honeypot services.}
s.description = %q{Project-Honeypot provides a programatic interface to the Project Honeypot services. It can be used to identify spammers, bogus commenters, and harvesters. You will need a FREE api key from http://projecthoneypot.org} s.description = %q{Project-Honeypot provides a programatic interface to the Project Honeypot services. It can be used to identify spammers, bogus commenters, and harvesters. You will need a FREE api key from http://projecthoneypot.org}
s.homepage = "https://github.com/gdott9/project_honeypot" s.homepage = ""
s.files = `git ls-files`.split($/) s.files = `git ls-files`.split($/)
s.executables = s.files.grep(%r{^bin/}).map{ |f| File.basename(f) } s.executables = s.files.grep(%r{^bin/}).map{ |f| File.basename(f) }

View File

@ -9,10 +9,9 @@ describe ProjectHoneypot::Base do
it "returns a Url object" do it "returns a Url object" do
url = base.lookup("127.10.10.5") url = base.lookup("127.10.10.5")
url.should be_a ProjectHoneypot::Url
expect(url).to be_a(ProjectHoneypot::Url) url.last_activity.should == 1
expect(url.last_activity).to eq(1) url.score.should == 63
expect(url.score).to eq(63)
end end
it "looks up non-ip addresses" do it "looks up non-ip addresses" do

View File

@ -5,37 +5,37 @@ describe ProjectHoneypot::Url do
let(:url) { ProjectHoneypot::Url.new("127.0.0.1", "127.1.63.3") } let(:url) { ProjectHoneypot::Url.new("127.0.0.1", "127.1.63.3") }
it "is safe" do it "is safe" do
expect(url.safe?).to be false url.should_not be_safe
expect(url.safe?(score: 63)).to be false url.safe?(score: 63).should be_false
expect(url.safe?(score: 64)).to be true url.safe?(score: 64).should be_true
expect(url.safe?(last_activity: 1)).to be false url.safe?(last_activity: 1).should be_false
expect(url.safe?(last_activity: 2)).to be true url.safe?(last_activity: 2).should be_true
expect(url.safe?(last_activity: 2, score: 64)).to be true url.safe?(last_activity: 2, score: 64).should be_true
expect(url.safe?(last_activity: 1, score: 64)).to be false url.safe?(last_activity: 1, score: 64).should be_false
expect(url.safe?(last_activity: 2, score: 63)).to be false url.safe?(last_activity: 2, score: 63).should be_false
expect(url.safe?(offenses: [:comment_spammer])).to be true url.safe?(offenses: [:comment_spammer]).should be_true
expect(url.safe?(offenses: [:suspicious, :comment_spammer])).to be false url.safe?(offenses: [:suspicious, :comment_spammer]).should be_false
end end
it "has the correct latest activity" do it "has the correct latest activity" do
expect(url.last_activity).to eq(1) url.last_activity.should == 1
end end
it "has the correct score" do it "has the correct score" do
expect(url.score).to eq(63) url.score.should == 63
end end
it "has the correct offenses" do it "has the correct offenses" do
expect(url.offenses).to include(:suspicious) url.offenses.should include(:suspicious)
expect(url.offenses).to include(:harvester) url.offenses.should include(:harvester)
expect(url.offenses).to_not include(:comment_spammer) url.offenses.should_not include(:comment_spammer)
expect(url).to be_suspicious url.should be_suspicious
expect(url).to be_harvester url.should be_harvester
expect(url).to_not be_comment_spammer url.should_not be_comment_spammer
end end
end end