rucaptcha 2.2.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Gem Version](https://badge.fury.io/rb/rucaptcha.svg)](https://badge.fury.io/rb/rucaptcha)
|
4
4
|
[![Build Status](https://travis-ci.org/huacnlee/rucaptcha.svg)](https://travis-ci.org/huacnlee/rucaptcha)
|
5
|
-
[![Code Climate](https://codeclimate.com/github/huacnlee/rucaptcha/badges/gpa.svg)](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
|
+
![rucaptcha-0](https://user-images.githubusercontent.com/5518/45154624-c471a780-b20a-11e8-8bec-6c133838d53a.gif) ![rucaptcha-1](https://user-images.githubusercontent.com/5518/45154625-c471a780-b20a-11e8-8d09-dfb6ace6e9ba.gif) ![rucaptcha-2](https://user-images.githubusercontent.com/5518/45154628-c50a3e00-b20a-11e8-9afd-7c200b663dbc.gif) ![rucaptcha-3](https://user-images.githubusercontent.com/5518/45154629-c50a3e00-b20a-11e8-88d1-536717664e88.gif) ![rucaptcha-4](https://user-images.githubusercontent.com/5518/45154630-c50a3e00-b20a-11e8-9aa8-9b896a177e84.gif)
|
15
|
+
|
16
|
+
**outline enable**
|
17
|
+
|
18
|
+
![rucaptcha-b0](https://user-images.githubusercontent.com/5518/45154631-c5a2d480-b20a-11e8-9b63-febdaa5e5c9c.gif) ![rucaptcha-b1](https://user-images.githubusercontent.com/5518/45154632-c5a2d480-b20a-11e8-896b-0fe17bc0b5c5.gif) ![rucaptcha-b2](https://user-images.githubusercontent.com/5518/45154633-c63b6b00-b20a-11e8-8226-7d516764634c.gif) ![rucaptcha-b3](https://user-images.githubusercontent.com/5518/45154634-c63b6b00-b20a-11e8-9781-c22a3109616b.gif) ![rucaptcha-b4](https://user-images.githubusercontent.com/5518/45154635-c63b6b00-b20a-11e8-8e12-52a30e686339.gif)
|
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
|