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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 0740eff0acb8f6c4fb6b4da226b3abbcab71412c
4
- data.tar.gz: 75b309cf315d5dd39b4d0f1692639ac86613258c
2
+ SHA256:
3
+ metadata.gz: 5601faf2374b194da6f350685728238b10224ee52a2a549f917de97af9d27377
4
+ data.tar.gz: d70a0e2700e0fb41f2033d9c3c6bd4be74405501dc66258296332d1c651c2a17
5
5
  SHA512:
6
- metadata.gz: 33372cd726889909c636742cc61bc23ccb2e7c4f4e3b0a509fb05ace0867cfff0e486a4f2ea11b20491c173df28d161f63206ed380ba1efca29eb202fb25ab62
7
- data.tar.gz: 679be16335e6740e7167b65e5b20a9c32c4e9386aceeb2cab57735a77919b1144230c02ffbc17e75c4911c56e0e65294ae9dbd57d4c5eb7cba75eb6736d9a2e9
6
+ metadata.gz: 2c89ae2e180761861416e443552acb0473582aa653b9569819a2ddc11c9c27d559cec547b501b4122d2e031bdf825c5c1800829431bdba06a81b8abcc35b3a9a
7
+ data.tar.gz: 26b4784ca77c22c17dd13631c81218d5f12630b090c02f26ba8def91bb5b215affc226606a3894c0c3d45e643848701c0092e0631a86da84ba883d817641bffc
@@ -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
- <img src="https://cloud.githubusercontent.com/assets/5518/22151425/e02390c8-df58-11e6-974d-5eb9b1a4e577.gif" width="150px" /> <img src="https://cloud.githubusercontent.com/assets/5518/22151427/e4939d92-df58-11e6-9754-4a46a86acea8.gif" width="150px" /> <img src="https://cloud.githubusercontent.com/assets/5518/22151431/e494576e-df58-11e6-9845-a5590904c175.gif" width="150px" /> <img src="https://cloud.githubusercontent.com/assets/5518/22151432/e495066e-df58-11e6-92b8-38b40b73aba0.gif" width="150px" /> <img src="https://cloud.githubusercontent.com/assets/5518/22151428/e49404ee-df58-11e6-8e2d-8b17b33a3710.gif" width="150px" /> <img src="https://cloud.githubusercontent.com/assets/5518/22151430/e4942406-df58-11e6-9ff8-6e2325304b41.gif" width="150px" /> <img src="https://cloud.githubusercontent.com/assets/5518/22151429/e4941ae2-df58-11e6-8107-757296573b2f.gif" width="150px" /> <img src="https://cloud.githubusercontent.com/assets/5518/22151433/e4c7c89c-df58-11e6-9853-1ffbb4986962.gif" width="150px" /> <img src="https://cloud.githubusercontent.com/assets/5518/22151435/e4c97ea8-df58-11e6-8959-b4c78716271d.gif" width="150px" /> <img src="https://cloud.githubusercontent.com/assets/5518/22151436/e4cc09f2-df58-11e6-965c-673333b33c0d.gif" width="150px" /> <img src="https://cloud.githubusercontent.com/assets/5518/22151434/e4c87788-df58-11e6-9490-c255aaafce71.gif" width="150px" /> <img src="https://cloud.githubusercontent.com/assets/5518/22151445/ee35ff66-df58-11e6-8660-a3673ef3f5ee.gif" width="150px" /> <img src="https://cloud.githubusercontent.com/assets/5518/22151446/ee67b074-df58-11e6-9b95-7d53eec21c33.gif" width="150px" />
12
+ **default style**
12
13
 
