ruby-recaptcha 1.0.0 → 1.0.2
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/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
|