ruby-recaptcha 1.0.0 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +290 -116
- data/README.txt +12 -12
- data/lib/recaptcha.rb +64 -11
- data/lib/ruby-recaptcha.rb +1 -4
- data/test/test_helper.rb +1 -0
- data/test/test_recaptcha.rb +10 -13
- metadata +10 -8
data/History.txt
CHANGED
@@ -1,117 +1,291 @@
|
|
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
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
1
|
+
2009-07-24 mml <mml>
|
2
|
+
|
3
|
+
* Rakefile, lib/ruby-recaptcha.rb, test/test_recaptcha.rb:
|
4
|
+
fixed some randomly failing tests
|
5
|
+
[31a822ec2421] [tip]
|
6
|
+
|
7
|
+
2009-02-15 m <m@loonsoft.com>
|
8
|
+
|
9
|
+
* .hgtags:
|
10
|
+
Added tag 1.0.0 release for changeset 19f9c037e388
|
11
|
+
[d4de467a907f]
|
12
|
+
|
13
|
+
* lib/ruby-recaptcha.rb:
|
14
|
+
fixed require line
|
15
|
+
[19f9c037e388] [1.0.0 release]
|
16
|
+
|
17
|
+
2009-02-13 m <m@loonsoft.com>
|
18
|
+
|
19
|
+
* Manifest.txt, README.txt, Rakefile, lib/recaptcha.rb,
|
20
|
+
lib/recaptcha/version.rb, lib/ruby-recaptcha.rb, script/console,
|
21
|
+
script/destroy, script/generate, test/test_helper.rb,
|
22
|
+
website/index.txt, website/javascripts/rounded_corners_lite.inc.js,
|
23
|
+
website/stylesheets/screen.css, website/template.rhtml:
|
24
|
+
updated to new version of newgem
|
25
|
+
[de8078de5372]
|
26
|
+
|
27
|
+
2008-12-08 m <m@loonsoft.com>
|
28
|
+
|
29
|
+
* website/index.txt, website/template.rhtml:
|
30
|
+
fixed js
|
31
|
+
[3cb43baa75ef]
|
32
|
+
|
33
|
+
* website/index.txt:
|
34
|
+
updated site
|
35
|
+
[353af929586d]
|
36
|
+
|
37
|
+
* Rakefile:
|
38
|
+
fix uploaded perms
|
39
|
+
[1bfdbd7dbf58]
|
40
|
+
|
41
|
+
* Rakefile, website/index.txt:
|
42
|
+
updated deploy script & site template
|
43
|
+
[0ed40a3c44bc]
|
44
|
+
|
45
|
+
2008-12-05 m <m@loonsoft.com>
|
46
|
+
|
47
|
+
* website/index.txt, website/template.rhtml:
|
48
|
+
updated website
|
49
|
+
[cb2384317947]
|
50
|
+
|
51
|
+
2008-09-02 m <m@loonsoft.com>
|
52
|
+
|
53
|
+
* README.txt, lib/recaptcha.rb, test/test_recaptcha.rb:
|
54
|
+
removed test code which seems to cause trouble with the masses
|
55
|
+
[201f032ce586]
|
56
|
+
|
57
|
+
2008-05-30 m <m@loonsoft.com>
|
58
|
+
|
59
|
+
* README.txt, lib/recaptcha.rb:
|
60
|
+
fix for loopback addr requests
|
61
|
+
[297ed7ad0790]
|
62
|
+
|
63
|
+
2008-04-07 m <m@loonsoft.com>
|
64
|
+
|
65
|
+
* lib/recaptcha.rb, test/test_recaptcha.rb, website/index.txt:
|
66
|
+
fix for kim griggs
|
67
|
+
[143671e3abb0]
|
68
|
+
|
69
|
+
2008-03-05 m <m@loonsoft.com>
|
70
|
+
|
71
|
+
* lib/recaptcha.rb, test/test_recaptcha.rb:
|
72
|
+
fixed bug when nil challenge string
|
73
|
+
[52e0ff173f56]
|
74
|
+
|
75
|
+
2008-03-01 m <m@loonsoft.com>
|
76
|
+
|
77
|
+
* lib/recaptcha.rb, test/test_recaptcha.rb, website/index.txt:
|
78
|
+
integrated more patches from pv
|
79
|
+
[f63d820d97f9]
|
80
|
+
|
81
|
+
2008-02-24 m <m@loonsoft.com>
|
82
|
+
|
83
|
+
* lib/recaptcha.rb, website/index.txt:
|
84
|
+
reapplied missing patch
|
85
|
+
[4964962ea7be]
|
86
|
+
|
87
|
+
* lib/recaptcha.rb, test/test_recaptcha.rb, website/index.txt:
|
88
|
+
patch from peter vandenberk
|
89
|
+
[299402495d48]
|
90
|
+
|
91
|
+
2008-01-12 m <m@loonsoft.com>
|
92
|
+
|
93
|
+
* website/index.txt:
|
94
|
+
website formatting
|
95
|
+
[0c065e76a6a8]
|
96
|
+
|
97
|
+
* website/index.txt:
|
98
|
+
website formatting
|
99
|
+
[79fe86cded6a]
|
100
|
+
|
101
|
+
* lib/recaptcha.rb, test/test_recaptcha.rb, website/index.txt:
|
102
|
+
proxy support
|
103
|
+
[e55d02f563e4]
|
104
|
+
|
105
|
+
2007-12-30 m <m@loonsoft.com>
|
106
|
+
|
107
|
+
* scripts/txt2html, website/index.txt:
|
108
|
+
updated website
|
109
|
+
[aa2897a0b6fd]
|
110
|
+
|
111
|
+
* website/index.txt:
|
112
|
+
Backed out changeset 0cc68aefef09
|
113
|
+
[770296229d47]
|
114
|
+
|
115
|
+
* website/index.txt:
|
116
|
+
fixed uri
|
117
|
+
[0cc68aefef09]
|
118
|
+
|
119
|
+
2007-12-26 m <m@loonsoft.com>
|
120
|
+
|
121
|
+
* Rakefile, website/index.txt:
|
122
|
+
bleh
|
123
|
+
[62edd6a24d72]
|
124
|
+
|
125
|
+
2007-10-08 m <m@loonsoft.com>
|
126
|
+
|
127
|
+
* website/template.rhtml:
|
128
|
+
modified coda
|
129
|
+
[d0102db1ece1]
|
130
|
+
|
131
|
+
2007-08-23 m <m@loonsoft.com>
|
132
|
+
|
133
|
+
* lib/recaptcha.rb:
|
134
|
+
fix from joey geiger
|
135
|
+
[24e4ed5017bc]
|
136
|
+
|
137
|
+
2007-06-09 m <m@loonsoft.com>
|
138
|
+
|
139
|
+
* lib/recaptcha.rb, test/test_recaptcha.rb:
|
140
|
+
error parameter no longer included when the error is blank or nil
|
141
|
+
[310e75fbd650]
|
142
|
+
|
143
|
+
2007-06-06 m <m@loonsoft.com>
|
144
|
+
|
145
|
+
* website/index.txt:
|
146
|
+
merge
|
147
|
+
[13de70beb380]
|
148
|
+
|
149
|
+
* lib/recaptcha.rb, test/test_recaptcha.rb, website/index.txt:
|
150
|
+
Backed out changeset 5a6746ce03f73d0dd02db155816500870088bf6e
|
151
|
+
backout of the backout, cosby patch back in
|
152
|
+
[ed21f08b6331]
|
153
|
+
|
154
|
+
* website/index.txt:
|
155
|
+
further clarification
|
156
|
+
[db3308cd9f2b]
|
157
|
+
|
158
|
+
* lib/recaptcha/version.rb, website/index.txt:
|
159
|
+
clarification to doc
|
160
|
+
[0ce238b954ed]
|
161
|
+
|
162
|
+
* website/index.txt:
|
163
|
+
updated site
|
164
|
+
[b798dbd756f5]
|
165
|
+
|
166
|
+
* lib/recaptcha.rb, test/test_recaptcha.rb, website/index.txt:
|
167
|
+
Backed out changeset d614a6a28630eb4dba913739518dbdc6d3aaa410
|
168
|
+
|
169
|
+
seems to be causing issues
|
170
|
+
[5a6746ce03f7]
|
171
|
+
|
172
|
+
* website/index.txt:
|
173
|
+
clarification
|
174
|
+
[9d2ff1293a4e]
|
175
|
+
|
176
|
+
2007-05-30 m <m@loonsoft.com>
|
177
|
+
|
178
|
+
* lib/recaptcha.rb, test/test_recaptcha.rb, website/index.txt:
|
179
|
+
patch from victor cosby
|
180
|
+
[d614a6a28630]
|
181
|
+
|
182
|
+
2007-05-29 m <m@loonsoft.com>
|
183
|
+
|
184
|
+
* lib/recaptcha.rb, test/test_recaptcha.rb, website/index.txt:
|
185
|
+
Backed out changeset 1086e6e6217f85433cc539e6d687880adc421c2f
|
186
|
+
[d1dc394b249b]
|
187
|
+
|
188
|
+
* lib/recaptcha.rb, test/test_recaptcha.rb, website/index.txt:
|
189
|
+
reworked error handling
|
190
|
+
[1086e6e6217f]
|
191
|
+
|
192
|
+
2007-05-27 m <m@loonsoft.com>
|
193
|
+
|
194
|
+
* lib/recaptcha.rb:
|
195
|
+
removed bogon method stub
|
196
|
+
[5497521e6a01]
|
197
|
+
|
198
|
+
* website/index.txt:
|
199
|
+
fixup page
|
200
|
+
[99665cb4b9a1]
|
201
|
+
|
202
|
+
* website/index.txt:
|
203
|
+
mailhide supported
|
204
|
+
[4a0b9f72eede]
|
205
|
+
|
206
|
+
* lib/recaptcha.rb, test/test_recaptcha.rb:
|
207
|
+
mailhide supported
|
208
|
+
[943383442ab0]
|
209
|
+
|
210
|
+
2007-05-25 m <m@loonsoft.com>
|
211
|
+
|
212
|
+
* website/index.txt:
|
213
|
+
pointer to code
|
214
|
+
[848e1a4c0b17]
|
215
|
+
|
216
|
+
* website/template.rhtml:
|
217
|
+
urchin
|
218
|
+
[e2b1d5e77f97]
|
219
|
+
|
220
|
+
* lib/recaptcha.rb, test/test_recaptcha.rb:
|
221
|
+
added cgi module, some tests
|
222
|
+
[a9f834ef0ffb]
|
223
|
+
|
224
|
+
* Rakefile, website/index.txt:
|
225
|
+
updates
|
226
|
+
[5f41c4ec54b2]
|
227
|
+
|
228
|
+
* Rakefile, lib/recaptcha/version.rb, scripts/txt2html:
|
229
|
+
updates
|
230
|
+
[ef9516789992]
|
231
|
+
|
232
|
+
* .hgignore, History.txt, Rakefile:
|
233
|
+
updates
|
234
|
+
[976727776d37]
|
235
|
+
|
236
|
+
* website/index.txt:
|
237
|
+
changed license
|
238
|
+
[63e4d638cbea]
|
239
|
+
|
240
|
+
* lib/recaptcha.rb, website/index.txt:
|
241
|
+
changed license
|
242
|
+
[d7dcf24bb808]
|
243
|
+
|
244
|
+
* lib/recaptcha/version.rb:
|
245
|
+
turned off ssl
|
246
|
+
[5ae4c8024402]
|
247
|
+
|
248
|
+
* lib/recaptcha.rb:
|
249
|
+
turned off ssl
|
250
|
+
[8047f6e7eceb]
|
251
|
+
|
252
|
+
* .hgtags:
|
253
|
+
Added tag release 1.1.2 for changeset cd3bd3392418
|
254
|
+
[844ac63dfb5a]
|
255
|
+
|
256
|
+
* Rakefile, scripts/txt2html:
|
257
|
+
update
|
258
|
+
[cd3bd3392418] [release 1.1.2]
|
259
|
+
|
260
|
+
* .hgignore, Rakefile, website/index.txt:
|
261
|
+
update
|
262
|
+
[3d15d7d8ff91]
|
263
|
+
|
264
|
+
* Rakefile, website/index.html, website/index.txt:
|
265
|
+
update
|
266
|
+
[6af50b34c9fa]
|
267
|
+
|
268
|
+
* lib/recaptcha.rb, lib/recaptcha/version.rb:
|
269
|
+
updated
|
270
|
+
[d28f38ac7cde]
|
271
|
+
|
272
|
+
* .hgignore:
|
273
|
+
ignore packages
|
274
|
+
[1c4ea4c672d2]
|
275
|
+
|
276
|
+
* .hgignore:
|
277
|
+
hgignore
|
278
|
+
[57e762617a54]
|
279
|
+
|
280
|
+
* lib/recaptcha.rb:
|
281
|
+
fixed license
|
282
|
+
[146d97cc2e51]
|
283
|
+
|
284
|
+
* History.txt, Manifest.txt, README.txt, Rakefile, lib/recaptcha.rb,
|
285
|
+
lib/recaptcha/version.rb, scripts/txt2html, setup.rb,
|
286
|
+
test/test_helper.rb, test/test_recaptcha.rb, website/index.html,
|
287
|
+
website/index.txt, website/javascripts/rounded_corners_lite.inc.js,
|
288
|
+
website/stylesheets/screen.css, website/template.rhtml:
|
289
|
+
initial
|
290
|
+
[1f1ba6ed3ef1]
|
117
291
|
|
data/README.txt
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
= ruby-recaptcha
|
2
2
|
|
3
|
-
|
3
|
+
* http://www.bitbucket.org/mml/ruby-recaptcha
|
4
4
|
|
5
|
-
|
5
|
+
== Installing
|
6
6
|
|
7
7
|
<pre>
|
8
8
|
gem install recaptcha
|
9
9
|
</pre>
|
10
10
|
|
11
|
-
|
11
|
+
== The basics
|
12
12
|
|
13
13
|
The ReCaptchaClient abstracts the ReCaptcha API for use in Rails Applications
|
14
14
|
|
15
15
|
|
16
|
-
|
16
|
+
== Demonstration of usage
|
17
17
|
|
18
|
-
|
18
|
+
=== reCAPTCHA
|
19
19
|
|
20
20
|
First, create an account at "ReCaptcha.net":http://www.recaptcha.net.
|
21
21
|
|
@@ -64,14 +64,14 @@ To customize theme and tabindex of the widget, you can include an options hash:
|
|
64
64
|
|
65
65
|
See the "reCAPTCHA API Documentation":http://recaptcha.net/apidocs/captcha/ under "Look and Feel Customization" for more information.
|
66
66
|
|
67
|
-
|
67
|
+
=== Proxy support
|
68
68
|
|
69
69
|
If your rails application requires the use of a proxy, set proxy_host into your environment:
|
70
70
|
<pre>
|
71
71
|
ENV['proxy_host']='foo.example.com:8080'
|
72
72
|
</pre>
|
73
73
|
|
74
|
-
|
74
|
+
=== Mail Hide
|
75
75
|
|
76
76
|
When you mix in ViewHelper as above, you also get <pre> mail_hide(address, contents)</pre>, which you can call in your view thusly:
|
77
77
|
|
@@ -82,11 +82,11 @@ When you mix in ViewHelper as above, you also get <pre> mail_hide(address, conte
|
|
82
82
|
|
83
83
|
Contents defaults to the first few characters of the email address.
|
84
84
|
|
85
|
-
|
85
|
+
== Bugs
|
86
86
|
|
87
87
|
http://www.bitbucket.org/mml/ruby-recaptcha/issues
|
88
88
|
|
89
|
-
|
89
|
+
== Code
|
90
90
|
|
91
91
|
Get it "here":http://www.bitbucket.org/mml/ruby-recaptcha
|
92
92
|
|
@@ -94,15 +94,15 @@ Note the wiki & forum & such there...
|
|
94
94
|
|
95
95
|
|
96
96
|
|
97
|
-
|
97
|
+
== License
|
98
98
|
|
99
99
|
This code is free to use under the terms of the MIT License.
|
100
100
|
|
101
|
-
|
101
|
+
== Contact
|
102
102
|
|
103
103
|
Comments are welcome. Send an email to "McClain Looney":mailto:mlooney@gmail.com.
|
104
104
|
|
105
|
-
|
105
|
+
== Contributors:
|
106
106
|
|
107
107
|
Victor Cosby (test cleanup, additional code to style widget)
|
108
108
|
<br>
|
data/lib/recaptcha.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#Copyright (c) 2007, 2008, 2009 McClain Looney
|
1
|
+
#Copyright (c) 2007, 2008, 2009, 2010 McClain Looney
|
2
2
|
#
|
3
3
|
#Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
4
|
#of this software and associated documentation files (the "Software"), to deal
|
@@ -17,23 +17,44 @@
|
|
17
17
|
#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
18
|
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
19
|
#THE SOFTWARE.
|
20
|
+
|
20
21
|
require 'openssl'
|
21
22
|
require 'base64'
|
22
23
|
require 'cgi'
|
23
24
|
require 'net/http'
|
24
25
|
require 'net/https'
|
26
|
+
|
25
27
|
module ReCaptcha
|
28
|
+
# Some simple view helpers. Include this module in your own helper to pull in macros to spit out view code.
|
29
|
+
# include Recaptcha
|
26
30
|
module ViewHelper
|
31
|
+
# Call this to generate the actual ReCaptcha script into your template.
|
32
|
+
# Options can include
|
33
|
+
# [rcc_pub] public recaptcha key (defaults to RCC_PUB constant)
|
34
|
+
# [rcc_priv] privte recaptcha key (defaults to RCC_PRIV constant)
|
35
|
+
# [ssl] generate ssl-based output, defaults to false
|
36
|
+
#
|
37
|
+
# This method also sets :rcc_err into the session.
|
38
|
+
# Example (rcc_pub and rcc_private not required if RCC_PUB & RCC_PRIV constants are used):
|
39
|
+
# = get_captcha(:rcc_pub => 'foobar', :rcc_priv => 'blegga', :ssl => true)
|
40
|
+
#
|
27
41
|
def get_captcha(options={})
|
28
|
-
k = ReCaptcha::Client.new(options[:rcc_pub] || RCC_PUB, options[:rcc_priv] || RCC_PRIV, options[:ssl] || false)
|
42
|
+
k = ReCaptcha::Client.new((options[:rcc_pub] || RCC_PUB), (options[:rcc_priv] || RCC_PRIV), (options[:ssl] || false))
|
29
43
|
r = k.get_challenge(session[:rcc_err] || '', options)
|
30
44
|
session[:rcc_err]=''
|
31
45
|
r
|
32
46
|
end
|
47
|
+
|
48
|
+
# Call this to generate the MailHide view code.
|
49
|
+
#
|
50
|
+
# Note: doesn't currently support ssl for some reason.
|
51
|
+
# [address] the email address you want to hide
|
52
|
+
# [contents] optional string to display as the text of the mailhide link
|
53
|
+
#
|
33
54
|
def mail_hide(address, contents=nil)
|
34
55
|
contents = truncate(address,10) if contents.nil?
|
35
|
-
k = ReCaptcha::MHClient.new(MH_PUB, MH_PRIV)
|
36
|
-
enciphered = k.
|
56
|
+
k = ReCaptcha::MHClient.new(MH_PUB, MH_PRIV, address)
|
57
|
+
enciphered = k.crypted_address
|
37
58
|
uri = "http://mailhide.recaptcha.net/d?k=#{MH_PUB}&c=#{enciphered}"
|
38
59
|
t =<<-EOF
|
39
60
|
<a href="#{uri}"
|
@@ -42,22 +63,40 @@ module ReCaptcha
|
|
42
63
|
end
|
43
64
|
|
44
65
|
end
|
66
|
+
|
67
|
+
# This module provides a simple helper for use in your controller
|
68
|
+
# to determine whether the ReCaptcha challenge was completed successfully.
|
69
|
+
# Simply include this module in your controller class
|
45
70
|
module AppHelper
|
46
|
-
|
71
|
+
# Validate recaptcha from passed in params. Sets errors into the errors hash.
|
72
|
+
#
|
73
|
+
# [p] request parameters. Requires :recaptcha_challenge_field and :recaptcha_response_field
|
74
|
+
# [errors] errors hash-like thing. Usually ActiveRecord::Base.errors
|
75
|
+
# [options] Options hash. currently only uses :rcc_pub and :rcc_priv options for passing in ReCaptcha keys.
|
47
76
|
def validate_recap(p, errors, options = {})
|
48
77
|
rcc=ReCaptcha::Client.new(options[:rcc_pub] || RCC_PUB, options[:rcc_priv] || RCC_PRIV)
|
49
78
|
res = rcc.validate(request.remote_ip, p[:recaptcha_challenge_field], p[:recaptcha_response_field], errors)
|
50
79
|
session[:rcc_err]=rcc.last_error
|
51
|
-
|
52
80
|
res
|
53
81
|
end
|
54
82
|
end
|
83
|
+
|
84
|
+
# Mail hide client. Provides interfaceto ReCaptcha MailHide API
|
55
85
|
class MHClient
|
56
|
-
|
86
|
+
# [pubkey] MailHide public key
|
87
|
+
# [privkey] MailHide private key
|
88
|
+
# [address] the address you want to hide.
|
89
|
+
def initialize(pubkey, privkey, address)
|
57
90
|
@pubkey=pubkey
|
58
91
|
@privkey=privkey
|
92
|
+
@address = address
|
59
93
|
@host='mailhide.recaptcha.net'
|
60
94
|
end
|
95
|
+
#The encrypted address
|
96
|
+
def crypted_address
|
97
|
+
encrypt(@address)
|
98
|
+
end
|
99
|
+
private
|
61
100
|
def encrypt(string)
|
62
101
|
padded = pad(string)
|
63
102
|
iv="\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
|
@@ -80,8 +119,16 @@ module ReCaptcha
|
|
80
119
|
str
|
81
120
|
end
|
82
121
|
end
|
83
|
-
class Client
|
84
122
|
|
123
|
+
# This class implements a client object capable of communicating ReCaptcha validation requests to the
|
124
|
+
# ReCaptcha service.
|
125
|
+
#
|
126
|
+
class Client
|
127
|
+
#last recaptcha error
|
128
|
+
attr_reader :last_error
|
129
|
+
# [pubkey] public ReCaptcha key
|
130
|
+
# [privkey] private ReCaptcha key (keep this a secret!)
|
131
|
+
# [ssl?] use https for requests when set. defaults to false.
|
85
132
|
def initialize(pubkey, privkey, ssl=false)
|
86
133
|
@pubkey = pubkey
|
87
134
|
@privkey=privkey
|
@@ -92,6 +139,10 @@ module ReCaptcha
|
|
92
139
|
@last_error=nil
|
93
140
|
end
|
94
141
|
|
142
|
+
# get ReCaptcha challenge text, optionally setting the error message displayed on failure.
|
143
|
+
# [error] error message to be displayed on error
|
144
|
+
# [options] options hash. This is translated into a javascript hash and sent along to the ReCaptcha service as RecaptchaOptions
|
145
|
+
#
|
95
146
|
def get_challenge(error='', options={})
|
96
147
|
s=''
|
97
148
|
if options[:options]
|
@@ -117,9 +168,11 @@ module ReCaptcha
|
|
117
168
|
EOF
|
118
169
|
end
|
119
170
|
|
120
|
-
|
121
|
-
|
122
|
-
|
171
|
+
# Validate request. Note that this function actually makes a network request.
|
172
|
+
# [remoteip] request remote ip address
|
173
|
+
# [challenge] reCaptcha challenge
|
174
|
+
# [response] reCaptcha response
|
175
|
+
# [errors] errors hash-likethingy (usually from ActiveRecord::Base.errors)
|
123
176
|
def validate(remoteip, challenge, response, errors)
|
124
177
|
msg = "Captcha failed."
|
125
178
|
unless response and challenge
|
data/lib/ruby-recaptcha.rb
CHANGED
data/test/test_helper.rb
CHANGED
data/test/test_recaptcha.rb
CHANGED
@@ -67,17 +67,16 @@ class TestRecaptcha < Test::Unit::TestCase
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def test_encrypt
|
70
|
-
mhc = ReCaptcha::MHClient.new('01S1TOX9aibKxfC9oJlp8IeA==', 'deadbeefdeadbeefdeadbeefdeadbeef')
|
71
|
-
z =mhc.
|
70
|
+
mhc = ReCaptcha::MHClient.new('01S1TOX9aibKxfC9oJlp8IeA==', 'deadbeefdeadbeefdeadbeefdeadbeef', 'x@example.com')
|
71
|
+
z =mhc.crypted_address
|
72
72
|
assert_equal 'wBG7nOgntKqWeDpF9ucVNQ==', z
|
73
|
-
z =mhc.encrypt('johndoe@example.com')
|
74
|
-
assert_equal 'whWIqk0r4urZ-3S7y7uSceC9_ECd3hpAGy71E2o0HpI=', z
|
75
73
|
end
|
76
74
|
def test_encrypt_long
|
77
|
-
mhc = ReCaptcha::MHClient.new('01S1TOX9aibKxfC9oJlp8IeA==', 'deadbeefdeadbeefdeadbeefdeadbeef')
|
78
|
-
z =mhc.
|
75
|
+
mhc = ReCaptcha::MHClient.new('01S1TOX9aibKxfC9oJlp8IeA==', 'deadbeefdeadbeefdeadbeefdeadbeef', 'averylongemailaddressofmorethan32cdharactersx@example.com')
|
76
|
+
z =mhc.crypted_address
|
79
77
|
assert_equal "q-0LLVT2bIxWbFpfLfpNhJAGadkfWXVk4hAxSlVaLrdnXrsB1NKNubavS5N-7PBued3K531vifN6NB3iz3W7qQ==",z
|
80
|
-
|
78
|
+
mhc = ReCaptcha::MHClient.new('01S1TOX9aibKxfC9oJlp8IeA==', 'deadbeefdeadbeefdeadbeefdeadbeef', 'johndoe@example.com')
|
79
|
+
z = mhc.crypted_address
|
81
80
|
assert_equal 'whWIqk0r4urZ-3S7y7uSceC9_ECd3hpAGy71E2o0HpI=', z
|
82
81
|
end
|
83
82
|
|
@@ -109,10 +108,7 @@ class TestRecaptcha < Test::Unit::TestCase
|
|
109
108
|
def test_constructor_with_recaptcha_options
|
110
109
|
# "Look and Feel Customization" per http://recaptcha.net/apidocs/captcha/
|
111
110
|
client = new_client
|
112
|
-
|
113
|
-
<script type=\"text/javascript\">\nvar RecaptchaOptions = { theme : \"white\", tabindex : 10};\n</script>\n <script type=\"text/javascript\" src=\"http://api.recaptcha.net/challenge?k=abc&error=somerror\"> </script>\n <noscript>\n <iframe src=\"http://api.recaptcha.net/noscript?k=abc&error=somerror\"\n height=\"300\" width=\"500\" frameborder=\"0\"></iframe><br>\n <textarea name=\"recaptcha_challenge_field\" rows=\"3\" cols=\"40\">\n </textarea>\n <input type=\"hidden\" name=\"recaptcha_response_field\" \n value=\"manual_challenge\">\n </noscript>
|
114
|
-
EOF
|
115
|
-
assert_equal expected.strip, client.get_challenge('somerror', :options => {:theme => 'white', :tabindex => 10}).strip
|
111
|
+
assert_match(/theme \: \"white\"/, client.get_challenge('somerror', :options => {:theme => 'white', :tabindex => 10}))
|
116
112
|
end
|
117
113
|
|
118
114
|
def test_validate_fails
|
@@ -222,12 +218,12 @@ class TestRecaptcha < Test::Unit::TestCase
|
|
222
218
|
ReCaptcha::ViewHelper.define_public_key # 'foo'
|
223
219
|
ReCaptcha::ViewHelper.define_private_key # 'bar'
|
224
220
|
actual = @vf.get_captcha
|
225
|
-
|
221
|
+
assert_match(/k=foo/, actual)
|
226
222
|
ReCaptcha::ViewHelper.undefine_public_key
|
227
223
|
ReCaptcha::ViewHelper.undefine_private_key
|
228
224
|
# next, with options
|
229
225
|
actual = @vf.get_captcha(:rcc_pub => 'foobar', :rcc_priv => 'blegga')
|
230
|
-
|
226
|
+
assert_match(/k=foobar/, actual)
|
231
227
|
end
|
232
228
|
|
233
229
|
#
|
@@ -241,6 +237,7 @@ class TestRecaptcha < Test::Unit::TestCase
|
|
241
237
|
@cf.validate_recap({}, {})
|
242
238
|
end
|
243
239
|
end
|
240
|
+
|
244
241
|
def test_validate_recap_fails_without_public_key_constant
|
245
242
|
assert !ReCaptcha::AppHelper.const_defined?(:RCC_PUB)
|
246
243
|
assert !ReCaptcha::AppHelper.const_defined?(:RCC_PRIV)
|
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.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- McClain Looney
|
@@ -9,18 +9,18 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-02-10 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: hoe
|
17
17
|
type: :development
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version:
|
23
|
+
version: 2.5.0
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: hoe
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.5.0
|
34
34
|
version:
|
35
35
|
description: ""
|
36
36
|
email:
|
@@ -48,7 +48,9 @@ files:
|
|
48
48
|
- lib/recaptcha.rb
|
49
49
|
- lib/ruby-recaptcha.rb
|
50
50
|
has_rdoc: true
|
51
|
-
homepage:
|
51
|
+
homepage: http://www.bitbucket.org/mml/ruby-recaptcha
|
52
|
+
licenses: []
|
53
|
+
|
52
54
|
post_install_message:
|
53
55
|
rdoc_options:
|
54
56
|
- --main
|
@@ -70,9 +72,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
72
|
requirements: []
|
71
73
|
|
72
74
|
rubyforge_project: ruby-recaptcha
|
73
|
-
rubygems_version: 1.3.
|
75
|
+
rubygems_version: 1.3.5
|
74
76
|
signing_key:
|
75
|
-
specification_version:
|
77
|
+
specification_version: 3
|
76
78
|
summary: ""
|
77
79
|
test_files:
|
78
80
|
- test/test_helper.rb
|