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 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