captcha3 1.1.0 → 1.1.5
Sign up to get free protection for your applications and to get access to all the features.
- metadata +5 -16
- data/.gitignore +0 -4
- data/Gemfile +0 -4
- data/Rakefile +0 -1
- data/captcha3.gemspec +0 -24
- data/lib/captcha3.rb +0 -14
- data/lib/captcha3/captcha_helper.rb +0 -19
- data/lib/captcha3/captcha_util.rb +0 -20
- data/lib/captcha3/image_generator.rb +0 -57
- data/lib/captcha3/railtie.rb +0 -8
- data/lib/captcha3/tasks.rb +0 -23
- data/lib/captcha3/validate_captcha.rb +0 -18
- data/lib/captcha3/version.rb +0 -3
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: captcha3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 1.1.
|
9
|
+
- 5
|
10
|
+
version: 1.1.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- victordong
|
@@ -40,19 +40,8 @@ extensions: []
|
|
40
40
|
|
41
41
|
extra_rdoc_files: []
|
42
42
|
|
43
|
-
files:
|
44
|
-
|
45
|
-
- Gemfile
|
46
|
-
- Rakefile
|
47
|
-
- captcha3.gemspec
|
48
|
-
- lib/captcha3.rb
|
49
|
-
- lib/captcha3/captcha_helper.rb
|
50
|
-
- lib/captcha3/captcha_util.rb
|
51
|
-
- lib/captcha3/image_generator.rb
|
52
|
-
- lib/captcha3/railtie.rb
|
53
|
-
- lib/captcha3/tasks.rb
|
54
|
-
- lib/captcha3/validate_captcha.rb
|
55
|
-
- lib/captcha3/version.rb
|
43
|
+
files: []
|
44
|
+
|
56
45
|
homepage: ""
|
57
46
|
licenses: []
|
58
47
|
|
data/.gitignore
DELETED
data/Gemfile
DELETED
data/Rakefile
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
data/captcha3.gemspec
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "captcha3/version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |s|
|
6
|
-
s.name = "captcha3"
|
7
|
-
s.version = Captcha3::VERSION
|
8
|
-
s.authors = ["victordong"]
|
9
|
-
s.email = ["dongshuxiang888@126.com"]
|
10
|
-
s.homepage = ""
|
11
|
-
s.summary = %q{批量生成图片}
|
12
|
-
s.description = %q{dongsx}
|
13
|
-
|
14
|
-
s.rubyforge_project = "captcha3"
|
15
|
-
|
16
|
-
s.files = `git ls-files`.split("\n")
|
17
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
-
s.require_paths = ["lib"]
|
20
|
-
|
21
|
-
# specify any dependencies here; for example:
|
22
|
-
# s.add_development_dependency "rspec"
|
23
|
-
s.add_runtime_dependency "rmagick"
|
24
|
-
end
|
data/lib/captcha3.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require "captcha3/version"
|
2
|
-
require "captcha3/validate_captcha"
|
3
|
-
require "captcha3/captcha_helper"
|
4
|
-
require "captcha3/image_generator"
|
5
|
-
module Captcha3
|
6
|
-
require 'captcha3/railtie' if defined?(Rails)
|
7
|
-
ActionController::Base.send(:include, ValidateCaptcha)
|
8
|
-
if defined?(Rails)
|
9
|
-
environment = File.open("#{Rails.root}/config/environment.rb", "a")
|
10
|
-
salt = SecureRandom.base64(32).tr("+/=", "xyz")
|
11
|
-
environment.puts("CAPTCHA_SALT = #{salt}")
|
12
|
-
environment.close
|
13
|
-
end
|
14
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module CaptchaHelper
|
2
|
-
def captcha_image(options = {})
|
3
|
-
@captcha_image ||= CaptchaUtil.random_image
|
4
|
-
image_tag("/system/captcha3/" + @captcha_image, options)
|
5
|
-
end
|
6
|
-
|
7
|
-
def captcha_input_text(label, options = {})
|
8
|
-
content_tag('label', label, :for => 'captcha') + text_field_tag(:captcha, nil, options)
|
9
|
-
end
|
10
|
-
|
11
|
-
def captcha_hidden_text
|
12
|
-
@captcha_image ||= CaptchaUtil.random_image
|
13
|
-
hidden_field_tag(:captcha_validation, @captcha_image.gsub(/\..+$/, ''))
|
14
|
-
end
|
15
|
-
|
16
|
-
def captcha_block(label='请输入验证码')
|
17
|
-
content_tag("div", captcha_hidden_text + captcha_input_text(label) + captcha_image, {:class => 'captcha'})
|
18
|
-
end
|
19
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'digest/sha1'
|
2
|
-
module CaptchaUtil
|
3
|
-
extend self
|
4
|
-
|
5
|
-
def random_image
|
6
|
-
@@captcha_files = Dir.glob("#{Rails.root}/public/system/captcha3/*.*").map{ |f| File.basename(f)}
|
7
|
-
@@captcha_files[rand(@@captcha_files.size)]
|
8
|
-
end
|
9
|
-
|
10
|
-
def encrypt_string(str)
|
11
|
-
|
12
|
-
if defined?(CAPTCHA_SALT)
|
13
|
-
salt = CAPTCHA_SALT
|
14
|
-
else
|
15
|
-
Rails.logger.warn("No Salt has given, Please add CAPACHA_SALT = 'something realy random' to environment.rb or application.rb")
|
16
|
-
end
|
17
|
-
|
18
|
-
Digest::SHA256.hexdigest("#{salt}#{str}")
|
19
|
-
end
|
20
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
require 'RMagick'
|
2
|
-
require 'captcha3/captcha_util'
|
3
|
-
module ImageGenerator
|
4
|
-
extend self
|
5
|
-
BITS = ("A".."Z").to_a + (0..9).to_a
|
6
|
-
BIT_LENGTH = BITS.length
|
7
|
-
DEFAULT_PARAS = {
|
8
|
-
:image_width => 150,
|
9
|
-
:image_height => 50,
|
10
|
-
:captcha_length => 5,
|
11
|
-
:file_type => 'png'
|
12
|
-
}
|
13
|
-
|
14
|
-
def generate_captcha_image(params = {})
|
15
|
-
params.reverse_merge!(DEFAULT_PARAS)
|
16
|
-
file_type = %w(png gif).include?(params[:file_type]) ? ".#{params[:file_type]}" : ".png"
|
17
|
-
|
18
|
-
text_img = Magick::Image.new(params[:image_width].to_i, params[:image_height].to_i)
|
19
|
-
black_img = Magick::Image.new(params[:image_width].to_i, params[:image_height].to_i) do
|
20
|
-
self.background_color = 'black'
|
21
|
-
end
|
22
|
-
|
23
|
-
random_string = params[:captcha_length].times.map{ BITS[rand(BIT_LENGTH)]}.join
|
24
|
-
|
25
|
-
filename = CaptchaUtil.encrypt_string(random_string.downcase) + file_type
|
26
|
-
|
27
|
-
# Render the text in the image
|
28
|
-
text_img.annotate(Magick::Draw.new, 0,0,0,0, random_string) {
|
29
|
-
self.gravity = Magick::WestGravity
|
30
|
-
self.font_family = 'Courier-New'
|
31
|
-
self.font_weight = Magick::BoldWeight
|
32
|
-
self.fill = '#000000'
|
33
|
-
self.stroke = 'black'
|
34
|
-
self.stroke_width = 1
|
35
|
-
self.pointsize = 44
|
36
|
-
}
|
37
|
-
|
38
|
-
# Apply a little blur and fuzzing
|
39
|
-
text_img = text_img.gaussian_blur(1.2, 1.2)
|
40
|
-
text_img = text_img.sketch(20, 30.0, 30.0)
|
41
|
-
text_img = text_img.wave(3, 90)
|
42
|
-
|
43
|
-
# Now we need to get the white out
|
44
|
-
text_mask = text_img.negate
|
45
|
-
text_mask.matte = false
|
46
|
-
|
47
|
-
# Add cut-out our captcha from the black image with varying tranparency
|
48
|
-
black_img.composite!(text_mask, Magick::CenterGravity, Magick::CopyOpacityCompositeOp)
|
49
|
-
|
50
|
-
# Write the file to disk
|
51
|
-
puts 'Writing image file ' + filename
|
52
|
-
black_img.write(filename) # { self.depth = 8 }
|
53
|
-
|
54
|
-
# Collect rmagick
|
55
|
-
GC.start
|
56
|
-
end
|
57
|
-
end
|
data/lib/captcha3/railtie.rb
DELETED
data/lib/captcha3/tasks.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require "captcha3/image_generator"
|
2
|
-
namespace :captcha3 do
|
3
|
-
desc "generate code images"
|
4
|
-
task :generate => :environment do
|
5
|
-
FileUtils.mkdir_p('public/system/captcha3')
|
6
|
-
Dir.chdir('public/system/captcha3') do
|
7
|
-
image_count = (ENV["count"] || 200).to_i
|
8
|
-
image_params = resolve_params
|
9
|
-
|
10
|
-
image_count.times.each do
|
11
|
-
ImageGenerator.generate_captcha_image(image_params)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def resolve_params
|
17
|
-
params = {}
|
18
|
-
['image_width', 'image_height', 'captcha_length', 'file_type'].each do |origin|
|
19
|
-
params[origin.downcase.to_sym] = ENV[origin] if ENV[origin]
|
20
|
-
end
|
21
|
-
params
|
22
|
-
end
|
23
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module ValidateCaptcha
|
2
|
-
def self.included(base)
|
3
|
-
base.extend(ClassMethods)
|
4
|
-
end
|
5
|
-
|
6
|
-
module ClassMethods
|
7
|
-
def captcha_helper
|
8
|
-
helper CaptchaHelper
|
9
|
-
include ValidateCaptcha::InstanceMethods
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
module InstanceMethods
|
14
|
-
def captcha_validated?
|
15
|
-
CaptchaUtil.encrypt_string(params[:captcha].to_s.downcase) == params[:captcha_validation]
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
data/lib/captcha3/version.rb
DELETED