rack-honeypot 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/rack/honeypot.rb +14 -18
  3. metadata +60 -65
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9defef64da60028a57eda5488cb1e83e12df5896
4
+ data.tar.gz: 437f5905aca4560ad753129d8de2a76bc3c77777
5
+ SHA512:
6
+ metadata.gz: 76489ae68d934c1aa7d8c5e12321255c3457210ee4acf86dacb52719e2c88d99570e8504e26236b6213bb6265e40973a1684255c39c26b3095c97809106964cf
7
+ data.tar.gz: d081780ac96b3a32ba3344fd5344c8d993752f68f902b988b7ca44db168d14b3c2a9285fea7771bffc7c08a4b389a0825c4ce533461d782508c93a41d113c54d
@@ -22,19 +22,25 @@ module Rack
22
22
  @logger.warn("[Rack::Honeypot] Spam bot detected; responded with null") unless @logger.nil?
23
23
  null_response
24
24
  else
25
- status, headers, body = @app.call(env)
26
-
27
- if @always_enabled || honeypot_header_present?(headers)
28
- body = insert_honeypot(body)
29
- headers = response_headers(headers, body)
25
+ @status, @headers, @response = @app.call(env)
26
+ if @headers["Content-Type"] and @headers["Content-Type"].include?("text/html") and (@always_enabled || honeypot_header_present?(@headers))
27
+ body = insert_honeypot(response_body(@response))
28
+ @headers.merge("Content-Length" => body.length.to_s)
29
+ [@status, @headers, [body]]
30
+ else
31
+ [@status, @headers, @response]
30
32
  end
31
-
32
- [status, headers, body]
33
33
  end
34
34
  end
35
35
 
36
36
  private
37
37
 
38
+ def response_body(response)
39
+ body = response.respond_to?(:body) ? response.body : response
40
+ body = body.inject("") { |i, a| i << a } if body.respond_to?(:each)
41
+ body.to_s
42
+ end
43
+
38
44
  def spambot_submission?(form_hash)
39
45
  form_hash && form_hash[@input_name] && form_hash[@input_name] != @input_value
40
46
  end
@@ -43,26 +49,16 @@ module Rack
43
49
  header = headers.delete(HONEYPOT_HEADER)
44
50
  header && header.index("enabled")
45
51
  end
46
-
52
+
47
53
  def null_response
48
54
  [200, {'Content-Type' => 'text/html', "Content-Length" => "0"}, []]
49
55
  end
50
-
51
- def response_body(response)
52
- body = ""
53
-
54
- # The body may not be an array, so we need to call #each here.
55
- response.each {|part| body << part }
56
56
 
57
- body
58
- end
59
-
60
57
  def response_headers(headers, body)
61
58
  headers.merge("Content-Length" => body.length.to_s)
62
59
  end
63
60
 
64
61
  def insert_honeypot(body)
65
- body = response_body(body)
66
62
  body.gsub!(/<\/head>/, css + "\n</head>")
67
63
  body.gsub!(/<form(.*)>/, '<form\1>' + "\n" + div)
68
64
  body
metadata CHANGED
@@ -1,100 +1,95 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rack-honeypot
3
- version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 2
10
- version: 0.1.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.3
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Luigi Montanez
14
8
  - Luc Castera
15
9
  - Daniel Schierbeck
16
10
  autorequire:
17
11
  bindir: bin
18
12
  cert_chain: []
19
-
20
- date: 2011-10-05 00:00:00 Z
21
- dependencies:
22
- - !ruby/object:Gem::Dependency
13
+ date: 2016-01-26 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
23
16
  name: unindentable
24
- prerelease: false
25
- requirement: &id001 !ruby/object:Gem::Requirement
26
- none: false
27
- requirements:
28
- - - "="
29
- - !ruby/object:Gem::Version
30
- hash: 23
31
- segments:
32
- - 0
33
- - 0
34
- - 4
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - '='
20
+ - !ruby/object:Gem::Version
35
21
  version: 0.0.4
36
22
  type: :runtime
37
- version_requirements: *id001
38
- - !ruby/object:Gem::Dependency
39
- name: rack
40
23
  prerelease: false
41
- requirement: &id002 !ruby/object:Gem::Requirement
42
- none: false
43
- requirements:
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - '='
27
+ - !ruby/object:Gem::Version
28
+ version: 0.0.4
29
+ - !ruby/object:Gem::Dependency
30
+ name: rack
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
44
33
  - - ">="
45
- - !ruby/object:Gem::Version
46
- hash: 3
47
- segments:
48
- - 0
49
- version: "0"
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
50
36
  type: :runtime
51
- version_requirements: *id002
52
- description: This middleware acts as a spam trap. It inserts, into every outputted <form>, a text field that a spambot will really want to fill in, but is actually not used by the app. The field is hidden to humans via CSS, and includes a warning label for screenreading software.
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: rack-test
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ description: This middleware acts as a spam trap. It inserts, into every outputted
58
+ <form>, a text field that a spambot will really want to fill in, but is actually
59
+ not used by the app. The field is hidden to humans via CSS, and includes a warning
60
+ label for screenreading software.
53
61
  email: luigi.montanez@gmail.com
54
62
  executables: []
55
-
56
63
  extensions: []
57
-
58
- extra_rdoc_files:
64
+ extra_rdoc_files:
59
65
  - LICENSE.md
60
66
  - README.md
61
- files:
67
+ files:
62
68
  - LICENSE.md
63
69
  - README.md
64
70
  - VERSION
65
71
  - lib/rack/honeypot.rb
66
72
  homepage: http://github.com/sunlightlabs/rack-honeypot
67
73
  licenses: []
68
-
74
+ metadata: {}
69
75
  post_install_message:
70
76
  rdoc_options: []
71
-
72
- require_paths:
77
+ require_paths:
73
78
  - lib
74
- required_ruby_version: !ruby/object:Gem::Requirement
75
- none: false
76
- requirements:
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
77
81
  - - ">="
78
- - !ruby/object:Gem::Version
79
- hash: 3
80
- segments:
81
- - 0
82
- version: "0"
83
- required_rubygems_version: !ruby/object:Gem::Requirement
84
- none: false
85
- requirements:
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
86
  - - ">="
87
- - !ruby/object:Gem::Version
88
- hash: 3
89
- segments:
90
- - 0
91
- version: "0"
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
92
89
  requirements: []
93
-
94
90
  rubyforge_project:
95
- rubygems_version: 1.8.6
91
+ rubygems_version: 2.2.2
96
92
  signing_key:
97
- specification_version: 3
93
+ specification_version: 4
98
94
  summary: Middleware that functions as a spambot trap.
99
95
  test_files: []
100
-