rakismet 1.4.0 → 1.5.0
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.
- checksums.yaml +6 -14
- data/CHANGELOG +2 -0
- data/README.md +9 -0
- data/lib/rakismet.rb +9 -2
- data/lib/rakismet/model.rb +3 -2
- data/lib/rakismet/version.rb +1 -1
- data/spec/models/rakismet_model_spec.rb +11 -0
- data/spec/rakismet_middleware_spec.rb +9 -1
- data/spec/rakismet_spec.rb +6 -0
- data/spec/spec_helper.rb +9 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
ZWY2Yzg3MTkzYzc5YWNjZjllYWE2NDg4ZTYyY2EyZGUyNTVhODY3OTA0ZDBj
|
10
|
-
Y2UzZDc0YzM0ZjQ4MzhiODdmNmRmMzQ5ZmNkODBmZWZmZWRhOThmNjQ4MjRj
|
11
|
-
OTg1YzdmZGY2ZGI1NmRmYjI0Y2UzYWMwMjY1YTU2OTk1YTIxNTk=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
YjM2YTI3MGQwY2QwNWFmMDYxYWVjMGZhNWRkNjFkZDIwZGZiZjYwMWYxMDNm
|
14
|
-
MDhmZTlhNDNjNTY0YjM4ZDQ5NTUwMGY5MjNlODFmZTA0ZGE5MjQ5ZGFiMDBh
|
15
|
-
Mjc1ZjI5OTAwZTM0NjM2OWJjNDBlMTdmMzY3Yjk4MTFlNWY0OGQ=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b122ee0148197e727f46656179a22582da4aab0f
|
4
|
+
data.tar.gz: e8d9b93c6bcb5de87c8717abc8037ce6ef7daf8a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: de495498ab349675fe5c49a486383925e848b5267976e63722869585b9e24508b44b489a082bb807c8b6574e21931efe7a38df234989c16274b6bfd7c0044484
|
7
|
+
data.tar.gz: 74ab9d5e48a07e48f0b66c8ef5907ed461508819547f15988e93f734c6ac5163731047535a5ae28bb32a1322f3ef675eb386c914646e89a87dd451c3eaa9310b
|
data/CHANGELOG
CHANGED
data/README.md
CHANGED
@@ -156,6 +156,15 @@ your app initialization:
|
|
156
156
|
config.rakismet.use_middleware = false
|
157
157
|
```
|
158
158
|
|
159
|
+
Additionally, the middleware will send along additional env variables starting with
|
160
|
+
HTTP_ to Akismet. If you wish to block any sensitive user information, use:
|
161
|
+
|
162
|
+
```ruby
|
163
|
+
config.rakismet.excluded_headers = ['HTTP_COOKIE','HTTP_SENSITIVE']
|
164
|
+
```
|
165
|
+
|
166
|
+
excluded_headers will default to ['HTTP_COOKIE']
|
167
|
+
|
159
168
|
Testing
|
160
169
|
-------
|
161
170
|
|
data/lib/rakismet.rb
CHANGED
@@ -9,11 +9,15 @@ require 'rakismet/version'
|
|
9
9
|
require 'rakismet/railtie.rb' if defined?(Rails)
|
10
10
|
|
11
11
|
module Rakismet
|
12
|
-
Request = Struct.new(:user_ip, :user_agent, :referrer)
|
12
|
+
Request = Struct.new(:user_ip, :user_agent, :referrer, :http_headers)
|
13
13
|
Undefined = Class.new(NameError)
|
14
14
|
|
15
15
|
class << self
|
16
|
-
attr_accessor :key, :url, :host, :proxy_host, :proxy_port, :test
|
16
|
+
attr_accessor :key, :url, :host, :proxy_host, :proxy_port, :test, :excluded_headers
|
17
|
+
|
18
|
+
def excluded_headers
|
19
|
+
@excluded_headers || ['HTTP_COOKIE']
|
20
|
+
end
|
17
21
|
|
18
22
|
def request
|
19
23
|
@request ||= Request.new
|
@@ -26,6 +30,9 @@ module Rakismet
|
|
26
30
|
def set_request_vars(env)
|
27
31
|
request.user_ip, request.user_agent, request.referrer =
|
28
32
|
env['REMOTE_ADDR'], env['HTTP_USER_AGENT'], env['HTTP_REFERER']
|
33
|
+
|
34
|
+
# Collect all CGI-style HTTP_ headers except cookies for privacy..
|
35
|
+
request.http_headers = env.select { |k,v| k =~ /^HTTP_/ }.reject { |k,v| excluded_headers.include? k }
|
29
36
|
end
|
30
37
|
|
31
38
|
def clear_request
|
data/lib/rakismet/model.rb
CHANGED
@@ -38,7 +38,7 @@ module Rakismet
|
|
38
38
|
if instance_variable_defined? :@_spam
|
39
39
|
@_spam
|
40
40
|
else
|
41
|
-
data = akismet_data
|
41
|
+
data = akismet_data(true) # Only spam? check should include http_headers
|
42
42
|
self.akismet_response = Rakismet.akismet_call('comment-check', data)
|
43
43
|
@_spam = self.akismet_response == 'true'
|
44
44
|
end
|
@@ -56,7 +56,7 @@ module Rakismet
|
|
56
56
|
|
57
57
|
private
|
58
58
|
|
59
|
-
def akismet_data
|
59
|
+
def akismet_data(include_http_headers = false)
|
60
60
|
akismet = self.class.akismet_attrs.keys.inject({}) do |data,attr|
|
61
61
|
mapped_field = self.class.akismet_attrs[attr]
|
62
62
|
data.merge attr => if mapped_field.is_a?(Proc)
|
@@ -76,6 +76,7 @@ module Rakismet
|
|
76
76
|
Rakismet.request.send(attr)
|
77
77
|
end
|
78
78
|
end
|
79
|
+
akismet.merge! Rakismet.request.http_headers if include_http_headers and Rakismet.request.http_headers
|
79
80
|
akismet.delete_if { |k,v| v.nil? || v.empty? }
|
80
81
|
akismet[:comment_type] ||= 'comment'
|
81
82
|
akismet
|
data/lib/rakismet/version.rb
CHANGED
@@ -38,6 +38,17 @@ describe AkismetModel do
|
|
38
38
|
@model.spam?
|
39
39
|
end
|
40
40
|
|
41
|
+
it "should send http_headers from Rakismet.request if present" do
|
42
|
+
Rakismet.stub!(:request).and_return(request_with_headers)
|
43
|
+
Rakismet.should_receive(:akismet_call).
|
44
|
+
with('comment-check', akismet_attrs.merge(:user_ip => '127.0.0.1',
|
45
|
+
:user_agent => 'RSpec',
|
46
|
+
:referrer => 'http://test.host/referrer',
|
47
|
+
'HTTP_USER_AGENT' => 'RSpec',
|
48
|
+
'HTTP_REFERER' => 'http://test.host/referrer'))
|
49
|
+
@model.spam?
|
50
|
+
end
|
51
|
+
|
41
52
|
it "should cache result of #spam?" do
|
42
53
|
Rakismet.should_receive(:akismet_call).once
|
43
54
|
@model.spam?
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Rakismet::Middleware do
|
4
4
|
|
5
|
-
let(:env) { { 'REMOTE_ADDR' => '127.0.0.1', 'HTTP_USER_AGENT' => 'RSpec', 'HTTP_REFERER' => 'http://test.host/referrer' } }
|
5
|
+
let(:env) { { 'REMOTE_ADDR' => '127.0.0.1', 'HTTP_USER_AGENT' => 'RSpec', 'HTTP_REFERER' => 'http://test.host/referrer', 'HTTP_COOKIE' => "Don't violate my privacy" } }
|
6
6
|
let(:app) { double(:app, :call => nil) }
|
7
7
|
let(:request) { double(:request).as_null_object }
|
8
8
|
|
@@ -18,10 +18,18 @@ describe Rakismet::Middleware do
|
|
18
18
|
@middleware.call(env)
|
19
19
|
end
|
20
20
|
|
21
|
+
it "should set set Rakismet.request http_headers" do
|
22
|
+
Rakismet.stub(:request).and_return(request)
|
23
|
+
request.should_receive(:http_headers=).with({ 'HTTP_USER_AGENT' => 'RSpec', 'HTTP_REFERER' => 'http://test.host/referrer' })
|
24
|
+
@middleware.call(env)
|
25
|
+
end
|
26
|
+
|
21
27
|
it "should clear Rakismet.request after request is complete" do
|
22
28
|
@middleware.call(env)
|
23
29
|
Rakismet.request.user_ip.should be_nil
|
24
30
|
Rakismet.request.user_agent.should be_nil
|
25
31
|
Rakismet.request.referrer.should be_nil
|
32
|
+
Rakismet.request.http_headers.should be_nil
|
26
33
|
end
|
34
|
+
|
27
35
|
end
|
data/spec/rakismet_spec.rb
CHANGED
@@ -82,6 +82,12 @@ describe Rakismet do
|
|
82
82
|
Rakismet.validate_key
|
83
83
|
end
|
84
84
|
end
|
85
|
+
|
86
|
+
describe '.excluded_headers' do
|
87
|
+
it "should default to ['HTTP_COOKIE']" do
|
88
|
+
Rakismet.excluded_headers.should eq ['HTTP_COOKIE']
|
89
|
+
end
|
90
|
+
end
|
85
91
|
|
86
92
|
describe ".akismet_call" do
|
87
93
|
before do
|
data/spec/spec_helper.rb
CHANGED
@@ -27,8 +27,16 @@ def request
|
|
27
27
|
:referrer => 'http://test.host/referrer')
|
28
28
|
end
|
29
29
|
|
30
|
+
def request_with_headers
|
31
|
+
OpenStruct.new(:user_ip => '127.0.0.1',
|
32
|
+
:user_agent => 'RSpec',
|
33
|
+
:referrer => 'http://test.host/referrer',
|
34
|
+
:http_headers => { 'HTTP_USER_AGENT' => 'RSpec', 'HTTP_REFERER' => 'http://test.host/referrer' } )
|
35
|
+
end
|
36
|
+
|
30
37
|
def empty_request
|
31
38
|
OpenStruct.new(:user_ip => nil,
|
32
39
|
:user_agent => nil,
|
33
|
-
:referrer => nil
|
40
|
+
:referrer => nil,
|
41
|
+
:http_headers => nil)
|
34
42
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rakismet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh French
|
@@ -14,14 +14,14 @@ dependencies:
|
|
14
14
|
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -77,17 +77,17 @@ require_paths:
|
|
77
77
|
- lib
|
78
78
|
required_ruby_version: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
84
|
requirements:
|
85
|
-
- -
|
85
|
+
- - '>='
|
86
86
|
- !ruby/object:Gem::Version
|
87
87
|
version: '0'
|
88
88
|
requirements: []
|
89
89
|
rubyforge_project: rakismet
|
90
|
-
rubygems_version: 2.0.
|
90
|
+
rubygems_version: 2.0.3
|
91
91
|
signing_key:
|
92
92
|
specification_version: 4
|
93
93
|
summary: Akismet and TypePad AntiSpam integration for Rails.
|