traptcha 0.0.1 → 0.0.2
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/.gitignore +1 -0
- data/Gemfile +2 -0
- data/app/controllers/traptcha/captchas_controller.rb +12 -0
- data/config/routes.rb +3 -0
- data/lib/traptcha/captcha.rb +33 -0
- data/lib/traptcha/controller_helpers.rb +17 -0
- data/lib/traptcha/encryptors.rb +11 -0
- data/lib/traptcha/engine.rb +15 -0
- data/lib/traptcha/image.rb +2 -0
- data/lib/traptcha/invalid_captcha.rb +4 -0
- data/lib/traptcha/version.rb +1 -1
- data/lib/traptcha/view_helpers.rb +27 -0
- data/lib/traptcha.rb +27 -21
- metadata +12 -5
- data/Gemfile.lock +0 -26
data/.gitignore
CHANGED
data/Gemfile
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
class Traptcha::CaptchasController < ApplicationController
|
2
|
+
def show
|
3
|
+
session[:captcha] = generated_captcha.value
|
4
|
+
send_data generated_captcha.to_png
|
5
|
+
end
|
6
|
+
|
7
|
+
protected
|
8
|
+
|
9
|
+
def generated_captcha
|
10
|
+
@generated_captcha ||= Traptcha::Captcha.generate
|
11
|
+
end
|
12
|
+
end
|
data/config/routes.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
module Traptcha
|
2
|
+
class Captcha
|
3
|
+
attr_accessor :text, :image_generator, :encryptor
|
4
|
+
|
5
|
+
def initialize(text = "")
|
6
|
+
@text = text
|
7
|
+
@image_generator = Traptcha.default_image_generator
|
8
|
+
@encryptor = Traptcha.default_encryptor
|
9
|
+
end
|
10
|
+
|
11
|
+
def value
|
12
|
+
@value ||= @encryptor.digest(text)
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_png
|
16
|
+
@image_generator.new(text).output.to_blob
|
17
|
+
end
|
18
|
+
|
19
|
+
class << self
|
20
|
+
def generate
|
21
|
+
new generate_random_captcha
|
22
|
+
end
|
23
|
+
|
24
|
+
def generate_random_captcha
|
25
|
+
3.times.map { valid_chars[rand(valid_chars.length)] }.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
def valid_chars
|
29
|
+
Traptcha.valid_chars - Traptcha.ignored_chars
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Traptcha
|
2
|
+
module ControllerHelpers
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
helper_method :valid_captcha?
|
7
|
+
end
|
8
|
+
|
9
|
+
def valid_captcha?
|
10
|
+
params[:captcha] && session[:captcha] && Traptcha::Captcha.new(params[:captcha]).value == session[:captcha]
|
11
|
+
end
|
12
|
+
|
13
|
+
def validate_captcha
|
14
|
+
raise Traptcha::InvalidCaptcha unless valid_captcha?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "rails"
|
2
|
+
|
3
|
+
module Traptcha
|
4
|
+
class Engine < Rails::Engine
|
5
|
+
initializer "traptcha" do |app|
|
6
|
+
ActiveSupport.on_load(:action_controller) do
|
7
|
+
ActionController::Base.send :include, Traptcha::ControllerHelpers
|
8
|
+
end
|
9
|
+
|
10
|
+
ActiveSupport.on_load(:action_view) do
|
11
|
+
ActionView::Base.send :include, Traptcha::ViewHelpers
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/traptcha/image.rb
CHANGED
data/lib/traptcha/version.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
module Traptcha
|
2
|
+
module ViewHelpers
|
3
|
+
def captcha_image_tag
|
4
|
+
image_tag captcha_path
|
5
|
+
end
|
6
|
+
|
7
|
+
def captcha_label_tag
|
8
|
+
label_tag :captcha
|
9
|
+
end
|
10
|
+
|
11
|
+
def captcha_input_tag
|
12
|
+
text_field_tag :captcha
|
13
|
+
end
|
14
|
+
|
15
|
+
def captcha_tag
|
16
|
+
if block_given?
|
17
|
+
yield captcha_image_tag, captcha_label_tag, captcha_input_tag
|
18
|
+
else
|
19
|
+
content_tag :ul do
|
20
|
+
concat content_tag(:li, captcha_label_tag)
|
21
|
+
concat content_tag(:li, captcha_image_tag)
|
22
|
+
concat content_tag(:li, captcha_input_tag)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/traptcha.rb
CHANGED
@@ -1,25 +1,31 @@
|
|
1
|
+
require 'traptcha/engine'
|
2
|
+
|
1
3
|
module Traptcha
|
2
|
-
autoload :Image,
|
3
|
-
autoload :WaveImage,
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
4
|
+
autoload :Image, 'traptcha/image'
|
5
|
+
autoload :WaveImage, 'traptcha/wave_image'
|
6
|
+
autoload :Encryptors, 'traptcha/encryptors'
|
7
|
+
autoload :Captcha, 'traptcha/captcha'
|
8
|
+
autoload :ControllerHelpers, 'traptcha/controller_helpers'
|
9
|
+
autoload :ViewHelpers, 'traptcha/view_helpers'
|
10
|
+
autoload :InvalidCaptcha, 'traptcha/invalid_captcha'
|
11
|
+
|
12
|
+
mattr_accessor :valid_chars
|
13
|
+
@@valid_chars = ('a'..'z').to_a + (0..9).map(&:to_s).to_a
|
14
|
+
|
15
|
+
mattr_accessor :ignored_chars
|
16
|
+
@@ignored_chars = %w(y k u v m n l i o 0 1 9 q e)
|
17
|
+
|
18
|
+
mattr_accessor :default_image_generator
|
19
|
+
@@default_image_generator = WaveImage
|
20
|
+
|
21
|
+
mattr_accessor :default_encryptor
|
22
|
+
@@default_encryptor = Encryptors::MD5
|
23
|
+
|
24
|
+
mattr_accessor :default_wave_variation
|
25
|
+
@@default_wave_variation = (20..90)
|
26
|
+
|
27
|
+
mattr_accessor :default_wave_amplitude
|
28
|
+
@@default_wave_amplitude = 5
|
23
29
|
|
24
30
|
def self.setup
|
25
31
|
yield self
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: traptcha
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Rodrigo Navarro
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-03-
|
18
|
+
date: 2011-03-15 00:00:00 -03:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -60,11 +60,18 @@ extra_rdoc_files: []
|
|
60
60
|
files:
|
61
61
|
- .gitignore
|
62
62
|
- Gemfile
|
63
|
-
- Gemfile.lock
|
64
63
|
- Rakefile
|
64
|
+
- app/controllers/traptcha/captchas_controller.rb
|
65
|
+
- config/routes.rb
|
65
66
|
- lib/traptcha.rb
|
67
|
+
- lib/traptcha/captcha.rb
|
68
|
+
- lib/traptcha/controller_helpers.rb
|
69
|
+
- lib/traptcha/encryptors.rb
|
70
|
+
- lib/traptcha/engine.rb
|
66
71
|
- lib/traptcha/image.rb
|
72
|
+
- lib/traptcha/invalid_captcha.rb
|
67
73
|
- lib/traptcha/version.rb
|
74
|
+
- lib/traptcha/view_helpers.rb
|
68
75
|
- lib/traptcha/wave_image.rb
|
69
76
|
- spec/spec_helper.rb
|
70
77
|
- spec/traptcha/image_spec.rb
|
data/Gemfile.lock
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
traptcha (0.0.1)
|
5
|
-
rmagick
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: http://rubygems.org/
|
9
|
-
specs:
|
10
|
-
diff-lcs (1.1.2)
|
11
|
-
rmagick (2.13.1)
|
12
|
-
rspec (2.5.0)
|
13
|
-
rspec-core (~> 2.5.0)
|
14
|
-
rspec-expectations (~> 2.5.0)
|
15
|
-
rspec-mocks (~> 2.5.0)
|
16
|
-
rspec-core (2.5.1)
|
17
|
-
rspec-expectations (2.5.0)
|
18
|
-
diff-lcs (~> 1.1.2)
|
19
|
-
rspec-mocks (2.5.0)
|
20
|
-
|
21
|
-
PLATFORMS
|
22
|
-
ruby
|
23
|
-
|
24
|
-
DEPENDENCIES
|
25
|
-
rspec (~> 2.5.0)
|
26
|
-
traptcha!
|