dalli_captcha 0.0.2 → 0.0.3
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.
- 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
|