aritcaptcha 1.18.0 → 1.19.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/aritcaptcha.gemspec +2 -2
- data/lib/aritcaptcha/aritcaptcha_helper.rb +54 -23
- data/lib/aritcaptcha/aritcaptcha_verify.rb +11 -1
- data/lib/aritcaptcha/calculation.rb +6 -6
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.19.0
|
data/aritcaptcha.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{aritcaptcha}
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.19.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Guilherme Nascimento"]
|
12
|
-
s.date = %q{2010-07-
|
12
|
+
s.date = %q{2010-07-10}
|
13
13
|
s.description = %q{Arithmetic Captcha}
|
14
14
|
s.email = %q{guilherme.ruby@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -1,40 +1,71 @@
|
|
1
1
|
module Aritcaptcha
|
2
2
|
|
3
3
|
module AritcaptchaHelper
|
4
|
+
ADD = '+'
|
5
|
+
SUB = '-'
|
6
|
+
DIV = '/'
|
7
|
+
MUL = '*'
|
4
8
|
|
5
|
-
|
6
|
-
|
7
|
-
|
9
|
+
OPERATIONS = [ADD, SUB, DIV, MUL]
|
10
|
+
|
11
|
+
def aritcaptcha_tag(options={})
|
12
|
+
equation_key = Time.now.to_i
|
13
|
+
|
14
|
+
default_operations = {:add => "+", :sub => "-", :mul => "*", :div => "/"}
|
8
15
|
|
9
16
|
operator = nil
|
10
|
-
if options[:
|
11
|
-
|
17
|
+
if options[:operations] == nil
|
18
|
+
operator = default_operations.to_a[rand(default_operations.size)][1]
|
12
19
|
else
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
20
|
+
non_default_operations = {}
|
21
|
+
options[:operations].each do |op|
|
22
|
+
non_default_operations[op] = default_operations[op]
|
23
|
+
end
|
24
|
+
operator = non_default_operations.to_a[rand(non_default_operations.size)][1]
|
18
25
|
end
|
19
26
|
|
20
|
-
equation, result = Aritcaptcha::Calculation.generate_calculation
|
21
|
-
#session[:equation] = [equation_key, eval(equation)]
|
22
|
-
puts "=========================================================="
|
23
|
-
puts equation
|
24
|
-
puts result
|
25
|
-
puts "=========================================================="
|
27
|
+
equation, result = Aritcaptcha::Calculation.generate_calculation 50, 50, operator
|
26
28
|
|
27
|
-
|
29
|
+
session[:equation] = [equation_key, eval(equation)]
|
28
30
|
|
29
31
|
if options[:html]
|
30
32
|
options = options[:html].inject([]){|dump, pair| dump << "#{pair[0]}=\"#{pair[1]}\""}
|
31
|
-
options.join(" ")
|
32
|
-
end
|
33
|
+
options = options.join(" ")
|
34
|
+
end
|
35
|
+
|
36
|
+
html = ""
|
37
|
+
if options[:format] == "image"
|
38
|
+
session[:image] = equation_key
|
39
|
+
format = generate_image equation_key, equation
|
40
|
+
html << "<img src=\"#{format}\" style='vertical-align:top;' /> <input type=\"text\" name=\"equation\" size=\"3\" style='vertical-align:top;' #{options} />"
|
41
|
+
else
|
42
|
+
html << "#{equation} = <input type=\"text\" name=\"equation\" style='vertical-align:top;' size=\"3\" #{options} /></div>"
|
43
|
+
end
|
44
|
+
|
45
|
+
html << "<input type=\"hidden\" name=\"equation_key\" value=\"#{equation_key}\" /> \n"
|
46
|
+
end
|
47
|
+
|
48
|
+
def generate_image(equation_key, equation)
|
49
|
+
relative_name = "#{equation_key}.png"
|
50
|
+
full_path = "#{Rails.root}/public/images/#{relative_name}"
|
33
51
|
|
34
|
-
|
35
|
-
|
36
|
-
|
52
|
+
unless File.file?(full_path)
|
53
|
+
image = Magick::Image.new(85, 25)
|
54
|
+
image.format = "PNG"
|
55
|
+
title = Magick::Draw.new
|
56
|
+
|
57
|
+
title.annotate(image, 5, 5, 5, 5, equation + " =") do
|
58
|
+
self.fill = "#333"
|
59
|
+
self.font = Rails.root + "/fonts/Clarenton LT Bold.ttf"
|
60
|
+
self.font_family = "Clarenton LT Bold"
|
61
|
+
self.font_weight = Magick::BoldWeight
|
62
|
+
self.gravity = Magick::NorthWestGravity
|
63
|
+
self.pointsize = 20
|
64
|
+
end
|
65
|
+
image.write(full_path)
|
66
|
+
end
|
67
|
+
url = image_path(relative_name)
|
37
68
|
end
|
38
69
|
end
|
39
70
|
|
40
|
-
end
|
71
|
+
end
|
@@ -5,10 +5,20 @@ module Aritcaptcha
|
|
5
5
|
SOLV = 1
|
6
6
|
|
7
7
|
def verify_aritcaptcha(params)
|
8
|
+
clean session[:image]
|
9
|
+
|
8
10
|
if (equation_key = params[:equation_key]) and (equation = params[:equation])
|
9
11
|
return (session[:equation] and session[:equation][SOLV_KEY] == equation_key.to_i and session[:equation][SOLV] == equation.to_i)
|
10
12
|
end
|
11
13
|
end
|
14
|
+
|
15
|
+
def clean image
|
16
|
+
unless image == nil
|
17
|
+
relative_name = "#{image}.png"
|
18
|
+
full_path = "#{Rails.root}/public/images/#{relative_name}"
|
19
|
+
File.delete(full_path)
|
20
|
+
end
|
21
|
+
end
|
12
22
|
end
|
13
23
|
|
14
|
-
end
|
24
|
+
end
|
@@ -2,15 +2,15 @@ module Aritcaptcha
|
|
2
2
|
|
3
3
|
class Calculation
|
4
4
|
|
5
|
-
def
|
5
|
+
def generate_calculation number1, number2, operator
|
6
|
+
# Division by zero
|
7
|
+
return [nil, nil] if operator == "/" and number1.zero? or number2.zero?
|
8
|
+
|
6
9
|
number1 = rand(number1)
|
7
10
|
number2 = rand(number2)
|
8
|
-
equation = "#{number1} #{operation} #{number2}"
|
9
|
-
|
10
|
-
# Division by zero
|
11
|
-
return [nil, nil] if operation == "/" and number1.zero? or number2.zero?
|
12
11
|
|
13
|
-
|
12
|
+
equation = "#{number1} #{operator} #{number2}"
|
13
|
+
result = eval("#{number1.to_f} #{operator} #{number2.to_f}")
|
14
14
|
|
15
15
|
[equation, result]
|
16
16
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aritcaptcha
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 91
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
8
|
+
- 19
|
9
9
|
- 0
|
10
|
-
version: 1.
|
10
|
+
version: 1.19.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Guilherme Nascimento
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-07-
|
18
|
+
date: 2010-07-10 00:00:00 -03:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|