1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
require 'net/http'
require 'uri'
require 'cgi'
require 'yaml'
require 'rakismet/model'
require 'rakismet/middleware'
require 'rakismet/version'
if defined?(Rails) && Rails::VERSION::STRING > '3.2.0'
require 'rakismet/railtie.rb'
$stderr.puts "W: on Rails 3, this vendored version of rakismet should be replaced by a proper dependency"
end
module Rakismet
Request = Struct.new(:user_ip, :user_agent, :referrer)
Undefined = Class.new(NameError)
class << self
attr_accessor :key, :url, :host, :proxy_host, :proxy_port, :test
def request
@request ||= Request.new
end
def set_request_vars(env)
request.user_ip, request.user_agent, request.referrer =
env['REMOTE_ADDR'], env['HTTP_USER_AGENT'], env['HTTP_REFERER']
end
def clear_request
@request = Request.new
end
def headers
@headers ||= begin
user_agent = "Rakismet/#{Rakismet::VERSION}"
user_agent = "Rails/#{Rails.version} | " + user_agent if defined?(Rails)
{ 'User-Agent' => user_agent, 'Content-Type' => 'application/x-www-form-urlencoded' }
end
end
def validate_key
validate_config
akismet = URI.parse(verify_url)
response = Net::HTTP::Proxy(proxy_host, proxy_port).start(akismet.host) do |http|
data = "key=#{Rakismet.key}&blog=#{Rakismet.url}"
http.post(akismet.path, data, Rakismet.headers)
end
@valid_key = (response.body == 'valid')
end
def valid_key?
@valid_key == true
end
def akismet_call(function, args={})
validate_config
args.merge!(:blog => Rakismet.url, :is_test => Rakismet.test_mode)
akismet = URI.parse(call_url(function))
response = Net::HTTP::Proxy(proxy_host, proxy_port).start(akismet.host) do |http|
params = args.map do |k,v|
param = v.class < String ? v.to_str : v.to_s # for ActiveSupport::SafeBuffer and Nil, respectively
"#{k}=#{CGI.escape(param)}"
end
http.post(akismet.path, params.join('&'), Rakismet.headers)
end
response.body
end
protected
def verify_url
"http://#{Rakismet.host}/1.1/verify-key"
end
def call_url(function)
"http://#{Rakismet.key}.#{Rakismet.host}/1.1/#{function}"
end
def validate_config
raise Undefined, "Rakismet.key is not defined" if Rakismet.key.nil? || Rakismet.key.empty?
raise Undefined, "Rakismet.url is not defined" if Rakismet.url.nil? || Rakismet.url.empty?
raise Undefined, "Rakismet.host is not defined" if Rakismet.host.nil? || Rakismet.host.empty?
end
def test_mode
test ? 1 : 0
end
end
end