dalli_captcha 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -20
- data/README.md +129 -127
- data/Rakefile +40 -40
- data/app/assets/javascripts/dalli_captcha/application.js +15 -15
- data/app/assets/stylesheets/dalli_captcha/application.css +13 -13
- data/app/controllers/dalli_captcha/application_controller.rb +4 -4
- data/app/controllers/dalli_captcha/captcha_controller.rb +13 -13
- data/app/helpers/dalli_captcha/application_helper.rb +4 -4
- data/app/views/layouts/dalli_captcha/application.html.erb +14 -14
- data/config/routes.rb +3 -3
- data/lib/dalli_captcha.rb +120 -120
- data/lib/dalli_captcha/controller.rb +14 -14
- data/lib/dalli_captcha/engine.rb +5 -5
- data/lib/dalli_captcha/image.rb +94 -94
- data/lib/dalli_captcha/key_handler.rb +41 -41
- data/lib/dalli_captcha/model.rb +45 -45
- data/lib/dalli_captcha/version.rb +3 -3
- data/lib/generators/install_generator.rb +21 -21
- data/lib/generators/templates/README +29 -29
- data/lib/generators/templates/dalli_captcha.rb +73 -73
- data/lib/tasks/dalli_captcha_tasks.rake +4 -4
- data/test/dalli_captcha_test.rb +7 -7
- data/test/dummy/README.rdoc +261 -261
- data/test/dummy/Rakefile +7 -7
- data/test/dummy/app/assets/javascripts/application.js +15 -15
- data/test/dummy/app/assets/stylesheets/application.css +13 -13
- data/test/dummy/app/controllers/application_controller.rb +3 -3
- data/test/dummy/app/helpers/application_helper.rb +2 -2
- data/test/dummy/app/views/layouts/application.html.erb +14 -14
- data/test/dummy/config.ru +4 -4
- data/test/dummy/config/application.rb +64 -64
- data/test/dummy/config/boot.rb +9 -9
- data/test/dummy/config/database.yml +25 -25
- data/test/dummy/config/environment.rb +5 -5
- data/test/dummy/config/environments/development.rb +37 -37
- data/test/dummy/config/environments/production.rb +67 -67
- data/test/dummy/config/environments/test.rb +37 -37
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -7
- data/test/dummy/config/initializers/inflections.rb +15 -15
- data/test/dummy/config/initializers/mime_types.rb +5 -5
- data/test/dummy/config/initializers/secret_token.rb +7 -7
- data/test/dummy/config/initializers/session_store.rb +8 -8
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -14
- data/test/dummy/config/locales/en.yml +5 -5
- data/test/dummy/config/routes.rb +4 -4
- data/test/dummy/log/development.log +95 -0
- data/test/dummy/public/404.html +26 -26
- data/test/dummy/public/422.html +26 -26
- data/test/dummy/public/500.html +25 -25
- data/test/dummy/script/rails +6 -6
- data/test/integration/navigation_test.rb +10 -10
- data/test/test_helper.rb +15 -15
- metadata +55 -54
@@ -1,41 +1,41 @@
|
|
1
|
-
module DalliCaptcha
|
2
|
-
class KeyHandler
|
3
|
-
def initialize(captcha_key)
|
4
|
-
@dalli = DalliCaptcha.dalli
|
5
|
-
@captcha_key = captcha_key
|
6
|
-
@options = DalliCaptcha.options
|
7
|
-
|
8
|
-
@string_key = "#{@options[:dalli_scope]}:#{@captcha_key}:string"
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
#set string in memcache
|
13
|
-
def set(string)
|
14
|
-
string = @options[:case_sensitive] ? string : string.downcase
|
15
|
-
@dalli.set(@string_key,string,@options[:expired_time])
|
16
|
-
|
17
|
-
#locked_times = @dalli.get(@locked_times_key).to_i
|
18
|
-
#@dalli.incrby(@locked_times_key, 1)
|
19
|
-
#@dalli.expire(@locked_times_key, @options[:locked_time]) if locked_times == 0
|
20
|
-
end
|
21
|
-
|
22
|
-
def delete
|
23
|
-
@dalli.delete(@string_key)
|
24
|
-
#@dalli.del(@locked_times_key)
|
25
|
-
end
|
26
|
-
|
27
|
-
def locked?
|
28
|
-
locked_times = @dalli.get(@locked_times_key).to_i
|
29
|
-
@captcha_key.blank? || (locked_times >= @options[:locked_times])
|
30
|
-
end
|
31
|
-
|
32
|
-
def valid?(captcha)
|
33
|
-
string = @dalli.get(@string_key)
|
34
|
-
if captcha.blank? || string.blank?
|
35
|
-
return false
|
36
|
-
else
|
37
|
-
string == (@options[:case_sensitive] ? captcha : captcha.downcase)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
1
|
+
module DalliCaptcha
|
2
|
+
class KeyHandler
|
3
|
+
def initialize(captcha_key)
|
4
|
+
@dalli = DalliCaptcha.dalli
|
5
|
+
@captcha_key = captcha_key
|
6
|
+
@options = DalliCaptcha.options
|
7
|
+
|
8
|
+
@string_key = "#{@options[:dalli_scope]}:#{@captcha_key}:string"
|
9
|
+
#@locked_times_key = "#{@options[:dalli_scope]}:#{@captcha_key}:locked_times"
|
10
|
+
end
|
11
|
+
|
12
|
+
#set string in memcache
|
13
|
+
def set(string)
|
14
|
+
string = @options[:case_sensitive] ? string : string.downcase
|
15
|
+
@dalli.set(@string_key,string,@options[:expired_time])
|
16
|
+
|
17
|
+
#locked_times = @dalli.get(@locked_times_key).to_i
|
18
|
+
#@dalli.incrby(@locked_times_key, 1)
|
19
|
+
#@dalli.expire(@locked_times_key, @options[:locked_time]) if locked_times == 0
|
20
|
+
end
|
21
|
+
|
22
|
+
def delete
|
23
|
+
@dalli.delete(@string_key)
|
24
|
+
#@dalli.del(@locked_times_key)
|
25
|
+
end
|
26
|
+
|
27
|
+
def locked?
|
28
|
+
locked_times = @dalli.get(@locked_times_key).to_i
|
29
|
+
@captcha_key.blank? || (locked_times >= @options[:locked_times])
|
30
|
+
end
|
31
|
+
|
32
|
+
def valid?(captcha)
|
33
|
+
string = @dalli.get(@string_key)
|
34
|
+
if captcha.blank? || string.blank?
|
35
|
+
return false
|
36
|
+
else
|
37
|
+
string == (@options[:case_sensitive] ? captcha : captcha.downcase)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/dalli_captcha/model.rb
CHANGED
@@ -1,45 +1,45 @@
|
|
1
|
-
module DalliCaptcha
|
2
|
-
module Model
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
|
5
|
-
def self.included(base)
|
6
|
-
base.extend(ClassMethods)
|
7
|
-
base.send :validate, :check_captcha
|
8
|
-
base.send :after_save, :delete_captcha
|
9
|
-
base.send :attr_accessor, :captcha, :captcha_key
|
10
|
-
end
|
11
|
-
|
12
|
-
module ClassMethods
|
13
|
-
end
|
14
|
-
|
15
|
-
def key_handler
|
16
|
-
@key_handler ||= DalliCaptcha::KeyHandler.new(captcha_key)
|
17
|
-
end
|
18
|
-
|
19
|
-
def check_captcha
|
20
|
-
if without_captcha?
|
21
|
-
@skip_captcha = false
|
22
|
-
else
|
23
|
-
errors.add(:captcha, DalliCaptcha::options[:error_message]) unless key_handler.valid?(captcha)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def delete_captcha
|
28
|
-
key_handler.delete
|
29
|
-
end
|
30
|
-
|
31
|
-
def without_captcha?
|
32
|
-
!!@skip_captcha
|
33
|
-
end
|
34
|
-
|
35
|
-
def valid_without_captcha?
|
36
|
-
@skip_captcha = true
|
37
|
-
self.valid?
|
38
|
-
end
|
39
|
-
|
40
|
-
def save_without_captcha
|
41
|
-
@skip_captcha = true
|
42
|
-
self.save
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
1
|
+
module DalliCaptcha
|
2
|
+
module Model
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
base.extend(ClassMethods)
|
7
|
+
base.send :validate, :check_captcha
|
8
|
+
base.send :after_save, :delete_captcha
|
9
|
+
base.send :attr_accessor, :captcha, :captcha_key
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
end
|
14
|
+
|
15
|
+
def key_handler
|
16
|
+
@key_handler ||= DalliCaptcha::KeyHandler.new(captcha_key)
|
17
|
+
end
|
18
|
+
|
19
|
+
def check_captcha
|
20
|
+
if without_captcha?
|
21
|
+
@skip_captcha = false
|
22
|
+
else
|
23
|
+
errors.add(:captcha, DalliCaptcha::options[:error_message]) unless key_handler.valid?(captcha)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def delete_captcha
|
28
|
+
key_handler.delete
|
29
|
+
end
|
30
|
+
|
31
|
+
def without_captcha?
|
32
|
+
!!@skip_captcha
|
33
|
+
end
|
34
|
+
|
35
|
+
def valid_without_captcha?
|
36
|
+
@skip_captcha = true
|
37
|
+
self.valid?
|
38
|
+
end
|
39
|
+
|
40
|
+
def save_without_captcha
|
41
|
+
@skip_captcha = true
|
42
|
+
self.save
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -1,3 +1,3 @@
|
|
1
|
-
module DalliCaptcha
|
2
|
-
VERSION = "0.0.
|
3
|
-
end
|
1
|
+
module DalliCaptcha
|
2
|
+
VERSION = "0.0.3"
|
3
|
+
end
|
@@ -1,21 +1,21 @@
|
|
1
|
-
|
2
|
-
require 'rails/generators'
|
3
|
-
|
4
|
-
module DalliCaptcha
|
5
|
-
module Generators
|
6
|
-
class InstallGenerator < Rails::Generators::Base
|
7
|
-
source_root File.expand_path('../templates', __FILE__)
|
8
|
-
|
9
|
-
desc "Copy DalliCaptcha default files"
|
10
|
-
|
11
|
-
def copy_initializer
|
12
|
-
copy_file "
|
13
|
-
end
|
14
|
-
|
15
|
-
def show_readme
|
16
|
-
readme "README"
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
1
|
+
|
2
|
+
require 'rails/generators'
|
3
|
+
|
4
|
+
module DalliCaptcha
|
5
|
+
module Generators
|
6
|
+
class InstallGenerator < Rails::Generators::Base
|
7
|
+
source_root File.expand_path('../templates', __FILE__)
|
8
|
+
|
9
|
+
desc "Copy DalliCaptcha default files"
|
10
|
+
|
11
|
+
def copy_initializer
|
12
|
+
copy_file "dalli_captcha.rb", "config/initializers/dalli_captcha.rb"
|
13
|
+
end
|
14
|
+
|
15
|
+
def show_readme
|
16
|
+
readme "README"
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,29 +1,29 @@
|
|
1
|
-
===============================================================================
|
2
|
-
|
3
|
-
1. Setup "config/initializers/dalli_captcha.rb"
|
4
|
-
|
5
|
-
2. Mount
|
6
|
-
|
7
|
-
mount
|
8
|
-
|
9
|
-
3. Add to your controller
|
10
|
-
|
11
|
-
before_filter :generate_captcha_key
|
12
|
-
|
13
|
-
4. Add to your model
|
14
|
-
|
15
|
-
include
|
16
|
-
|
17
|
-
5. If you set "config.active_record.whitelist_attributes = true" in "config/application.rb", remember to add attr_accessible to your model
|
18
|
-
|
19
|
-
attr_accessible :captcha, :captcha_key
|
20
|
-
|
21
|
-
6. Add to your view
|
22
|
-
|
23
|
-
<%= image_tag(captcha_path(:timestamp => Time.now.to_i), :alt => "captcha") %>
|
24
|
-
<%= f.text_field :captcha %>
|
25
|
-
<%= f.hidden_field :captcha_key, :value => session[:captcha_key] %>
|
26
|
-
|
27
|
-
Enjoy it :)
|
28
|
-
|
29
|
-
===============================================================================
|
1
|
+
===============================================================================
|
2
|
+
|
3
|
+
1. Setup "config/initializers/dalli_captcha.rb"
|
4
|
+
|
5
|
+
2. Mount DalliCaptcha::Engine in your router.rb
|
6
|
+
|
7
|
+
mount DalliCaptcha::Engine => '/captcha', :as => :captcha
|
8
|
+
|
9
|
+
3. Add to your controller
|
10
|
+
|
11
|
+
before_filter :generate_captcha_key
|
12
|
+
|
13
|
+
4. Add to your model
|
14
|
+
|
15
|
+
include DalliCaptcha::Model
|
16
|
+
|
17
|
+
5. If you set "config.active_record.whitelist_attributes = true" in "config/application.rb", remember to add attr_accessible to your model
|
18
|
+
|
19
|
+
attr_accessible :captcha, :captcha_key
|
20
|
+
|
21
|
+
6. Add to your view
|
22
|
+
|
23
|
+
<%= image_tag(captcha_path(:timestamp => Time.now.to_i), :alt => "captcha") %>
|
24
|
+
<%= f.text_field :captcha %>
|
25
|
+
<%= f.hidden_field :captcha_key, :value => session[:captcha_key] %>
|
26
|
+
|
27
|
+
Enjoy it :)
|
28
|
+
|
29
|
+
===============================================================================
|
@@ -1,73 +1,73 @@
|
|
1
|
-
DalliCaptcha.setup do |config|
|
2
|
-
|
3
|
-
# ==> Dalli configuration
|
4
|
-
config.dalli_config = {
|
5
|
-
:host => "localhost:11211",
|
6
|
-
:compress => true,
|
7
|
-
:namespace => "captcha"
|
8
|
-
}
|
9
|
-
|
10
|
-
# ==> Dalli scope configuration
|
11
|
-
config.dalli_scope = "DalliCaptcha"
|
12
|
-
|
13
|
-
# ==> Dalli key expired time
|
14
|
-
config.expired_time = 1800
|
15
|
-
|
16
|
-
# ==> Dalli locked times and locked time
|
17
|
-
config.locked_times = 30
|
18
|
-
config.locked_time = 600
|
19
|
-
|
20
|
-
# ==> ImageMagick path
|
21
|
-
config.image_magick_path = ""
|
22
|
-
|
23
|
-
# ==> Tempfile path
|
24
|
-
config.tempfile_path = "/tmp"
|
25
|
-
|
26
|
-
# ==> Tempfile name
|
27
|
-
config.tempfile_name = "dalli_captcha"
|
28
|
-
|
29
|
-
# ==> Tempfile type and content type
|
30
|
-
config.tempfile_type = ".png"
|
31
|
-
config.content_type = "image/png"
|
32
|
-
|
33
|
-
# ==> Image width and height
|
34
|
-
config.width = 120
|
35
|
-
config.height = 30
|
36
|
-
|
37
|
-
# ==> Char set
|
38
|
-
# You can add/remove char you want
|
39
|
-
config.chars = %w(2 3 4 5 6 7 9 a c d e f g h j k m n p q r s t w x y z A C D E F G H J K L M N P Q R S T X Y Z)
|
40
|
-
|
41
|
-
# ==> String length
|
42
|
-
# You can set the same value if you don't want it to be random length
|
43
|
-
config.string_length = {
|
44
|
-
:max => 6,
|
45
|
-
:min => 4
|
46
|
-
}
|
47
|
-
|
48
|
-
# ==> Image font color and background
|
49
|
-
config.font_color = "gray"
|
50
|
-
config.background = "white"
|
51
|
-
|
52
|
-
# ==> Lines on your captcha
|
53
|
-
# You can set 0, 0 if you don't want to draw any line on your captcha
|
54
|
-
config.line = {
|
55
|
-
:max => 4,
|
56
|
-
:min => 2
|
57
|
-
}
|
58
|
-
config.line_color = "gary"
|
59
|
-
|
60
|
-
# ==> Swirl
|
61
|
-
# http://www.imagemagick.org/Usage/warping/#swirl
|
62
|
-
config.swirl_range = {
|
63
|
-
:max => 20,
|
64
|
-
:min => -20
|
65
|
-
}
|
66
|
-
|
67
|
-
# ==> Case sensitive
|
68
|
-
config.case_sensitive = false
|
69
|
-
|
70
|
-
# ==> Error message
|
71
|
-
# if you want to use I18n in your model, you can set it to be nil
|
72
|
-
config.error_message = "is invalid"
|
73
|
-
end
|
1
|
+
DalliCaptcha.setup do |config|
|
2
|
+
|
3
|
+
# ==> Dalli configuration
|
4
|
+
config.dalli_config = {
|
5
|
+
:host => "localhost:11211",
|
6
|
+
:compress => true,
|
7
|
+
:namespace => "captcha"
|
8
|
+
}
|
9
|
+
|
10
|
+
# ==> Dalli scope configuration
|
11
|
+
config.dalli_scope = "DalliCaptcha"
|
12
|
+
|
13
|
+
# ==> Dalli key expired time
|
14
|
+
config.expired_time = 1800
|
15
|
+
|
16
|
+
# ==> Dalli locked times and locked time
|
17
|
+
config.locked_times = 30
|
18
|
+
config.locked_time = 600
|
19
|
+
|
20
|
+
# ==> ImageMagick path
|
21
|
+
config.image_magick_path = ""
|
22
|
+
|
23
|
+
# ==> Tempfile path
|
24
|
+
config.tempfile_path = "/tmp"
|
25
|
+
|
26
|
+
# ==> Tempfile name
|
27
|
+
config.tempfile_name = "dalli_captcha"
|
28
|
+
|
29
|
+
# ==> Tempfile type and content type
|
30
|
+
config.tempfile_type = ".png"
|
31
|
+
config.content_type = "image/png"
|
32
|
+
|
33
|
+
# ==> Image width and height
|
34
|
+
config.width = 120
|
35
|
+
config.height = 30
|
36
|
+
|
37
|
+
# ==> Char set
|
38
|
+
# You can add/remove char you want
|
39
|
+
config.chars = %w(2 3 4 5 6 7 9 a c d e f g h j k m n p q r s t w x y z A C D E F G H J K L M N P Q R S T X Y Z)
|
40
|
+
|
41
|
+
# ==> String length
|
42
|
+
# You can set the same value if you don't want it to be random length
|
43
|
+
config.string_length = {
|
44
|
+
:max => 6,
|
45
|
+
:min => 4
|
46
|
+
}
|
47
|
+
|
48
|
+
# ==> Image font color and background
|
49
|
+
config.font_color = "gray"
|
50
|
+
config.background = "white"
|
51
|
+
|
52
|
+
# ==> Lines on your captcha
|
53
|
+
# You can set 0, 0 if you don't want to draw any line on your captcha
|
54
|
+
config.line = {
|
55
|
+
:max => 4,
|
56
|
+
:min => 2
|
57
|
+
}
|
58
|
+
config.line_color = "gary"
|
59
|
+
|
60
|
+
# ==> Swirl
|
61
|
+
# http://www.imagemagick.org/Usage/warping/#swirl
|
62
|
+
config.swirl_range = {
|
63
|
+
:max => 20,
|
64
|
+
:min => -20
|
65
|
+
}
|
66
|
+
|
67
|
+
# ==> Case sensitive
|
68
|
+
config.case_sensitive = false
|
69
|
+
|
70
|
+
# ==> Error message
|
71
|
+
# if you want to use I18n in your model, you can set it to be nil
|
72
|
+
config.error_message = "is invalid"
|
73
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# desc "Explaining what the task does"
|
2
|
-
# task :dalli_captcha do
|
3
|
-
# # Task goes here
|
4
|
-
# end
|
1
|
+
# desc "Explaining what the task does"
|
2
|
+
# task :dalli_captcha do
|
3
|
+
# # Task goes here
|
4
|
+
# end
|
data/test/dalli_captcha_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class DalliCaptchaTest < ActiveSupport::TestCase
|
4
|
-
test "truth" do
|
5
|
-
assert_kind_of Module, DalliCaptcha
|
6
|
-
end
|
7
|
-
end
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class DalliCaptchaTest < ActiveSupport::TestCase
|
4
|
+
test "truth" do
|
5
|
+
assert_kind_of Module, DalliCaptcha
|
6
|
+
end
|
7
|
+
end
|