rucaptcha 2.2.0 → 2.3.0
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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +8 -2
- data/README.md +10 -3
- data/ext/rucaptcha/colors.h +112 -339
- data/ext/rucaptcha/rucaptcha.c +18 -12
- data/lib/rucaptcha.rb +3 -1
- data/lib/rucaptcha/configuration.rb +2 -0
- data/lib/rucaptcha/controller_helpers.rb +8 -0
- data/lib/rucaptcha/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5601faf2374b194da6f350685728238b10224ee52a2a549f917de97af9d27377
|
4
|
+
data.tar.gz: d70a0e2700e0fb41f2033d9c3c6bd4be74405501dc66258296332d1c651c2a17
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c89ae2e180761861416e443552acb0473582aa653b9569819a2ddc11c9c27d559cec547b501b4122d2e031bdf825c5c1800829431bdba06a81b8abcc35b3a9a
|
7
|
+
data.tar.gz: 26b4784ca77c22c17dd13631c81218d5f12630b090c02f26ba8def91bb5b215affc226606a3894c0c3d45e643848701c0092e0631a86da84ba883d817641bffc
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,14 @@
|
|
1
|
+
2.3.0
|
2
|
+
-------
|
3
|
+
|
4
|
+
- Add `config.outline` for use outline style.
|
5
|
+
- Reduce colors down to 5 (red, blue, green, yellow and black).
|
6
|
+
|
1
7
|
2.2.0
|
2
8
|
-----
|
3
9
|
|
4
|
-
- Add option `config.length` for support change number chars.
|
5
|
-
- Add option `config.strikethrough` for enable or disable strikethrough.
|
10
|
+
- Add option `config.length` for support change number chars. (#57)
|
11
|
+
- Add option `config.strikethrough` for enable or disable strikethrough. (#57)
|
6
12
|
|
7
13
|
2.1.3
|
8
14
|
-----
|
data/README.md
CHANGED
@@ -2,15 +2,20 @@
|
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/rucaptcha)
|
4
4
|
[](https://travis-ci.org/huacnlee/rucaptcha)
|
5
|
-
[](https://codeclimate.com/github/huacnlee/rucaptcha)
|
6
5
|
|
7
6
|
This is a Captcha gem for Rails Applications which generates captcha image by C code.
|
8
7
|
|
8
|
+
[中文介绍和使用说明](https://ruby-china.org/topics/27832)
|
9
|
+
|
9
10
|
## Example
|
10
11
|
|
11
|
-
|
12
|
+
**default style**
|
12
13
|
|
13
|
-
[
|
14
|
+
    
|
15
|
+
|
16
|
+
**outline enable**
|
17
|
+
|
18
|
+
    
|
14
19
|
|
15
20
|
## Feature
|
16
21
|
|
@@ -46,6 +51,8 @@ RuCaptcha.configure do
|
|
46
51
|
# self.length = 5
|
47
52
|
# enable/disable Strikethrough.
|
48
53
|
# self.strikethrough = true
|
54
|
+
# enable/disable Outline style, for hard mode
|
55
|
+
# self.outline = false
|
49
56
|
end
|
50
57
|
```
|
51
58
|
|
data/ext/rucaptcha/colors.h
CHANGED
@@ -1,345 +1,118 @@
|
|
1
1
|
// Colors from
|
2
2
|
// https://material.io/guidelines/style/color.html#color-ui-color-palette
|
3
|
+
// Color covert HEX RGB to \x??\x??\x??
|
3
4
|
static char *colors[] = {
|
4
5
|
// Black 500 #000000
|
5
6
|
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
6
|
-
"\
|
7
|
-
"\
|
8
|
-
"\
|
9
|
-
"\
|
10
|
-
"\
|
11
|
-
"\
|
12
|
-
"\
|
13
|
-
"\
|
14
|
-
"\
|
15
|
-
"\
|
16
|
-
"\
|
17
|
-
"\
|
18
|
-
"\
|
19
|
-
"\
|
20
|
-
"\
|
21
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
22
|
-
|
23
|
-
// Red
|
24
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
25
|
-
"\
|
26
|
-
"\
|
27
|
-
"\
|
28
|
-
"\
|
29
|
-
"\
|
30
|
-
"\
|
31
|
-
"\
|
32
|
-
"\
|
33
|
-
"\
|
34
|
-
"\
|
35
|
-
"\
|
36
|
-
"\
|
37
|
-
"\
|
38
|
-
"\
|
39
|
-
"\
|
40
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
41
|
-
|
42
|
-
//
|
43
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
44
|
-
"\
|
45
|
-
"\
|
46
|
-
"\
|
47
|
-
"\
|
48
|
-
"\
|
49
|
-
"\
|
50
|
-
"\
|
51
|
-
"\
|
52
|
-
"\
|
53
|
-
"\
|
54
|
-
"\
|
55
|
-
"\
|
56
|
-
"\
|
57
|
-
"\
|
58
|
-
"\
|
59
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
60
|
-
|
61
|
-
//
|
62
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
63
|
-
"\
|
64
|
-
"\
|
65
|
-
"\
|
66
|
-
"\
|
67
|
-
"\
|
68
|
-
"\
|
69
|
-
"\
|
70
|
-
"\
|
71
|
-
"\
|
72
|
-
"\
|
73
|
-
"\
|
74
|
-
"\
|
75
|
-
"\
|
76
|
-
"\
|
77
|
-
"\
|
78
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
79
|
-
|
80
|
-
//
|
81
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
82
|
-
"\
|
83
|
-
"\
|
84
|
-
"\
|
85
|
-
"\
|
86
|
-
"\
|
87
|
-
"\
|
88
|
-
"\
|
89
|
-
"\
|
90
|
-
"\
|
91
|
-
"\
|
92
|
-
"\
|
93
|
-
"\
|
94
|
-
"\
|
95
|
-
"\
|
96
|
-
"\
|
97
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
98
|
-
|
99
|
-
//
|
100
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
101
|
-
"\
|
102
|
-
"\
|
103
|
-
"\
|
104
|
-
"\
|
105
|
-
"\
|
106
|
-
"\
|
107
|
-
"\
|
108
|
-
"\
|
109
|
-
"\
|
110
|
-
"\
|
111
|
-
"\
|
112
|
-
"\
|
113
|
-
"\
|
114
|
-
"\
|
115
|
-
"\
|
116
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
117
|
-
|
118
|
-
// Blue 500 #2196F3
|
119
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
120
|
-
"\x21\x96\xF3"
|
121
|
-
"\x21\x96\xF3"
|
122
|
-
"\x21\x96\xF3"
|
123
|
-
"\x21\x96\xF3"
|
124
|
-
"\x21\x96\xF3"
|
125
|
-
"\x21\x96\xF3"
|
126
|
-
"\x21\x96\xF3"
|
127
|
-
"\x21\x96\xF3"
|
128
|
-
"\x21\x96\xF3"
|
129
|
-
"\x21\x96\xF3"
|
130
|
-
"\x21\x96\xF3"
|
131
|
-
"\x21\x96\xF3"
|
132
|
-
"\x21\x96\xF3"
|
133
|
-
"\x21\x96\xF3"
|
134
|
-
"\x21\x96\xF3"
|
135
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
136
|
-
|
137
|
-
// Light Blue 500 #03A9F4
|
138
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
139
|
-
"\x03\xA9\xF4"
|
140
|
-
"\x03\xA9\xF4"
|
141
|
-
"\x03\xA9\xF4"
|
142
|
-
"\x03\xA9\xF4"
|
143
|
-
"\x03\xA9\xF4"
|
144
|
-
"\x03\xA9\xF4"
|
145
|
-
"\x03\xA9\xF4"
|
146
|
-
"\x03\xA9\xF4"
|
147
|
-
"\x03\xA9\xF4"
|
148
|
-
"\x03\xA9\xF4"
|
149
|
-
"\x03\xA9\xF4"
|
150
|
-
"\x03\xA9\xF4"
|
151
|
-
"\x03\xA9\xF4"
|
152
|
-
"\x03\xA9\xF4"
|
153
|
-
"\x03\xA9\xF4"
|
154
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
155
|
-
|
156
|
-
// Cyan 500 #00BCD4
|
157
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
158
|
-
"\x00\xBC\xD4"
|
159
|
-
"\x00\xBC\xD4"
|
160
|
-
"\x00\xBC\xD4"
|
161
|
-
"\x00\xBC\xD4"
|
162
|
-
"\x00\xBC\xD4"
|
163
|
-
"\x00\xBC\xD4"
|
164
|
-
"\x00\xBC\xD4"
|
165
|
-
"\x00\xBC\xD4"
|
166
|
-
"\x00\xBC\xD4"
|
167
|
-
"\x00\xBC\xD4"
|
168
|
-
"\x00\xBC\xD4"
|
169
|
-
"\x00\xBC\xD4"
|
170
|
-
"\x00\xBC\xD4"
|
171
|
-
"\x00\xBC\xD4"
|
172
|
-
"\x00\xBC\xD4"
|
173
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
174
|
-
|
175
|
-
// Teal 500 #009688
|
176
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
177
|
-
"\x00\x96\x88"
|
178
|
-
"\x00\x96\x88"
|
179
|
-
"\x00\x96\x88"
|
180
|
-
"\x00\x96\x88"
|
181
|
-
"\x00\x96\x88"
|
182
|
-
"\x00\x96\x88"
|
183
|
-
"\x00\x96\x88"
|
184
|
-
"\x00\x96\x88"
|
185
|
-
"\x00\x96\x88"
|
186
|
-
"\x00\x96\x88"
|
187
|
-
"\x00\x96\x88"
|
188
|
-
"\x00\x96\x88"
|
189
|
-
"\x00\x96\x88"
|
190
|
-
"\x00\x96\x88"
|
191
|
-
"\x00\x96\x88"
|
192
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
193
|
-
|
194
|
-
// Green 500 #4CAF50
|
195
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
196
|
-
"\x4C\xAF\x50"
|
197
|
-
"\x4C\xAF\x50"
|
198
|
-
"\x4C\xAF\x50"
|
199
|
-
"\x4C\xAF\x50"
|
200
|
-
"\x4C\xAF\x50"
|
201
|
-
"\x4C\xAF\x50"
|
202
|
-
"\x4C\xAF\x50"
|
203
|
-
"\x4C\xAF\x50"
|
204
|
-
"\x4C\xAF\x50"
|
205
|
-
"\x4C\xAF\x50"
|
206
|
-
"\x4C\xAF\x50"
|
207
|
-
"\x4C\xAF\x50"
|
208
|
-
"\x4C\xAF\x50"
|
209
|
-
"\x4C\xAF\x50"
|
210
|
-
"\x4C\xAF\x50"
|
211
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
212
|
-
|
213
|
-
// Light Green 500 #8BC34A
|
214
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
215
|
-
"\x8B\xC3\x4A"
|
216
|
-
"\x8B\xC3\x4A"
|
217
|
-
"\x8B\xC3\x4A"
|
218
|
-
"\x8B\xC3\x4A"
|
219
|
-
"\x8B\xC3\x4A"
|
220
|
-
"\x8B\xC3\x4A"
|
221
|
-
"\x8B\xC3\x4A"
|
222
|
-
"\x8B\xC3\x4A"
|
223
|
-
"\x8B\xC3\x4A"
|
224
|
-
"\x8B\xC3\x4A"
|
225
|
-
"\x8B\xC3\x4A"
|
226
|
-
"\x8B\xC3\x4A"
|
227
|
-
"\x8B\xC3\x4A"
|
228
|
-
"\x8B\xC3\x4A"
|
229
|
-
"\x8B\xC3\x4A"
|
230
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
231
|
-
|
232
|
-
// Lime 500 #CDDC39
|
233
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
234
|
-
"\xCD\xDC\x39"
|
235
|
-
"\xCD\xDC\x39"
|
236
|
-
"\xCD\xDC\x39"
|
237
|
-
"\xCD\xDC\x39"
|
238
|
-
"\xCD\xDC\x39"
|
239
|
-
"\xCD\xDC\x39"
|
240
|
-
"\xCD\xDC\x39"
|
241
|
-
"\xCD\xDC\x39"
|
242
|
-
"\xCD\xDC\x39"
|
243
|
-
"\xCD\xDC\x39"
|
244
|
-
"\xCD\xDC\x39"
|
245
|
-
"\xCD\xDC\x39"
|
246
|
-
"\xCD\xDC\x39"
|
247
|
-
"\xCD\xDC\x39"
|
248
|
-
"\xCD\xDC\x39"
|
249
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
250
|
-
|
251
|
-
// Yellow 500 #FFEB3B
|
252
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
253
|
-
"\xFF\xEB\x3B"
|
254
|
-
"\xFF\xEB\x3B"
|
255
|
-
"\xFF\xEB\x3B"
|
256
|
-
"\xFF\xEB\x3B"
|
257
|
-
"\xFF\xEB\x3B"
|
258
|
-
"\xFF\xEB\x3B"
|
259
|
-
"\xFF\xEB\x3B"
|
260
|
-
"\xFF\xEB\x3B"
|
261
|
-
"\xFF\xEB\x3B"
|
262
|
-
"\xFF\xEB\x3B"
|
263
|
-
"\xFF\xEB\x3B"
|
264
|
-
"\xFF\xEB\x3B"
|
265
|
-
"\xFF\xEB\x3B"
|
266
|
-
"\xFF\xEB\x3B"
|
267
|
-
"\xFF\xEB\x3B"
|
268
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
269
|
-
|
270
|
-
// Amber 500 #FFC107
|
271
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
272
|
-
"\xFF\xC1\x07"
|
273
|
-
"\xFF\xC1\x07"
|
274
|
-
"\xFF\xC1\x07"
|
275
|
-
"\xFF\xC1\x07"
|
276
|
-
"\xFF\xC1\x07"
|
277
|
-
"\xFF\xC1\x07"
|
278
|
-
"\xFF\xC1\x07"
|
279
|
-
"\xFF\xC1\x07"
|
280
|
-
"\xFF\xC1\x07"
|
281
|
-
"\xFF\xC1\x07"
|
282
|
-
"\xFF\xC1\x07"
|
283
|
-
"\xFF\xC1\x07"
|
284
|
-
"\xFF\xC1\x07"
|
285
|
-
"\xFF\xC1\x07"
|
286
|
-
"\xFF\xC1\x07"
|
287
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
288
|
-
|
289
|
-
// Orange 500 #FF9800
|
290
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
291
|
-
"\xFF\x98\x00"
|
292
|
-
"\xFF\x98\x00"
|
293
|
-
"\xFF\x98\x00"
|
294
|
-
"\xFF\x98\x00"
|
295
|
-
"\xFF\x98\x00"
|
296
|
-
"\xFF\x98\x00"
|
297
|
-
"\xFF\x98\x00"
|
298
|
-
"\xFF\x98\x00"
|
299
|
-
"\xFF\x98\x00"
|
300
|
-
"\xFF\x98\x00"
|
301
|
-
"\xFF\x98\x00"
|
302
|
-
"\xFF\x98\x00"
|
303
|
-
"\xFF\x98\x00"
|
304
|
-
"\xFF\x98\x00"
|
305
|
-
"\xFF\x98\x00"
|
306
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
307
|
-
|
308
|
-
// Deep Orange 500 #FF5722
|
309
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
310
|
-
"\xFF\x57\x22"
|
311
|
-
"\xFF\x57\x22"
|
312
|
-
"\xFF\x57\x22"
|
313
|
-
"\xFF\x57\x22"
|
314
|
-
"\xFF\x57\x22"
|
315
|
-
"\xFF\x57\x22"
|
316
|
-
"\xFF\x57\x22"
|
317
|
-
"\xFF\x57\x22"
|
318
|
-
"\xFF\x57\x22"
|
319
|
-
"\xFF\x57\x22"
|
320
|
-
"\xFF\x57\x22"
|
321
|
-
"\xFF\x57\x22"
|
322
|
-
"\xFF\x57\x22"
|
323
|
-
"\xFF\x57\x22"
|
324
|
-
"\xFF\x57\x22"
|
325
|
-
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
326
|
-
|
327
|
-
// Brown 500 #795548
|
328
|
-
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
329
|
-
"\x79\x55\x48"
|
330
|
-
"\x79\x55\x48"
|
331
|
-
"\x79\x55\x48"
|
332
|
-
"\x79\x55\x48"
|
333
|
-
"\x79\x55\x48"
|
334
|
-
"\x79\x55\x48"
|
335
|
-
"\x79\x55\x48"
|
336
|
-
"\x79\x55\x48"
|
337
|
-
"\x79\x55\x48"
|
338
|
-
"\x79\x55\x48"
|
339
|
-
"\x79\x55\x48"
|
340
|
-
"\x79\x55\x48"
|
341
|
-
"\x79\x55\x48"
|
342
|
-
"\x79\x55\x48"
|
343
|
-
"\x79\x55\x48"
|
7
|
+
"\x00\x00\x00"
|
8
|
+
"\x00\x00\x00"
|
9
|
+
"\x00\x00\x00"
|
10
|
+
"\x00\x00\x00"
|
11
|
+
"\x00\x00\x00"
|
12
|
+
"\x00\x00\x00"
|
13
|
+
"\x00\x00\x00"
|
14
|
+
"\x00\x00\x00"
|
15
|
+
"\x00\x00\x00"
|
16
|
+
"\x00\x00\x00"
|
17
|
+
"\x00\x00\x00"
|
18
|
+
"\x00\x00\x00"
|
19
|
+
"\x00\x00\x00"
|
20
|
+
"\x00\x00\x00"
|
21
|
+
"\x00\x00\x00"
|
22
|
+
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
23
|
+
|
24
|
+
// Red A700 #D50000
|
25
|
+
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
26
|
+
"\xD5\x00\x00"
|
27
|
+
"\xD5\x00\x00"
|
28
|
+
"\xD5\x00\x00"
|
29
|
+
"\xD5\x00\x00"
|
30
|
+
"\xD5\x00\x00"
|
31
|
+
"\xD5\x00\x00"
|
32
|
+
"\xD5\x00\x00"
|
33
|
+
"\xD5\x00\x00"
|
34
|
+
"\xD5\x00\x00"
|
35
|
+
"\xD5\x00\x00"
|
36
|
+
"\xD5\x00\x00"
|
37
|
+
"\xD5\x00\x00"
|
38
|
+
"\xD5\x00\x00"
|
39
|
+
"\xD5\x00\x00"
|
40
|
+
"\xD5\x00\x00"
|
41
|
+
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
42
|
+
|
43
|
+
// Deep Orange A700 #DD2C00
|
44
|
+
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
45
|
+
"\xDD\x2C\x00"
|
46
|
+
"\xDD\x2C\x00"
|
47
|
+
"\xDD\x2C\x00"
|
48
|
+
"\xDD\x2C\x00"
|
49
|
+
"\xDD\x2C\x00"
|
50
|
+
"\xDD\x2C\x00"
|
51
|
+
"\xDD\x2C\x00"
|
52
|
+
"\xDD\x2C\x00"
|
53
|
+
"\xDD\x2C\x00"
|
54
|
+
"\xDD\x2C\x00"
|
55
|
+
"\xDD\x2C\x00"
|
56
|
+
"\xDD\x2C\x00"
|
57
|
+
"\xDD\x2C\x00"
|
58
|
+
"\xDD\x2C\x00"
|
59
|
+
"\xDD\x2C\x00"
|
60
|
+
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
61
|
+
|
62
|
+
// Blue A700 #2962FF
|
63
|
+
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
64
|
+
"\x29\x62\xFF"
|
65
|
+
"\x29\x62\xFF"
|
66
|
+
"\x29\x62\xFF"
|
67
|
+
"\x29\x62\xFF"
|
68
|
+
"\x29\x62\xFF"
|
69
|
+
"\x29\x62\xFF"
|
70
|
+
"\x29\x62\xFF"
|
71
|
+
"\x29\x62\xFF"
|
72
|
+
"\x29\x62\xFF"
|
73
|
+
"\x29\x62\xFF"
|
74
|
+
"\x29\x62\xFF"
|
75
|
+
"\x29\x62\xFF"
|
76
|
+
"\x29\x62\xFF"
|
77
|
+
"\x29\x62\xFF"
|
78
|
+
"\x29\x62\xFF"
|
79
|
+
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
80
|
+
|
81
|
+
// Green A700 #00C853
|
82
|
+
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
83
|
+
"\x00\xC8\x53"
|
84
|
+
"\x00\xC8\x53"
|
85
|
+
"\x00\xC8\x53"
|
86
|
+
"\x00\xC8\x53"
|
87
|
+
"\x00\xC8\x53"
|
88
|
+
"\x00\xC8\x53"
|
89
|
+
"\x00\xC8\x53"
|
90
|
+
"\x00\xC8\x53"
|
91
|
+
"\x00\xC8\x53"
|
92
|
+
"\x00\xC8\x53"
|
93
|
+
"\x00\xC8\x53"
|
94
|
+
"\x00\xC8\x53"
|
95
|
+
"\x00\xC8\x53"
|
96
|
+
"\x00\xC8\x53"
|
97
|
+
"\x00\xC8\x53"
|
98
|
+
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
|
99
|
+
|
100
|
+
// Yellow A700 #FFD600
|
101
|
+
"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
|
102
|
+
"\xFF\xD6\x00"
|
103
|
+
"\xFF\xD6\x00"
|
104
|
+
"\xFF\xD6\x00"
|
105
|
+
"\xFF\xD6\x00"
|
106
|
+
"\xFF\xD6\x00"
|
107
|
+
"\xFF\xD6\x00"
|
108
|
+
"\xFF\xD6\x00"
|
109
|
+
"\xFF\xD6\x00"
|
110
|
+
"\xFF\xD6\x00"
|
111
|
+
"\xFF\xD6\x00"
|
112
|
+
"\xFF\xD6\x00"
|
113
|
+
"\xFF\xD6\x00"
|
114
|
+
"\xFF\xD6\x00"
|
115
|
+
"\xFF\xD6\x00"
|
116
|
+
"\xFF\xD6\x00"
|
344
117
|
"\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04"
|
345
|
-
};
|
118
|
+
};
|
data/ext/rucaptcha/rucaptcha.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
// http://github.com/ITikhonov/captcha
|
2
2
|
const int gifsize;
|
3
|
-
void captcha(unsigned char im[70*200], unsigned char l[8], int length, int i_line);
|
3
|
+
void captcha(unsigned char im[70*200], unsigned char l[8], int length, int i_line, int i_filter);
|
4
4
|
void makegif(unsigned char im[70*200], unsigned char gif[gifsize], int style);
|
5
5
|
|
6
6
|
#include <unistd.h>
|
@@ -85,10 +85,10 @@ static int letter(int n, int pos, unsigned char im[70*200], unsigned char swr[20
|
|
85
85
|
if((x-im)<70*200) *x=(*p)<<4;
|
86
86
|
i++;
|
87
87
|
}
|
88
|
-
return mpos;
|
88
|
+
return mpos + 3;
|
89
89
|
}
|
90
90
|
|
91
|
-
#define NDOTS
|
91
|
+
#define NDOTS 10
|
92
92
|
|
93
93
|
uint32_t dr[NDOTS];
|
94
94
|
|
@@ -97,7 +97,7 @@ static void line(unsigned char im[70*200], unsigned char swr[200], uint8_t s1) {
|
|
97
97
|
int sk1=s1;
|
98
98
|
for(x=0;x<199;x++) {
|
99
99
|
if(sk1>=200) sk1=sk1%200;
|
100
|
-
int skew=sw[sk1]/
|
100
|
+
int skew=sw[sk1]/20;
|
101
101
|
sk1+=swr[x]&0x3+1;
|
102
102
|
unsigned char *i= im+(200*(45+skew)+x);
|
103
103
|
i[0]=0; i[1]=0; i[200]=0; i[201]=0;
|
@@ -118,6 +118,7 @@ static void dots(unsigned char im[70*200]) {
|
|
118
118
|
i[202]=0xff;
|
119
119
|
}
|
120
120
|
}
|
121
|
+
|
121
122
|
static void blur(unsigned char im[70*200]) {
|
122
123
|
unsigned char *i=im;
|
123
124
|
int x,y;
|
@@ -150,9 +151,9 @@ static void filter(unsigned char im[70*200]) {
|
|
150
151
|
memmove(im,om,sizeof(om));
|
151
152
|
}
|
152
153
|
|
153
|
-
static const char *letters="
|
154
|
+
static const char *letters="abcdyfhhijklmnopqrstuvwxyz";
|
154
155
|
|
155
|
-
void captcha(unsigned char im[70*200], unsigned char l[8], int length, int i_line) {
|
156
|
+
void captcha(unsigned char im[70*200], unsigned char l[8], int length, int i_line, int i_filter) {
|
156
157
|
unsigned char swr[200];
|
157
158
|
uint8_t s1,s2;
|
158
159
|
|
@@ -173,11 +174,15 @@ void captcha(unsigned char im[70*200], unsigned char l[8], int length, int i_lin
|
|
173
174
|
for(x=0;x<length;x++){
|
174
175
|
p=letter(l[x],p,im,swr,s1,s2);
|
175
176
|
}
|
176
|
-
|
177
|
+
|
177
178
|
if (i_line == 1) {
|
178
179
|
line(im,swr,s1);
|
179
180
|
}
|
180
|
-
|
181
|
+
// dots(im);
|
182
|
+
if (i_filter == 1) {
|
183
|
+
blur(im);
|
184
|
+
filter(im);
|
185
|
+
}
|
181
186
|
|
182
187
|
for(x=0;x<length;x++){
|
183
188
|
l[x]=letters[l[x]];
|
@@ -207,22 +212,23 @@ VALUE RuCaptcha = Qnil;
|
|
207
212
|
|
208
213
|
void Init_rucaptcha();
|
209
214
|
|
210
|
-
VALUE create(VALUE self, VALUE style, VALUE length, VALUE line);
|
215
|
+
VALUE create(VALUE self, VALUE style, VALUE length, VALUE line, VALUE filter);
|
211
216
|
|
212
217
|
void Init_rucaptcha() {
|
213
218
|
RuCaptcha = rb_define_module("RuCaptcha");
|
214
|
-
rb_define_singleton_method(RuCaptcha, "create", create,
|
219
|
+
rb_define_singleton_method(RuCaptcha, "create", create, 4);
|
215
220
|
}
|
216
221
|
|
217
|
-
VALUE create(VALUE self, VALUE style, VALUE length, VALUE line) {
|
222
|
+
VALUE create(VALUE self, VALUE style, VALUE length, VALUE line, VALUE filter) {
|
218
223
|
char l[8];
|
219
224
|
unsigned char im[80*200];
|
220
225
|
unsigned char gif[gifsize];
|
221
226
|
int i_style = FIX2INT(style);
|
222
227
|
int i_length = FIX2INT(length);
|
223
228
|
int i_line = FIX2INT(line);
|
229
|
+
int i_filter = FIX2INT(filter);
|
224
230
|
|
225
|
-
captcha(im, l, i_length, i_line);
|
231
|
+
captcha(im, l, i_length, i_line, i_filter);
|
226
232
|
makegif(im, gif, i_style);
|
227
233
|
|
228
234
|
VALUE result = rb_ary_new2(2);
|
data/lib/rucaptcha.rb
CHANGED
@@ -18,6 +18,7 @@ module RuCaptcha
|
|
18
18
|
@config.style = :colorful
|
19
19
|
@config.length = 5
|
20
20
|
@config.strikethrough = true
|
21
|
+
@config.outline = false
|
21
22
|
@config.expires_in = 2.minutes
|
22
23
|
|
23
24
|
if Rails.application
|
@@ -42,7 +43,8 @@ module RuCaptcha
|
|
42
43
|
end
|
43
44
|
|
44
45
|
strikethrough = config.strikethrough ? 1 : 0
|
45
|
-
|
46
|
+
outline = config.outline ? 1 : 0
|
47
|
+
self.create(style, length, strikethrough, outline)
|
46
48
|
end
|
47
49
|
|
48
50
|
def check_cache_store!
|
@@ -9,6 +9,7 @@ module RuCaptcha
|
|
9
9
|
# session key of rucaptcha
|
10
10
|
def rucaptcha_sesion_key_key
|
11
11
|
session_id = session.respond_to?(:id) ? session.id : session[:session_id]
|
12
|
+
warning_when_session_invalid if session_id.blank?
|
12
13
|
['rucaptcha-session', session_id].join(':')
|
13
14
|
end
|
14
15
|
|
@@ -73,5 +74,12 @@ module RuCaptcha
|
|
73
74
|
end
|
74
75
|
false
|
75
76
|
end
|
77
|
+
|
78
|
+
def warning_when_session_invalid
|
79
|
+
Rails.logger.warn "
|
80
|
+
WARNING! The session.id is blank, RuCaptcha can't work properly, please keep session available.
|
81
|
+
More details about this: https://github.com/huacnlee/rucaptcha/pull/66
|
82
|
+
"
|
83
|
+
end
|
76
84
|
end
|
77
85
|
end
|
data/lib/rucaptcha/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rucaptcha
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Lee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -85,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
85
|
version: '0'
|
86
86
|
requirements: []
|
87
87
|
rubyforge_project:
|
88
|
-
rubygems_version: 2.6
|
88
|
+
rubygems_version: 2.7.6
|
89
89
|
signing_key:
|
90
90
|
specification_version: 4
|
91
91
|
summary: This is a Captcha gem for Rails Applications. It drawing captcha image with
|