ruby-recaptcha 1.0.4 → 1.0.5
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.
- data/lib/recaptcha.rb +13 -3
- data/lib/ruby-recaptcha.rb +1 -1
- data/test/test_recaptcha.rb +42 -3
- metadata +5 -5
data/lib/recaptcha.rb
CHANGED
@@ -171,6 +171,13 @@ module ReCaptcha
|
|
171
171
|
</noscript>
|
172
172
|
}
|
173
173
|
end
|
174
|
+
def add_base_error(msg, errors)
|
175
|
+
if errors.respond_to?(:add_to_base)
|
176
|
+
errors.add_to_base(msg)
|
177
|
+
else
|
178
|
+
errors.add(:base, msg)
|
179
|
+
end
|
180
|
+
end
|
174
181
|
|
175
182
|
# Validate request. Note that this function actually makes a network request.
|
176
183
|
# [remoteip] request remote ip address
|
@@ -179,19 +186,22 @@ module ReCaptcha
|
|
179
186
|
# [errors] errors hash-likethingy (usually from ActiveRecord::Base.errors)
|
180
187
|
def validate(remoteip, challenge, response, errors, msg)
|
181
188
|
unless response and challenge
|
182
|
-
|
189
|
+
add_base_error(msg, errors)
|
183
190
|
return false
|
184
191
|
end
|
185
192
|
proxy_host, proxy_port = nil, nil
|
186
193
|
proxy_host, proxy_port = ENV['proxy_host'].split(':') if ENV.has_key?('proxy_host')
|
187
|
-
|
194
|
+
proxy_user=ENV['proxy_user']
|
195
|
+
proxy_pass=ENV['proxy_pass']
|
196
|
+
http = Net::HTTP::Proxy(proxy_host, proxy_port, proxy_user, proxy_pass).start(@vhost)
|
188
197
|
path='/recaptcha/api/verify'
|
189
198
|
data = "privatekey=#{CGI.escape(@privkey)}&remoteip=#{CGI.escape(remoteip)}&challenge=#{CGI.escape(challenge)}&response=#{CGI.escape(response)}"
|
190
199
|
resp = http.post(path, data, {'Content-Type'=>'application/x-www-form-urlencoded'})
|
200
|
+
data = resp.body
|
191
201
|
response = resp.body.split
|
192
202
|
result = response[0].chomp
|
193
203
|
@last_error=response[1].chomp
|
194
|
-
|
204
|
+
add_base_error(msg, errors) if result != 'true'
|
195
205
|
result == 'true'
|
196
206
|
end
|
197
207
|
end
|
data/lib/ruby-recaptcha.rb
CHANGED
data/test/test_recaptcha.rb
CHANGED
@@ -138,7 +138,30 @@ class TestRecaptcha < Test::Unit::TestCase
|
|
138
138
|
stub_http = mock('http mock')
|
139
139
|
stub_proxy.expects(:start).with('www.google.com').returns(stub_http)
|
140
140
|
stub_http.expects(:post).with('/recaptcha/api/verify', 'privatekey=def&remoteip=localhost&challenge=abc&response=def', {'Content-Type' => 'application/x-www-form-urlencoded'}).returns(ResponseMock.new(['foo', goodwords_resp]))
|
141
|
-
Net::HTTP.expects(:Proxy).with(nil, nil).returns(stub_proxy)
|
141
|
+
Net::HTTP.expects(:Proxy).with(nil, nil, nil, nil).returns(stub_proxy)
|
142
|
+
client = new_client
|
143
|
+
assert client.validate('localhost', 'abc', 'def', err_stub, 'Captcha failed.')
|
144
|
+
end
|
145
|
+
def test_validate_good_authenticated_proxy
|
146
|
+
ENV['proxy_host']='fubar:8080'
|
147
|
+
ENV['proxy_user']='user'
|
148
|
+
ENV['proxy_pass']='secret'
|
149
|
+
goodwords_resp="true\r\nsuccess"
|
150
|
+
err_stub=mock()
|
151
|
+
stub_proxy=mock('proxy')
|
152
|
+
stub_http = mock('http mock')
|
153
|
+
stub_proxy.expects(:start).with('www.google.com').returns(stub_http)
|
154
|
+
stub_http.expects(:post).with('/recaptcha/api/verify', 'privatekey=def&remoteip=localhost&challenge=abc&response=def', {'Content-Type' => 'application/x-www-form-urlencoded'}).returns(ResponseMock.new(['foo', goodwords_resp]))
|
155
|
+
Net::HTTP.expects(:Proxy).with('fubar', '8080','user','secret').returns(stub_proxy)
|
156
|
+
client = new_client
|
157
|
+
assert client.validate('localhost', 'abc', 'def', err_stub, 'Captcha failed.')
|
158
|
+
ENV['proxy_host']='fubar'
|
159
|
+
err_stub=mock()
|
160
|
+
stub_proxy=mock('proxy')
|
161
|
+
stub_http = mock('http mock')
|
162
|
+
stub_proxy.expects(:start).with('www.google.com').returns(stub_http)
|
163
|
+
stub_http.expects(:post).with('/recaptcha/api/verify', 'privatekey=def&remoteip=localhost&challenge=abc&response=def', {'Content-Type' => 'application/x-www-form-urlencoded'}).returns(ResponseMock.new(['foo', goodwords_resp]))
|
164
|
+
Net::HTTP.expects(:Proxy).with('fubar', nil, 'user', 'secret').returns(stub_proxy)
|
142
165
|
client = new_client
|
143
166
|
assert client.validate('localhost', 'abc', 'def', err_stub, 'Captcha failed.')
|
144
167
|
end
|
@@ -150,7 +173,7 @@ class TestRecaptcha < Test::Unit::TestCase
|
|
150
173
|
stub_http = mock('http mock')
|
151
174
|
stub_proxy.expects(:start).with('www.google.com').returns(stub_http)
|
152
175
|
stub_http.expects(:post).with('/recaptcha/api/verify', 'privatekey=def&remoteip=localhost&challenge=abc&response=def', {'Content-Type' => 'application/x-www-form-urlencoded'}).returns(ResponseMock.new(['foo', goodwords_resp]))
|
153
|
-
Net::HTTP.expects(:Proxy).with('fubar', '8080').returns(stub_proxy)
|
176
|
+
Net::HTTP.expects(:Proxy).with('fubar', '8080',nil,nil).returns(stub_proxy)
|
154
177
|
client = new_client
|
155
178
|
assert client.validate('localhost', 'abc', 'def', err_stub, 'Captcha failed.')
|
156
179
|
ENV['proxy_host']='fubar'
|
@@ -159,7 +182,7 @@ class TestRecaptcha < Test::Unit::TestCase
|
|
159
182
|
stub_http = mock('http mock')
|
160
183
|
stub_proxy.expects(:start).with('www.google.com').returns(stub_http)
|
161
184
|
stub_http.expects(:post).with('/recaptcha/api/verify', 'privatekey=def&remoteip=localhost&challenge=abc&response=def', {'Content-Type' => 'application/x-www-form-urlencoded'}).returns(ResponseMock.new(['foo', goodwords_resp]))
|
162
|
-
Net::HTTP.expects(:Proxy).with('fubar', nil).returns(stub_proxy)
|
185
|
+
Net::HTTP.expects(:Proxy).with('fubar', nil, nil, nil).returns(stub_proxy)
|
163
186
|
client = new_client
|
164
187
|
assert client.validate('localhost', 'abc', 'def', err_stub, 'Captcha failed.')
|
165
188
|
end
|
@@ -306,6 +329,16 @@ class TestRecaptcha < Test::Unit::TestCase
|
|
306
329
|
mock.expects(:validate).with('0.0.0.0', nil, nil, e, 'Captcha failed.').returns(true)
|
307
330
|
assert @cf.validate_recap({}, e, {:rcc_pub => 'foobar', :rcc_priv => 'blegga'})
|
308
331
|
end
|
332
|
+
def test_safe_errors
|
333
|
+
r31err = mock('rails 31 error')
|
334
|
+
msg = "hi"
|
335
|
+
r31err.expects(:add).with(:base, msg)
|
336
|
+
ReCaptcha::Client.new(nil, nil).add_base_error(msg, r31err)
|
337
|
+
r21err = mock('rails sub3 error')
|
338
|
+
r21err.expects(:respond_to?).with(:add_to_base).returns(true)
|
339
|
+
r21err.expects(:add_to_base).with(msg)
|
340
|
+
ReCaptcha::Client.new(nil, nil).add_base_error(msg, r21err)
|
341
|
+
end
|
309
342
|
def test_validate_recap_is_correct_with_constants_and_with_options_and_non_default_msg
|
310
343
|
# first, with constants
|
311
344
|
e = mock('errors')
|
@@ -349,6 +382,12 @@ class TestRecaptcha < Test::Unit::TestCase
|
|
349
382
|
assert_equal(((expected % ['foobar', 'foobar']).strip), actual.strip)
|
350
383
|
end
|
351
384
|
|
385
|
+
def teardown
|
386
|
+
ENV['proxy_user']=nil
|
387
|
+
ENV['proxy_pass']=nil
|
388
|
+
ENV['proxy_host']=nil
|
389
|
+
end
|
390
|
+
|
352
391
|
private
|
353
392
|
|
354
393
|
def new_client(pubkey='abc', privkey='def', ssl=false)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-recaptcha
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ default_executable:
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: hoe
|
17
|
-
requirement: &
|
17
|
+
requirement: &7491720 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 2.5.0
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *7491720
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: hoe
|
28
|
-
requirement: &
|
28
|
+
requirement: &7469900 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
version: '2.12'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *7469900
|
37
37
|
description: ''
|
38
38
|
email:
|
39
39
|
- m@loonsoft.com
|