13
- [中文介绍和使用说明](https://ruby-china.org/topics/27832)
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
 
@@ -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
- "\x11\x11\x11"
7
- "\x11\x11\x11"
8
- "\x11\x11\x11"
9
- "\x11\x11\x11"
10
- "\x11\x11\x11"
11
- "\x11\x11\x11"
12
- "\x11\x11\x11"
13
- "\x11\x11\x11"
14
- "\x11\x11\x11"
15
- "\x11\x11\x11"
16
- "\x11\x11\x11"
17
- "\x11\x11\x11"
18
- "\x11\x11\x11"
19
- "\x11\x11\x11"
20
- "\x11\x11\x11"
21
- "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
22
-
23
- // Red 500 #F44336
24
- "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
25
- "\xF4\x43\x36"
26
- "\xF4\x43\x36"
27
- "\xF4\x43\x36"
28
- "\xF4\x43\x36"
29
- "\xF4\x43\x36"
30
- "\xF4\x43\x36"
31
- "\xF4\x43\x36"
32
- "\xF4\x43\x36"
33
- "\xF4\x43\x36"
34
- "\xF4\x43\x36"
35
- "\xF4\x43\x36"
36
- "\xF4\x43\x36"
37
- "\xF4\x43\x36"
38
- "\xF4\x43\x36"
39
- "\xF4\x43\x36"
40
- "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
41
-
42
- // Pink 500 #E91E63
43
- "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
44
- "\xE9\x1E\x63"
45
- "\xE9\x1E\x63"
46
- "\xE9\x1E\x63"
47
- "\xE9\x1E\x63"
48
- "\xE9\x1E\x63"
49
- "\xE9\x1E\x63"
50
- "\xE9\x1E\x63"
51
- "\xE9\x1E\x63"
52
- "\xE9\x1E\x63"
53
- "\xE9\x1E\x63"
54
- "\xE9\x1E\x63"
55
- "\xE9\x1E\x63"
56
- "\xE9\x1E\x63"
57
- "\xE9\x1E\x63"
58
- "\xE9\x1E\x63"
59
- "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
60
-
61
- // Purple 500 #9C27B0
62
- "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
63
- "\x9C\x27\xB0"
64
- "\x9C\x27\xB0"
65
- "\x9C\x27\xB0"
66
- "\x9C\x27\xB0"
67
- "\x9C\x27\xB0"
68
- "\x9C\x27\xB0"
69
- "\x9C\x27\xB0"
70
- "\x9C\x27\xB0"
71
- "\x9C\x27\xB0"
72
- "\x9C\x27\xB0"
73
- "\x9C\x27\xB0"
74
- "\x9C\x27\xB0"
75
- "\x9C\x27\xB0"
76
- "\x9C\x27\xB0"
77
- "\x9C\x27\xB0"
78
- "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
79
-
80
- // Deep Purple 500 #673AB7
81
- "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
82
- "\x67\x3A\xB7"
83
- "\x67\x3A\xB7"
84
- "\x67\x3A\xB7"
85
- "\x67\x3A\xB7"
86
- "\x67\x3A\xB7"
87
- "\x67\x3A\xB7"
88
- "\x67\x3A\xB7"
89
- "\x67\x3A\xB7"
90
- "\x67\x3A\xB7"
91
- "\x67\x3A\xB7"
92
- "\x67\x3A\xB7"
93
- "\x67\x3A\xB7"
94
- "\x67\x3A\xB7"
95
- "\x67\x3A\xB7"
96
- "\x67\x3A\xB7"
97
- "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
98
-
99
- // Indigo 500 #3F51B5
100
- "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
101
- "\x3F\x51\xB5"
102
- "\x3F\x51\xB5"
103
- "\x3F\x51\xB5"
104
- "\x3F\x51\xB5"
105
- "\x3F\x51\xB5"
106
- "\x3F\x51\xB5"
107
- "\x3F\x51\xB5"
108
- "\x3F\x51\xB5"
109
- "\x3F\x51\xB5"
110
- "\x3F\x51\xB5"
111
- "\x3F\x51\xB5"
112
- "\x3F\x51\xB5"
113
- "\x3F\x51\xB5"
114
- "\x3F\x51\xB5"
115
- "\x3F\x51\xB5"
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
+ };
@@ -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 100
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]/16;
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="abcdafahijklmnopqrstuvwxyz";
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
- //p=letter(l[0],p,im,swr,s1,s2); p=letter(l[1],p,im,swr,s1,s2); p=letter(l[2],p,im,swr,s1,s2); p=letter(l[3],p,im,swr,s1,s2); //letter(l[4],p,im,swr,s1,s2);
177
+
177
178
  if (i_line == 1) {
178
179
  line(im,swr,s1);
179
180
  }
180
- dots(im); // blur(im); // filter(im);
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, 3);
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);
@@ -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
- self.create(style, length, strikethrough)
46
+ outline = config.outline ? 1 : 0
47
+ self.create(style, length, strikethrough, outline)
46
48
  end
47
49
 
48
50
  def check_cache_store!
@@ -11,5 +11,7 @@ module RuCaptcha
11
11
  attr_accessor :length
12
12
  # strikethrough, default: true
13
13
  attr_accessor :strikethrough
14
+ # outline style for hard mode, default: false
15
+ attr_accessor :outline
14
16
  end
15
17
  end
@@ -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
@@ -1,3 +1,3 @@
1
1
  module RuCaptcha
2
- VERSION = '2.2.0'
2
+ VERSION = '2.3.0'
3
3
  end
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.2.0
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: 2017-12-07 00:00:00.000000000 Z
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.13
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