revent 0.3.1 → 0.4
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.
@@ -295,14 +295,13 @@ module RubyAMF
|
|
295
295
|
else
|
296
296
|
length = type >> 1
|
297
297
|
begin # first assume its gzipped and rescue an exception if its not
|
298
|
-
|
299
|
-
arr = inflated_stream.unpack('c'*inflated_stream.length)
|
298
|
+
bytes = Zlib::Inflate.inflate(self.stream[self.stream_position, length])
|
300
299
|
rescue Exception => e
|
301
|
-
|
302
|
-
end
|
300
|
+
bytes = self.stream[self.stream_position, length]
|
301
|
+
end
|
303
302
|
self.stream_position += length
|
304
|
-
@stored_objects <<
|
305
|
-
|
303
|
+
@stored_objects << bytes
|
304
|
+
bytes
|
306
305
|
end
|
307
306
|
end
|
308
307
|
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'crypt/blowfish'
|
3
|
+
require 'RMagick'
|
4
|
+
|
5
|
+
module Revent
|
6
|
+
class Captcha
|
7
|
+
include Magick
|
8
|
+
|
9
|
+
JIGGLE = 15
|
10
|
+
WOBBLE = 20
|
11
|
+
|
12
|
+
def initialize(key, code_length, valid_period_in_sec)
|
13
|
+
@b = Crypt::Blowfish.new(key)
|
14
|
+
@code_length = code_length
|
15
|
+
@valid_period_in_sec = valid_period_in_sec
|
16
|
+
end
|
17
|
+
|
18
|
+
# Returns [encrypted_code_with_timestamp, img].
|
19
|
+
def new
|
20
|
+
code, img = private_new
|
21
|
+
code_with_timestamp = code + Time.now.to_i.to_s
|
22
|
+
encrypted_code_with_timestamp = @b.encrypt_string(code_with_timestamp)
|
23
|
+
[encrypted_code_with_timestamp, img]
|
24
|
+
end
|
25
|
+
|
26
|
+
# Returns true if the code matches and within the valid period.
|
27
|
+
def correct?(code, encrypted_code_with_timestamp)
|
28
|
+
code_with_timestamp = @b.decrypt_string(encrypted_code_with_timestamp)
|
29
|
+
code0 = code_with_timestamp.slice!(0, @code_length)
|
30
|
+
timestamp0 = code_with_timestamp.to_i
|
31
|
+
code == code0 and Time.now.to_i - timestamp0 < @valid_period_in_sec
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
# Returns [code (a string of A-Z), img]
|
37
|
+
VOCA = ('A'..'Z').to_a.freeze
|
38
|
+
def private_new
|
39
|
+
code_array = []
|
40
|
+
voca_length = VOCA.length
|
41
|
+
1.upto(@code_length) { code_array << VOCA[rand(voca_length)] }
|
42
|
+
granite = Magick::ImageList.new('granite:')
|
43
|
+
canvas = Magick::ImageList.new
|
44
|
+
canvas.new_image(33*@code_length, 40, Magick::TextureFill.new(granite))
|
45
|
+
text = Magick::Draw.new
|
46
|
+
#text.font_family = 'times'
|
47
|
+
text.pointsize = 40
|
48
|
+
cur = 10
|
49
|
+
|
50
|
+
code_array.each do |c|
|
51
|
+
rot = (rand(10) > 5)? rand(WOBBLE): -rand(WOBBLE)
|
52
|
+
text.annotate(canvas, 0, 0, cur, 25 + rand(JIGGLE), c) do
|
53
|
+
self.rotation = rot
|
54
|
+
self.fill = 'darkred'
|
55
|
+
end
|
56
|
+
cur += 30
|
57
|
+
end
|
58
|
+
code = code_array.to_s
|
59
|
+
img = canvas.to_blob { self.format = 'JPG'; self.quality = 60 }
|
60
|
+
[code, img]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: revent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: "0.4"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ngoc DAO Thanh
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-02-
|
12
|
+
date: 2008-02-23 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -37,6 +37,7 @@ files:
|
|
37
37
|
- lib/revent/as_r.rb
|
38
38
|
- lib/revent/Client.as
|
39
39
|
- lib/revent/synchronize.rb
|
40
|
+
- lib/revent/captcha.rb
|
40
41
|
- lib/revent/amf3
|
41
42
|
- lib/revent/amf3/app
|
42
43
|
- lib/revent/amf3/app/fault_object.rb
|