bot-away 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,13 +1,5 @@
1
- ###
2
- # The original implementation of BotAway extended ActionView::Helpers::FormBuilder, and these tests were written
3
- # for it. This approach has since been abandoned in favor of a direct override of ActionView::Helpers::InstanceTag for
4
- # reasons of efficiency. The FormBuilder tests have been kept around simply for an extra layer of functional testing.
5
- ###
6
-
7
1
  require 'spec_helper'
8
2
 
9
- class MockObject; attr_accessor :method_name; def initialize; @method_name = 'method_value'; end; end
10
-
11
3
  describe ActionView::Helpers::FormBuilder do
12
4
  subject { builder }
13
5
 
@@ -26,7 +18,7 @@ describe ActionView::Helpers::FormBuilder do
26
18
 
27
19
  it "should not obfuscate names that have been explicitly ignored" do
28
20
  BotAway.accepts_unfiltered_params 'method_name'
29
- builder.text_field('method_name').should_not match(/name="a0844d45bf150668ff1d86a6eb491969/)
21
+ builder.text_field('method_name').should_not match(/name="#{obfuscated_name}/)
30
22
  BotAway.unfiltered_params.delete 'method_name'
31
23
  end
32
24
 
@@ -39,7 +31,7 @@ describe ActionView::Helpers::FormBuilder do
39
31
  #grouped_collection_select(method, collection, group_method, group_label_method, option_key_method,
40
32
  # option_value_method, options = {}, html_options = {})
41
33
  obfuscates(:grouped_collection_select) do
42
- builder.grouped_collection_select method_name, [MockObject.new], :method_name, :method_name, :to_s, :to_s
34
+ builder.grouped_collection_select method_name, [MockObject.new], object_name, method_name, method_name, :to_s
43
35
  end
44
36
 
45
37
  #time_zone_select(method, priority_zones = nil, options = {}, html_options = {})
@@ -51,13 +43,14 @@ describe ActionView::Helpers::FormBuilder do
51
43
  obfuscates(field) { builder.send(field, method_name) }
52
44
  end
53
45
 
54
- obfuscates(:radio_button, '53640013be550817d040597218884288') { builder.radio_button method_name, :value }
46
+ obfuscates(:radio_button, RAILS_VERSION >= "3.0" ? "767c870add970ab6d64803043c4ccfbb" :
47
+ "53640013be550817d040597218884288") { builder.radio_button method_name, :value }
55
48
 
56
49
  context "#label" do
57
50
  subject { dump { builder.label(method_name) } }
58
51
 
59
52
  it "links labels to their obfuscated elements" do
60
- subject.should match(/for=\"e21372563297c728093bf74c3cb6b96c\"/)
53
+ subject.should match(/for=\"#{obfuscated_id}\"/)
61
54
  end
62
55
  end
63
56
  end
@@ -1,3 +1,5 @@
1
+ require 'spec_helper'
2
+
1
3
  describe BotAway::ParamParser do
2
4
  def params(honeypots)
3
5
  @params = { 'authenticity_token' => '1234',
@@ -13,7 +15,11 @@ describe BotAway::ParamParser do
13
15
  @params = params('test' => { 'name' => '', 'posts' => [] })
14
16
  end
15
17
 
16
- subject { r = BotAway::ParamParser.new(@ip, @params); puts r.params.to_yaml; r }
18
+ subject { dump { BotAway::ParamParser.new(@ip, @params) } }
19
+
20
+ it "should default BotAway.dump_params => false" do
21
+ (!!BotAway.dump_params).should == false
22
+ end
17
23
 
18
24
  context "with dump_params == true" do
19
25
  before(:each) { BotAway.dump_params = true }
@@ -21,7 +27,7 @@ describe BotAway::ParamParser do
21
27
 
22
28
  it "should dump params as debug to Rails logger" do
23
29
  @params = { 'test' => "hello", :posts => [1] }
24
- Rails.logger.should_receive(:debug).with(@params.inspect)
30
+ Rails.logger.should_receive(:debug).exactly(3).times #with(@params.inspect)
25
31
  subject
26
32
  end
27
33
  end
@@ -48,7 +54,7 @@ describe BotAway::ParamParser do
48
54
 
49
55
  context "with a filled honeypot" do
50
56
  before(:each) { @params = params({'test' => {'name' => 'colin', 'posts' => []}}) }
51
- subject { r = BotAway::ParamParser.new(@ip, @params); puts r.params.to_yaml; r }
57
+ subject { dump { BotAway::ParamParser.new(@ip, @params) } }
52
58
 
53
59
  it "drops all parameters" do
54
60
  subject.params.should == { "suspected_bot" => true }
@@ -57,7 +63,7 @@ describe BotAway::ParamParser do
57
63
 
58
64
  context "with a filled sub-honeypot" do
59
65
  before(:each) { @params = params({'test' => {'name' => '', 'posts' => [1, 2]}}) }
60
- subject { r = BotAway::ParamParser.new(@ip, @params); puts r.params.to_yaml; r }
66
+ subject { dump { BotAway::ParamParser.new(@ip, @params) } }
61
67
 
62
68
  it "drops all parameters" do
63
69
  subject.params.should == { "suspected_bot" => true }
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 1
7
- - 1
7
+ - 2
8
8
  - 0
9
- version: 1.1.0
9
+ version: 1.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Colin MacKenzie IV
@@ -14,13 +14,14 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-06-21 00:00:00 -04:00
17
+ date: 2010-10-14 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: actionpack
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
24
25
  requirements:
25
26
  - - ">="
26
27
  - !ruby/object:Gem::Version
@@ -35,6 +36,7 @@ dependencies:
35
36
  name: sc-core-ext
36
37
  prerelease: false
37
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
38
40
  requirements:
39
41
  - - ">="
40
42
  - !ruby/object:Gem::Version
@@ -46,53 +48,70 @@ dependencies:
46
48
  type: :runtime
47
49
  version_requirements: *id002
48
50
  - !ruby/object:Gem::Dependency
49
- name: rubyforge
51
+ name: jeweler
50
52
  prerelease: false
51
53
  requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
52
55
  requirements:
53
56
  - - ">="
54
57
  - !ruby/object:Gem::Version
55
58
  segments:
56
- - 2
57
- - 0
59
+ - 1
58
60
  - 4
59
- version: 2.0.4
61
+ - 0
62
+ version: 1.4.0
60
63
  type: :development
61
64
  version_requirements: *id003
62
65
  - !ruby/object:Gem::Dependency
63
- name: hoe
66
+ name: rspec
64
67
  prerelease: false
65
68
  requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
66
70
  requirements:
67
71
  - - ">="
68
72
  - !ruby/object:Gem::Version
69
73
  segments:
70
- - 2
71
- - 6
74
+ - 1
75
+ - 3
72
76
  - 0
73
- version: 2.6.0
77
+ version: 1.3.0
74
78
  type: :development
75
79
  version_requirements: *id004
76
- description: |-
77
- Unobtrusively detects form submissions made by spambots, and silently drops those submissions. The key word here is
78
- "unobtrusive" -- this is NOT a CAPTCHA. This is a transparent, modular implementation of the bot-catching techniques
79
- discussed by Ned Batchelder at http://nedbatchelder.com/text/stopbots.html.
80
- email:
81
- - sinisterchipmunk@gmail.com
80
+ - !ruby/object:Gem::Dependency
81
+ name: rspec-rails
82
+ prerelease: false
83
+ requirement: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ segments:
89
+ - 1
90
+ - 3
91
+ - 2
92
+ version: 1.3.2
93
+ type: :development
94
+ version_requirements: *id005
95
+ description: Unobtrusively detects form submissions made by spambots, and silently drops those submissions.
96
+ email: sinisterchipmunk@gmail.com
82
97
  executables: []
83
98
 
84
99
  extensions: []
85
100
 
86
101
  extra_rdoc_files:
87
- - History.txt
88
- - Manifest.txt
102
+ - LICENSE
103
+ - README.rdoc
89
104
  files:
105
+ - .gitignore
90
106
  - History.txt
107
+ - LICENSE
91
108
  - Manifest.txt
92
109
  - README.rdoc
93
110
  - Rakefile
111
+ - VERSION
112
+ - bot-away.gemspec
94
113
  - lib/bot-away.rb
95
- - lib/bot-away/action_controller/request.rb
114
+ - lib/bot-away/action_dispatch/request.rb
96
115
  - lib/bot-away/action_view/helpers/instance_tag.rb
97
116
  - lib/bot-away/param_parser.rb
98
117
  - lib/bot-away/spinner.rb
@@ -100,27 +119,30 @@ files:
100
119
  - script/destroy
101
120
  - script/generate
102
121
  - spec/controllers/test_controller_spec.rb
103
- - spec/lib/action_view/helpers/instance_tag_spec.rb
104
- - spec/lib/builder_spec.rb
105
- - spec/lib/param_parser_spec.rb
122
+ - spec/rspec_version.rb
106
123
  - spec/spec_helper.rb
107
- - spec/support/controllers/test_controller.rb
108
124
  - spec/support/honeypot_matcher.rb
109
125
  - spec/support/obfuscation_helper.rb
110
126
  - spec/support/obfuscation_matcher.rb
127
+ - spec/support/rails/mock_logger.rb
128
+ - spec/support/test_controller.rb
111
129
  - spec/support/views/test/index.html.erb
112
130
  - spec/support/views/test/model_form.html.erb
131
+ - spec/views/lib/action_view/helpers/instance_tag_spec.rb
132
+ - spec/views/lib/disabled_for_spec.rb
133
+ - spec/views/lib/form_builder_spec.rb
134
+ - spec/views/lib/param_parser_spec.rb
113
135
  has_rdoc: true
114
- homepage: http://github.com/sinisterchipmunk/bot-away
136
+ homepage: http://www.thoughtsincomputation.com
115
137
  licenses: []
116
138
 
117
139
  post_install_message:
118
140
  rdoc_options:
119
- - --main
120
- - README.rdoc
141
+ - --charset=UTF-8
121
142
  require_paths:
122
143
  - lib
123
144
  required_ruby_version: !ruby/object:Gem::Requirement
145
+ none: false
124
146
  requirements:
125
147
  - - ">="
126
148
  - !ruby/object:Gem::Version
@@ -128,6 +150,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
128
150
  - 0
129
151
  version: "0"
130
152
  required_rubygems_version: !ruby/object:Gem::Requirement
153
+ none: false
131
154
  requirements:
132
155
  - - ">="
133
156
  - !ruby/object:Gem::Version
@@ -136,10 +159,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
159
  version: "0"
137
160
  requirements: []
138
161
 
139
- rubyforge_project: bot-away
140
- rubygems_version: 1.3.6
162
+ rubyforge_project:
163
+ rubygems_version: 1.3.7
141
164
  signing_key:
142
165
  specification_version: 3
143
- summary: Unobtrusively detects form submissions made by spambots, and silently drops those submissions
144
- test_files: []
145
-
166
+ summary: Unobtrusively detects form submissions made by spambots, and silently drops those submissions.
167
+ test_files:
168
+ - spec/controllers/test_controller_spec.rb
169
+ - spec/rspec_version.rb
170
+ - spec/spec_helper.rb
171
+ - spec/support/honeypot_matcher.rb
172
+ - spec/support/obfuscation_helper.rb
173
+ - spec/support/obfuscation_matcher.rb
174
+ - spec/support/rails/mock_logger.rb
175
+ - spec/support/test_controller.rb
176
+ - spec/views/lib/action_view/helpers/instance_tag_spec.rb
177
+ - spec/views/lib/disabled_for_spec.rb
178
+ - spec/views/lib/form_builder_spec.rb
179
+ - spec/views/lib/param_parser_spec.rb
@@ -1,19 +0,0 @@
1
- class ActionController::Request < Rack::Request
2
- def parameters_with_deobfuscation
3
- @parameters ||= BotAway::ParamParser.new(ip, parameters_without_deobfuscation).params
4
- end
5
-
6
- class << self
7
- def unfiltered_params(*keys)
8
- unfiltered_params = instance_variable_get("@unfiltered_params") || instance_variable_set("@unfiltered_params", [])
9
- unfiltered_params.concat keys.flatten.collect { |k| k.to_s }
10
- unfiltered_params
11
- end
12
-
13
- alias_method :accepts_unfiltered_params, :unfiltered_params
14
- end
15
-
16
- delegate :accepts_unfiltered_params, :unfiltered_params, :to => :"self.class"
17
- alias_method_chain :parameters, :deobfuscation
18
- alias_method :params, :parameters
19
- end
@@ -1,18 +0,0 @@
1
- class Post
2
- attr_reader :subject, :body, :subscribers
3
- end
4
-
5
- class TestController < ActionController::Base
6
- view_paths << File.expand_path(File.join(File.dirname(__FILE__), "../views"))
7
-
8
- def index
9
- end
10
-
11
- def model_form
12
- @post = Post.new
13
- end
14
-
15
- def proc_form
16
- render :text => params.to_yaml
17
- end
18
- end