winton-captcha 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/captcha.rb +46 -0
- data/lib/captcha/actions.rb +26 -0
- data/resources/captcha.ttf +0 -0
- metadata +5 -4
data/lib/captcha.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'RMagick'
|
2
|
+
|
3
|
+
Dir[File.expand_path('*/*.rb', File.dirname(__FILE__))].each do |f|
|
4
|
+
require [ File.dirname(f), File.basename(f, '.rb') ].join('/')
|
5
|
+
end
|
6
|
+
|
7
|
+
class Captcha
|
8
|
+
|
9
|
+
include Magick
|
10
|
+
attr_reader :code, :code_image
|
11
|
+
|
12
|
+
JIGGLE = 15
|
13
|
+
WOBBLE = 25
|
14
|
+
|
15
|
+
def initialize(len)
|
16
|
+
chars = ('a'..'z').to_a - ['a','e','i','o','u','l','j']
|
17
|
+
code_array = []
|
18
|
+
1.upto(len) { code_array << chars[rand(chars.length)] }
|
19
|
+
granite = Magick::ImageList.new('granite:')
|
20
|
+
canvas = Magick::ImageList.new
|
21
|
+
canvas.new_image(32*len, 50, Magick::TextureFill.new(granite))
|
22
|
+
text = Magick::Draw.new
|
23
|
+
text.font = File.expand_path('vendor/plugins/captcha/resources/captcha.ttf')
|
24
|
+
text.pointsize = 40
|
25
|
+
cur = 10
|
26
|
+
|
27
|
+
code_array.each { |c|
|
28
|
+
rot = rand(10) > 5 ? rand(WOBBLE) : -rand(WOBBLE)
|
29
|
+
weight = rand(10) > 5 ? NormalWeight : BoldWeight
|
30
|
+
text.annotate(canvas,0,0,cur,30+rand(JIGGLE), c) {
|
31
|
+
self.rotation = rot
|
32
|
+
self.font_weight = weight
|
33
|
+
self.fill = '#98999B'
|
34
|
+
}
|
35
|
+
cur += 30
|
36
|
+
}
|
37
|
+
|
38
|
+
@code = code_array.to_s
|
39
|
+
@code_image = canvas.to_blob {
|
40
|
+
self.format = "JPG"
|
41
|
+
}
|
42
|
+
|
43
|
+
GC.start
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module CaptchaActions
|
2
|
+
|
3
|
+
def self.included(base)
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def acts_as_captcha
|
9
|
+
include CaptchaActions::InstanceMethods
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module InstanceMethods
|
14
|
+
def index
|
15
|
+
new unless session[:captcha]
|
16
|
+
send_file "#{RAILS_ROOT}/public/images/captchas/#{session[:captcha]}.jpg", :type => 'image/jpeg', :disposition => 'inline'
|
17
|
+
end
|
18
|
+
|
19
|
+
def new
|
20
|
+
files = Dir["#{RAILS_ROOT}/public/images/captchas/*.jpg"]
|
21
|
+
session[:captcha] = File.basename(files[rand(files.length)], '.jpg')
|
22
|
+
index
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: winton-captcha
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Winton Welsh
|
@@ -23,10 +23,11 @@ extra_rdoc_files: []
|
|
23
23
|
|
24
24
|
files:
|
25
25
|
- init.rb
|
26
|
-
- lib
|
27
|
-
- lib
|
26
|
+
- lib/captcha.rb
|
27
|
+
- lib/captcha
|
28
|
+
- lib/captcha/actions.rb
|
28
29
|
- README.markdown
|
29
|
-
- resources
|
30
|
+
- resources/captcha.ttf
|
30
31
|
has_rdoc: false
|
31
32
|
homepage: http://github.com/winton/captcha
|
32
33
|
post_install_message:
|