aritcaptcha 1.18.0 → 1.19.0
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/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
|