easy_captcha_rails 0.6.6.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2b4c250c05bf457fa0af1e4ff8990def2c1cb4af909db64a64c8dfd3c0dee30f
4
+ data.tar.gz: 3be88f8158042815abb41b9e9374ec35f83685aab9a979ba8775d3c9f7d1e876
5
+ SHA512:
6
+ metadata.gz: bb7a71989173f327ac81433f19224d357850a225eb8ee1e7928b533b1a3cc83496b7238f227ba49c3997f85fa7d9b10f15936b8534be9929405b9ef211ab7ded
7
+ data.tar.gz: e1405291bb13511a00ee020b3a8786672da84fd8844b86375f6adbfc8f284e693ba709f44a6ba3bfcfd6b4f77444efc11979f27275d8f6183a383ffc227e6da2
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ *.gem
2
+
data/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Huitao Chen
4
+ Copyright (c) 2010 Marco Scholl
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ "Software"), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # Captcha-Plugin for Rails 5+
2
+
3
+ PLEASE DO NOT USE THIS GEM.
4
+
5
+ USE MODERN IMAGE LIBS OF RAILS.
6
+
7
+ This project is based on <https://github.com/phatworx/easy_captcha>.
8
+
9
+ This gem is for an ancient project.
10
+
11
+ ## Installation
12
+
13
+ add to Gemfile
14
+ ```
15
+ gem 'easy_captcha_rails', require: 'easy_captcha'
16
+ ```
17
+
18
+ ## Patch original gem without install this
19
+
20
+ use the "easy_captcha-0.6.5.patch" file to patch the original gem.
21
+
22
+ ## License
23
+
24
+ This project is released under the [MIT license](LICENSE).
@@ -0,0 +1,24 @@
1
+ diff -Naur easy_captcha-0.6.5.orig/lib/easy_captcha/captcha_controller.rb easy_captcha-0.6.5/lib/easy_captcha/captcha_controller.rb
2
+ --- easy_captcha-0.6.5.orig/lib/easy_captcha/captcha_controller.rb 2021-10-28 13:31:54.126630362 +0800
3
+ +++ easy_captcha-0.6.5/lib/easy_captcha/captcha_controller.rb 2021-10-28 13:29:57.245066835 +0800
4
+ @@ -1,7 +1,7 @@
5
+ module EasyCaptcha
6
+ # captcha controller
7
+ class CaptchaController < ActionController::Base
8
+ - before_filter :overwrite_cache_control
9
+ + before_action :overwrite_cache_control
10
+ # captcha action send the generated image to browser
11
+ def captcha
12
+ if params[:format] == "wav" and EasyCaptcha.espeak?
13
+ diff -Naur easy_captcha-0.6.5.orig/lib/easy_captcha/generator/default.rb easy_captcha-0.6.5/lib/easy_captcha/generator/default.rb
14
+ --- easy_captcha-0.6.5.orig/lib/easy_captcha/generator/default.rb 2021-10-28 13:31:54.130630415 +0800
15
+ +++ easy_captcha-0.6.5/lib/easy_captcha/generator/default.rb 2021-10-28 11:17:44.000000000 +0800
16
+ @@ -61,7 +61,7 @@
17
+ require 'rmagick' unless defined?(Magick)
18
+
19
+ config = self
20
+ - canvas = Magick::Image.new(EasyCaptcha.image_width, EasyCaptcha.image_height) do |variable|
21
+ + canvas = Magick::Image.new(EasyCaptcha.image_width, EasyCaptcha.image_height) do
22
+ self.background_color = config.image_background_color unless config.image_background_color.nil?
23
+ self.background_color = 'none' if config.background_image.present?
24
+ end
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "easy_captcha/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "easy_captcha_rails"
7
+ s.version = EasyCaptcha::VERSION
8
+
9
+ s.required_ruby_version = ">= 2.2.2"
10
+ s.required_rubygems_version = ">= 1.8.11"
11
+ s.authors = ["Huitao Chen", "Marco Scholl", "Alexander Dreher"]
12
+ s.date = "2021-10-28"
13
+ s.description = "Captcha-Plugin for Rails"
14
+ s.email = "h980501427@163.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.md"
18
+ ]
19
+ s.files = `git ls-files`.split("\n")
20
+
21
+ s.homepage = "https://github.com/chenhuitao/easy_captcha_rails"
22
+ s.licenses = ["MIT"]
23
+ s.summary = "Captcha-Plugin for Rails 5+"
24
+
25
+ s.require_paths = ["lib"]
26
+
27
+ s.add_dependency("rails", [">= 5.0.0"])
28
+
29
+ if defined?(PLATFORM) && PLATFORM == "java"
30
+ s.add_runtime_dependency("rmagick4j", ">= 0.3.7")
31
+ else
32
+ s.add_runtime_dependency("rmagick", ">= 2.13.1")
33
+ end
34
+ end
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'easy_captcha'
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+ module EasyCaptcha
3
+ # captcha generation class
4
+ class Captcha
5
+ # code for captcha generation
6
+ attr_reader :code
7
+ # blob of generated captcha image
8
+ attr_reader :image
9
+
10
+ # generate captcha by code
11
+ def initialize code
12
+ @code = code
13
+ generate_captcha
14
+ end
15
+
16
+ def inspect #:nodoc:
17
+ "<EasyCaptcha::Captcha @code=#{code}>"
18
+ end
19
+
20
+ private
21
+
22
+ def generate_captcha #:nodoc:
23
+ @image = EasyCaptcha.generator.generate(@code)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,22 @@
1
+ module EasyCaptcha
2
+ # captcha controller
3
+ class CaptchaController < ActionController::Base
4
+ before_action :overwrite_cache_control
5
+ # captcha action send the generated image to browser
6
+ def captcha
7
+ if params[:format] == "wav" and EasyCaptcha.espeak?
8
+ send_data generate_speech_captcha, :disposition => 'inline', :type => 'audio/wav'
9
+ else
10
+ send_data generate_captcha, :disposition => 'inline', :type => 'image/png'
11
+ end
12
+ end
13
+
14
+ private
15
+ # Overwrite cache control for Samsung Galaxy S3 (remove no-store)
16
+ def overwrite_cache_control
17
+ response.headers["Cache-Control"] = "no-cache, max-age=0, must-revalidate"
18
+ response.headers["Pragma"] = "no-cache"
19
+ response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,93 @@
1
+ module EasyCaptcha
2
+ # helper class for ActionController
3
+ module ControllerHelpers
4
+
5
+ def self.included(base) #:nodoc:
6
+ base.class_eval do
7
+ helper_method :valid_captcha?, :captcha_valid?
8
+ end
9
+ end
10
+
11
+ # generate captcha image and return it as blob
12
+ def generate_captcha
13
+ if EasyCaptcha.cache
14
+ # create cache dir
15
+ FileUtils.mkdir_p(EasyCaptcha.cache_temp_dir)
16
+
17
+ # select all generated captchas from cache
18
+ files = Dir.glob(EasyCaptcha.cache_temp_dir + "*.png")
19
+
20
+ unless files.size < EasyCaptcha.cache_size
21
+ file = File.open(files.at(Kernel.rand(files.size)))
22
+ session[:captcha] = File.basename(file.path, '.*')
23
+
24
+ if file.mtime < EasyCaptcha.cache_expire.ago
25
+ File.unlink(file.path)
26
+ # remove speech version
27
+ File.unlink(file.path.gsub(/png\z/, "wav")) if File.exists?(file.path.gsub(/png\z/, "wav"))
28
+ else
29
+ return file.readlines.join
30
+ end
31
+ end
32
+ generated_code = generate_captcha_code
33
+ image = Captcha.new(generated_code).image
34
+
35
+ # write captcha for caching
36
+ File.open(captcha_cache_path(generated_code), 'w') { |f| f.write image }
37
+
38
+ # write speech file if u create a new captcha image
39
+ EasyCaptcha.espeak.generate(generated_code, speech_captcha_cache_path(generated_code)) if EasyCaptcha.espeak?
40
+
41
+ # return image
42
+ image
43
+ else
44
+ Captcha.new(generate_captcha_code).image
45
+ end
46
+ end
47
+
48
+ # generate speech by captcha from session
49
+ def generate_speech_captcha
50
+ raise RuntimeError, "espeak disabled" unless EasyCaptcha.espeak?
51
+ if EasyCaptcha.cache
52
+ File.read(speech_captcha_cache_path(current_captcha_code))
53
+ else
54
+ wav_file = Tempfile.new("#{current_captcha_code}.wav")
55
+ EasyCaptcha.espeak.generate(current_captcha_code, wav_file.path)
56
+ File.read(wav_file.path)
57
+ end
58
+ end
59
+
60
+ # return cache path of captcha image
61
+ def captcha_cache_path(code)
62
+ "#{EasyCaptcha.cache_temp_dir}/#{code}.png"
63
+ end
64
+
65
+ # return cache path of speech captcha
66
+ def speech_captcha_cache_path(code)
67
+ "#{EasyCaptcha.cache_temp_dir}/#{code}.wav"
68
+ end
69
+
70
+ # current active captcha from session
71
+ def current_captcha_code
72
+ session[:captcha]
73
+ end
74
+
75
+ # generate captcha code, save in session and return
76
+ def generate_captcha_code
77
+ session[:captcha] = EasyCaptcha.length.times.collect { EasyCaptcha.chars[rand(EasyCaptcha.chars.size)] }.join
78
+ end
79
+
80
+ # validate given captcha code and re
81
+ def captcha_valid?(code)
82
+ return false if session[:captcha].blank? or code.blank?
83
+ session[:captcha].to_s.upcase == code.to_s.upcase
84
+ end
85
+ alias_method :valid_captcha?, :captcha_valid?
86
+
87
+ # reset the captcha code in session for security after each request
88
+ def reset_last_captcha_code!
89
+ session.delete(:captcha)
90
+ end
91
+
92
+ end
93
+ end
@@ -0,0 +1,79 @@
1
+ module EasyCaptcha
2
+ # espeak wrapper
3
+ class Espeak
4
+
5
+ # generator for captcha images
6
+ def initialize(&block)
7
+ defaults
8
+ yield self if block_given?
9
+ end
10
+
11
+ # set default values
12
+ def defaults
13
+ @amplitude = 80..120
14
+ @pitch = 30..70
15
+ @gap = 80
16
+ @voice = nil
17
+ end
18
+
19
+ attr_writer :amplitude, :pitch, :gap, :voice
20
+
21
+ # return amplitude
22
+ def amplitude
23
+ if @amplitude.is_a? Range
24
+ @amplitude.to_a.sort_by { rand }.first
25
+ else
26
+ @amplitude.to_i
27
+ end
28
+ end
29
+
30
+ # return amplitude
31
+ def pitch
32
+ if @pitch.is_a? Range
33
+ @pitch.to_a.sort_by { rand }.first
34
+ else
35
+ @pitch.to_i
36
+ end
37
+ end
38
+
39
+ def gap
40
+ @gap.to_i
41
+ end
42
+
43
+ def voice
44
+ if @voice.is_a? Array
45
+ v = @voice.sort_by { rand }.first
46
+ else
47
+ v = @voice
48
+ end
49
+
50
+ v.try :gsub, /[^A-Za-z0-9\-\+]/, ""
51
+ end
52
+
53
+ # generate wav file by captcha
54
+ def generate(captcha, wav_file)
55
+ # get code
56
+ if captcha.is_a? Captcha
57
+ code = captcha.code
58
+ elsif captcha.is_a? String
59
+ code = captcha
60
+ else
61
+ raise ArgumentError, "invalid captcha"
62
+ end
63
+
64
+ # add spaces
65
+ code = code.each_char.to_a.join(" ")
66
+
67
+ cmd = "espeak -g 10"
68
+ cmd << " -a #{amplitude}" unless @amplitude.nil?
69
+ cmd << " -p #{pitch}" unless @pitch.nil?
70
+ cmd << " -g #{gap}" unless @gap.nil?
71
+ cmd << " -v '#{voice}'" unless @voice.nil?
72
+ cmd << " -w #{wav_file} '#{code}'"
73
+
74
+ %x{#{cmd}}
75
+ true
76
+ end
77
+
78
+ end
79
+ end
@@ -0,0 +1,19 @@
1
+ module EasyCaptcha
2
+ module Generator
3
+
4
+ # base class for generators
5
+ class Base
6
+
7
+ # generator for captcha images
8
+ def initialize(&block)
9
+ defaults
10
+ yield self if block_given?
11
+ end
12
+
13
+ # default values for generator
14
+ def defaults
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,119 @@
1
+ # encoding: utf-8
2
+
3
+ module EasyCaptcha
4
+ module Generator
5
+
6
+ # default generator
7
+ class Default < Base
8
+
9
+ # set default values
10
+ def defaults
11
+ @font_size = 24
12
+ @font_fill_color = '#333333'
13
+ @font = File.expand_path('../../../../resources/captcha.ttf', __FILE__)
14
+ @font_stroke = '#000000'
15
+ @font_stroke_color = 0
16
+ @image_background_color = '#FFFFFF'
17
+ @sketch = true
18
+ @sketch_radius = 3
19
+ @sketch_sigma = 1
20
+ @wave = true
21
+ @wave_length = (60..100)
22
+ @wave_amplitude = (3..5)
23
+ @implode = 0.05
24
+ @blur = true
25
+ @blur_radius = 1
26
+ @blur_sigma = 2
27
+ end
28
+
29
+ # Font
30
+ attr_accessor :font_size, :font_fill_color, :font, :font_family, :font_stroke, :font_stroke_color
31
+
32
+ # Background
33
+ attr_accessor :image_background_color, :background_image
34
+
35
+ # Sketch
36
+ attr_accessor :sketch, :sketch_radius, :sketch_sigma
37
+
38
+ # Wave
39
+ attr_accessor :wave, :wave_length, :wave_amplitude
40
+
41
+ # Implode
42
+ attr_accessor :implode
43
+
44
+ # Gaussian Blur
45
+ attr_accessor :blur, :blur_radius, :blur_sigma
46
+
47
+ def sketch? #:nodoc:
48
+ @sketch
49
+ end
50
+
51
+ def wave? #:nodoc:
52
+ @wave
53
+ end
54
+
55
+ def blur? #:nodoc:
56
+ @blur
57
+ end
58
+
59
+ # generate image
60
+ def generate(code)
61
+ require 'rmagick' unless defined?(Magick)
62
+
63
+ config = self
64
+ canvas = Magick::Image.new(EasyCaptcha.image_width, EasyCaptcha.image_height) do
65
+ self.background_color = config.image_background_color unless config.image_background_color.nil?
66
+ self.background_color = 'none' if config.background_image.present?
67
+ end
68
+
69
+ # Render the text in the image
70
+ canvas.annotate(Magick::Draw.new, 0, 0, 0, 0, code) {
71
+ self.gravity = Magick::CenterGravity
72
+ self.font = config.font
73
+ self.font_weight = Magick::LighterWeight
74
+ self.fill = config.font_fill_color
75
+ if config.font_stroke.to_i > 0
76
+ self.stroke = config.font_stroke_color
77
+ self.stroke_width = config.font_stroke
78
+ end
79
+ self.pointsize = config.font_size
80
+ }
81
+
82
+ # Blur
83
+ canvas = canvas.blur_image(config.blur_radius, config.blur_sigma) if config.blur?
84
+
85
+ # Wave
86
+ w = config.wave_length
87
+ a = config.wave_amplitude
88
+ canvas = canvas.wave(rand(a.last - a.first) + a.first, rand(w.last - w.first) + w.first) if config.wave?
89
+
90
+ # Sketch
91
+ canvas = canvas.sketch(config.sketch_radius, config.sketch_sigma, rand(180)) if config.sketch?
92
+
93
+ # Implode
94
+ canvas = canvas.implode(config.implode.to_f) if config.implode.is_a? Float
95
+
96
+ # Crop image because to big after waveing
97
+ canvas = canvas.crop(Magick::CenterGravity, EasyCaptcha.image_width, EasyCaptcha.image_height)
98
+
99
+
100
+ # Combine images if background image is present
101
+ if config.background_image.present?
102
+ background = Magick::Image.read(config.background_image).first
103
+ background.composite!(canvas, Magick::CenterGravity, Magick::OverCompositeOp)
104
+
105
+ image = background.to_blob { self.format = 'PNG' }
106
+ else
107
+ image = canvas.to_blob { self.format = 'PNG' }
108
+ end
109
+
110
+ # ruby-1.9
111
+ image = image.force_encoding 'UTF-8' if image.respond_to? :force_encoding
112
+
113
+ canvas.destroy!
114
+ image
115
+ end
116
+
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,8 @@
1
+ module EasyCaptcha
2
+ # module for generators
3
+ module Generator
4
+ autoload :Base, 'easy_captcha/generator/base'
5
+ autoload :Default, 'easy_captcha/generator/default'
6
+
7
+ end
8
+ end
@@ -0,0 +1,29 @@
1
+ module EasyCaptcha
2
+ module ModelHelpers #:nodoc:
3
+ # helper class for ActiveRecord
4
+ def self.included(base) #:nodoc:
5
+ base.extend ClassMethods
6
+ end
7
+
8
+ module ClassMethods #:nodoc:
9
+ # to activate model captcha validation
10
+ def acts_as_easy_captcha
11
+ include InstanceMethods
12
+ attr_writer :captcha, :captcha_verification
13
+ end
14
+ end
15
+
16
+ module InstanceMethods #:nodoc:
17
+
18
+ def captcha #:nodoc:
19
+ ""
20
+ end
21
+
22
+ # validate captcha
23
+ def captcha_valid?
24
+ errors.add(:captcha, :invalid) if @captcha.blank? or @captcha_verification.blank? or @captcha.to_s.upcase != @captcha_verification.to_s.upcase
25
+ end
26
+ alias_method :valid_captcha?, :captcha_valid?
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,10 @@
1
+ module ActionDispatch #:nodoc:
2
+ module Routing #:nodoc:
3
+ class Mapper #:nodoc:
4
+ # call to add default captcha root
5
+ def captcha_route
6
+ match 'captcha' => 'easy_captcha/captcha#captcha', :via => :get
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module EasyCaptcha
2
+ VERSION = '0.6.6.1'
3
+ end
@@ -0,0 +1,11 @@
1
+ module EasyCaptcha
2
+ # helper class for ActionView
3
+ module ViewHelpers
4
+ # generate an image_tag for captcha image
5
+ def captcha_tag(*args)
6
+ options = { :alt => 'captcha', :width => EasyCaptcha.image_width, :height => EasyCaptcha.image_height }
7
+ options.merge! args.extract_options!
8
+ image_tag(captcha_url(:i => Time.now.to_i), options)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,131 @@
1
+ require 'rails'
2
+ require 'action_controller'
3
+ require 'active_record'
4
+ require 'active_support'
5
+
6
+ # Captcha-Plugin for Rails
7
+ module EasyCaptcha
8
+ autoload :Espeak, 'easy_captcha/espeak'
9
+ autoload :Captcha, 'easy_captcha/captcha'
10
+ autoload :CaptchaController, 'easy_captcha/captcha_controller'
11
+ autoload :ModelHelpers, 'easy_captcha/model_helpers'
12
+ autoload :ViewHelpers, 'easy_captcha/view_helpers'
13
+ autoload :ControllerHelpers, 'easy_captcha/controller_helpers'
14
+ autoload :Generator, 'easy_captcha/generator'
15
+
16
+ # Cache
17
+ mattr_accessor :cache
18
+ @@cache = false
19
+
20
+ # Cache temp
21
+ mattr_accessor :cache_temp_dir
22
+ @@cache_temp_dir = nil
23
+
24
+ # Cache size
25
+ mattr_accessor :cache_size
26
+ @@cache_size = 500
27
+
28
+ # Cache expire
29
+ mattr_accessor :cache_expire
30
+ @@cache_expire = nil
31
+
32
+ # Chars
33
+ mattr_accessor :chars
34
+ @@chars = %w(2 3 4 5 6 7 9 A C D E F G H J K L M N P Q R S T U X Y Z)
35
+
36
+ # Length
37
+ mattr_accessor :length
38
+ @@length = 6
39
+
40
+ # Length
41
+ mattr_accessor :image_width, :image_height
42
+ @@image_width = 140
43
+ @@image_height = 40
44
+
45
+ class << self
46
+ # to configure easy_captcha
47
+ # for a sample look the readme.rdoc file
48
+ def setup
49
+ yield self
50
+ end
51
+
52
+ def cache? #:nodoc:
53
+ cache
54
+ end
55
+
56
+ # select generator and configure this
57
+ def generator(generator = nil, &block)
58
+ if generator.nil?
59
+ @generator
60
+ else
61
+ generator = generator.to_s if generator.is_a? Symbol
62
+
63
+ if generator.is_a? String
64
+ generator.gsub!(/^[a-z]|\s+[a-z]/) { |a| a.upcase }
65
+ generator = "EasyCaptcha::Generator::#{generator}".constantize
66
+ end
67
+
68
+ @generator = generator.new &block
69
+ end
70
+ end
71
+
72
+ def espeak=(state)
73
+ if state === true
74
+ @espeak = Espeak.new
75
+ else
76
+ @espeak = false
77
+ end
78
+ end
79
+
80
+ def espeak(&block)
81
+ if block_given?
82
+ @espeak = Espeak.new &block
83
+ else
84
+ @espeak ||= false
85
+ end
86
+ end
87
+
88
+ def espeak?
89
+ not espeak === false
90
+ end
91
+
92
+ # depracated
93
+ def method_missing name, *args
94
+ name = name.to_s # fix for jruby
95
+ depracations = [
96
+ :font_size, :font_fill_color, :font_family, :font_stroke, :font_stroke_color,
97
+ :image_background_color, :sketch, :sketch_radius, :sketch_sigma, :wave,
98
+ :wave_length, :wave_amplitude, :implode, :blur, :blur_radius, :blur_sigma
99
+ ]
100
+
101
+ if depracations.include? name[0..-2].to_sym or depracations.include? name.to_sym
102
+ ActiveSupport::Deprecation.warn "EasyCaptcha.#{name} is deprecated."
103
+ if name[-1,1] == '='
104
+ self.generator.send(name, args.first)
105
+ else
106
+ self.generator.send(name)
107
+ end
108
+ else
109
+ super
110
+ end
111
+ end
112
+
113
+
114
+ # called by rails after initialize
115
+ def init
116
+ require 'easy_captcha/routes'
117
+ ActiveRecord::Base.send :include, ModelHelpers
118
+ ActionController::Base.send :include, ControllerHelpers
119
+ ActionView::Base.send :include, ViewHelpers
120
+
121
+ # set default generator
122
+ generator :default
123
+
124
+ end
125
+ end
126
+ end
127
+
128
+ EasyCaptcha.init
129
+
130
+
131
+
@@ -0,0 +1,23 @@
1
+ module EasyCaptcha
2
+ module Generators #:nodoc:
3
+ class InstallGenerator < Rails::Generators::Base #:nodoc:
4
+ source_root File.expand_path("../../templates", __FILE__)
5
+
6
+ desc "Install easy_captcha"
7
+
8
+ def copy_initializer #:nodoc:
9
+ template "easy_captcha.rb", "config/initializers/easy_captcha.rb"
10
+ end
11
+
12
+ def add_devise_routes #:nodoc:
13
+ route 'captcha_route'
14
+ end
15
+
16
+ def add_after_filter #:nodoc:
17
+ inject_into_class "app/controllers/application_controller.rb", ApplicationController do
18
+ " # reset captcha code after each request for security\n after_filter :reset_last_captcha_code!\n\n"
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,66 @@
1
+ EasyCaptcha.setup do |config|
2
+ # Cache
3
+ # config.cache = true
4
+ # Cache temp dir from Rails.root
5
+ # config.cache_temp_dir = Rails.root + 'tmp' + 'captchas'
6
+ # Cache size
7
+ # config.cache_size = 500
8
+ # Cache expire
9
+ # config.cache_expire = 1.days
10
+
11
+ # Chars
12
+ # config.chars = %w(2 3 4 5 6 7 9 A C D E F G H J K L M N P Q R S T U X Y Z)
13
+
14
+ # Length
15
+ # config.length = 6
16
+
17
+ # Image
18
+ # config.image_height = 40
19
+ # config.image_width = 140
20
+
21
+ # eSpeak
22
+ # config.espeak do |espeak|
23
+ # Amplitude, 0 to 200
24
+ # espeak.amplitude = 80..120
25
+
26
+ # Word gap. Pause between words
27
+ # espeak.gap = 80
28
+
29
+ # Pitch adjustment, 0 to 99
30
+ # espeak.pitch = 30..70
31
+
32
+ # Use voice file of this name from espeak-data/voices
33
+ # espeak.voice = nil
34
+ # end
35
+
36
+ # configure generator
37
+ # config.generator :default do |generator|
38
+
39
+ # Font
40
+ # generator.font_size = 24
41
+ # generator.font_fill_color = '#333333'
42
+ # generator.font_stroke_color = '#000000'
43
+ # generator.font_stroke = 0
44
+ # generator.font_family = File.expand_path('../../resources/afont.ttf', __FILE__)
45
+
46
+ # generator.image_background_color = "#FFFFFF"
47
+
48
+ # Wave
49
+ # generator.wave = true
50
+ # generator.wave_length = (60..100)
51
+ # generator.wave_amplitude = (3..5)
52
+
53
+ # Sketch
54
+ # generator.sketch = true
55
+ # generator.sketch_radius = 3
56
+ # generator.sketch_sigma = 1
57
+
58
+ # Implode
59
+ # generator.implode = 0.1
60
+
61
+ # Blur
62
+ # generator.blur = true
63
+ # generator.blur_radius = 1
64
+ # generator.blur_sigma = 2
65
+ # end
66
+ end
Binary file
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: easy_captcha_rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.6.1
5
+ platform: ruby
6
+ authors:
7
+ - Huitao Chen
8
+ - Marco Scholl
9
+ - Alexander Dreher
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2021-10-28 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rails
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: 5.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: 5.0.0
29
+ - !ruby/object:Gem::Dependency
30
+ name: rmagick
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 2.13.1
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 2.13.1
43
+ description: Captcha-Plugin for Rails
44
+ email: h980501427@163.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files:
48
+ - LICENSE
49
+ - README.md
50
+ files:
51
+ - ".gitignore"
52
+ - LICENSE
53
+ - README.md
54
+ - easy_captcha-0.6.5.patch
55
+ - easy_captcha_rails.gemspec
56
+ - init.rb
57
+ - lib/easy_captcha.rb
58
+ - lib/easy_captcha/captcha.rb
59
+ - lib/easy_captcha/captcha_controller.rb
60
+ - lib/easy_captcha/controller_helpers.rb
61
+ - lib/easy_captcha/espeak.rb
62
+ - lib/easy_captcha/generator.rb
63
+ - lib/easy_captcha/generator/base.rb
64
+ - lib/easy_captcha/generator/default.rb
65
+ - lib/easy_captcha/model_helpers.rb
66
+ - lib/easy_captcha/routes.rb
67
+ - lib/easy_captcha/version.rb
68
+ - lib/easy_captcha/view_helpers.rb
69
+ - lib/generators/easy_captcha/install_generator.rb
70
+ - lib/generators/templates/easy_captcha.rb
71
+ - resources/captcha.ttf
72
+ homepage: https://github.com/chenhuitao/easy_captcha_rails
73
+ licenses:
74
+ - MIT
75
+ metadata: {}
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 2.2.2
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 1.8.11
90
+ requirements: []
91
+ rubygems_version: 3.1.2
92
+ signing_key:
93
+ specification_version: 4
94
+ summary: Captcha-Plugin for Rails 5+
95
+ test_files: []