mollom 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -22,7 +22,7 @@ After you have requested a public/private key-pair from Mollom (on http://www.mo
22
22
  content = m.check_content(:post_title => 'Mollem is an open API',
23
23
  :post_body => "Lorem Ipsum dolor...",
24
24
  :author_name => 'Jan De Poorter',
25
- :author_url => 'http://blog.defv.be')
25
+ :author_url => 'http://workswithruby.com')
26
26
  if content.spam?
27
27
  puts "You, sir, are a spammer.. Goodbye!"
28
28
  elsif content.unsure?
data/lib/mollom.rb CHANGED
@@ -14,6 +14,7 @@ class Mollom
14
14
  end
15
15
 
16
16
  attr_accessor :private_key, :public_key
17
+ attr_writer :server_list
17
18
 
18
19
  # Creates a new Mollom object. Takes +private_key+ and +public_key+ as keys.
19
20
  #
@@ -110,11 +111,25 @@ class Mollom
110
111
  # low-quality
111
112
  # unwanted
112
113
  #
113
- # mollow.send_feedback :session_id => 'a9616e6b4cd6a81ecdd509fa624d895d', :feedback => 'unwanted'
114
+ # mollom.send_feedback :session_id => 'a9616e6b4cd6a81ecdd509fa624d895d', :feedback => 'unwanted'
114
115
  def send_feedback feedback = {}
115
116
  return send_command('mollom.sendFeedback', feedback)
116
117
  end
117
118
 
119
+ # Gets a list of servers from Mollom. You should cache this information in your application in a temporary file or in a database. You can set this with Mollom#server_list=
120
+ #
121
+ # Takes an optional parameter +refresh+, which resets the cached value.
122
+ #
123
+ # mollom.server_list
124
+ # # => [{:proto=>"http", :ip=>"88.151.243.81"}, {:proto=>"http", :ip=>"82.103.131.136"}]
125
+ def server_list refresh = false
126
+ @server_list = nil if refresh
127
+ @server_list ||= XMLRPC::Client.new("xmlrpc.mollom.com", "/#{API_VERSION}").call('mollom.getServerList', authentication_hash).collect do |server|
128
+ proto, ip = server.split('://')
129
+ {:proto => proto, :ip => ip}
130
+ end
131
+ end
132
+
118
133
  private
119
134
  def send_command(command, data = {})
120
135
  server_list.each do |server|
@@ -141,25 +156,17 @@ class Mollom
141
156
  server_list(true)
142
157
  retry
143
158
  end
144
-
145
- # Gets a list of servers from Mollom
146
- def server_list refresh = false
147
- @server_list = nil if refresh
148
- @server_list ||= XMLRPC::Client.new("xmlrpc.mollom.com", "/#{API_VERSION}").call('mollom.getServerList', authentication_hash).collect do |server|
149
- proto, ip = server.split('://')
150
- {:proto => proto, :ip => ip}
151
- end
152
- end
153
-
154
- # Creates a HMAC-SHA1 Hash with the current timestamp, and your private key.
159
+
160
+ # Creates a HMAC-SHA1 Hash with the current timestamp, a nonce, and your private key.
155
161
  def authentication_hash
156
162
  now = Time.now.gmtime.strftime('%Y-%m-%dT%H:%M:%S.000+0000')
163
+ nonce = Kernel.rand(2**31) # Random signed int
157
164
 
158
165
  hash = Base64.encode64(
159
- OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, @private_key, now)
166
+ OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, @private_key, "#{now}:#{nonce}:#{@private_key}")
160
167
  ).chomp
161
168
 
162
- return :public_key=> @public_key, :time => now, :hash => hash
169
+ return :public_key=> @public_key, :time => now, :hash => hash, :nonce => nonce
163
170
  end
164
171
 
165
172
  class ContentResponse
data/test/mollom_test.rb CHANGED
@@ -25,10 +25,12 @@ class TestMollom < Test::Unit::TestCase
25
25
  time = mock
26
26
  time.expects(:strftime).with('%Y-%m-%dT%H:%M:%S.000+0000').returns('2008-04-01T13:54:26.000+0000')
27
27
  Time.stubs(:now).returns(stub(:gmtime => time))
28
+ Kernel.expects(:rand).with(2**31).returns(42)
28
29
  hash = @mollom.authentication_hash
29
- assert_equal("24qAgAC1v1U+5NbKyrQSp/XKWAI=", hash[:hash])
30
+ assert_equal("oWN15TqrbLVdTAgcuDmofskaNyM=", hash[:hash])
30
31
  assert_equal('yyyyyyyyy', hash[:public_key])
31
32
  assert_equal('2008-04-01T13:54:26.000+0000', hash[:time])
33
+ assert_equal(42, hash[:nonce])
32
34
  end
33
35
 
34
36
  def test_server_list
@@ -73,7 +75,7 @@ class TestMollom < Test::Unit::TestCase
73
75
 
74
76
  def test_send_command_with_reload_exception
75
77
  # TODO: Test this
76
- @mollom.send_command('mollom.testMessage', {:options => 'foo'})
78
+ # @mollom.send_command('mollom.testMessage', {:options => 'foo'})
77
79
  end
78
80
 
79
81
  def test_send_command_with_bad_command
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mollom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan De Poorter
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-04-04 00:00:00 +02:00
12
+ date: 2008-04-24 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -20,10 +20,10 @@ executables: []
20
20
  extensions: []
21
21
 
22
22
  extra_rdoc_files:
23
- - README
23
+ - README.rdoc
24
24
  files:
25
25
  - lib/mollom.rb
26
- - README
26
+ - README.rdoc
27
27
  has_rdoc: true
28
28
  homepage: mollom.rubyforge.com
29
29
  post_install_message:
@@ -46,7 +46,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
46
46
  requirements: []
47
47
 
48
48
  rubyforge_project: mollom
49
- rubygems_version: 1.0.1
49
+ rubygems_version: 1.1.0
50
50
  signing_key:
51
51
  specification_version: 2
52
52
  summary: Ruby class for easy interfacing with the mollom.com open API for spam detection and content quality assesment.