spambust 0.1.2 → 0.1.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.
- checksums.yaml +8 -8
- data/README.md +5 -5
- data/lib/spambust/form_helpers.rb +7 -7
- data/lib/spambust/version.rb +1 -1
- data/spec/spambust/form_helpers_integration_spec.rb +1 -1
- data/spec/spambust/form_helpers_spec.rb +9 -3
- data/spec/spec_helper.rb +9 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NWU4MmQ5MTRmZGZhYjNjNTBmOTg5ZmM3MmJlMmIxZjIwMmMxN2UwMQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZjdlODVhMjZlNDhmYzc0MTM1MzlmYWFkZDc5ZjM3ODMzY2I4MTMyYQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OWI3YzUxNTViNDkzYjZmOTg2MGYzYWUzMzlmZjJlMjdjZWQyNTVhZGU0MmU4
|
10
|
+
NzU4MDEyZjdjNzNjYWZlNDEzNmNhZjhmMGQ5MTI2MDliMzc0NzhmNzg4N2Nk
|
11
|
+
NTQ4ODRmYzZmNmY1M2I4NmIwNDdkODhlNmRlZWIxYzkyY2JlYjk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
Mjc5YjZiZGNjYzVmMDY0MGIwNzEzZTUyYzM5ZDdmMGUyYjliZjlhNTRiMTgx
|
14
|
+
MWUwN2U2MDkzNjY5YWU1NDk3MmU2MjQyMGU5YzcyMmRhYWQwMDkzODVkMTI1
|
15
|
+
ODFlOWZhOGI3YjNmYjI3YTUwOWJiNjI0NWVhMzljZDczMGNjZjk=
|
data/README.md
CHANGED
@@ -23,7 +23,7 @@ gem install spambust
|
|
23
23
|
Usage
|
24
24
|
------
|
25
25
|
|
26
|
-
|
26
|
+
**app.rb**
|
27
27
|
|
28
28
|
``` ruby
|
29
29
|
class TestApp < Sinatra::Base
|
@@ -48,11 +48,11 @@ class TestApp < Sinatra::Base
|
|
48
48
|
erb :index, :locals => { :result => result }
|
49
49
|
end
|
50
50
|
|
51
|
-
start_app if direct_script_execution?
|
51
|
+
start_app if direct_script_execution?
|
52
52
|
end
|
53
53
|
```
|
54
54
|
|
55
|
-
|
55
|
+
**index.erb**
|
56
56
|
|
57
57
|
``` erb
|
58
58
|
<html>
|
@@ -78,11 +78,11 @@ end
|
|
78
78
|
</html>
|
79
79
|
```
|
80
80
|
|
81
|
-
|
81
|
+
**output**
|
82
82
|
|
83
83
|
``` html
|
84
84
|
<input type="text" name="ee11cbb19052e40b07aac0ca060c23ee[2a034e9d9e2601c21191cca53760eaaf]" id="user-first-name" />
|
85
|
-
<input type="
|
85
|
+
<input type="text" style="position:absolute;top:-10000px;left:-10000px;" name="user[first_name]" />
|
86
86
|
```
|
87
87
|
|
88
88
|
How does it work?
|
@@ -61,27 +61,27 @@ module Spambust
|
|
61
61
|
# </html>
|
62
62
|
|
63
63
|
module FormHelpers
|
64
|
-
# Returns obfustated input tags together with its fake
|
64
|
+
# Returns obfustated input tags together with its fake input tags that are rendered off the screen
|
65
65
|
#
|
66
66
|
# Use inside your templates to generate an obfuscated input field. This is the field that the server will use.
|
67
|
-
# If the server sees that fields with original names
|
68
|
-
#
|
67
|
+
# If the server sees that fields with original names are filled, the server should assume it be be a spam.
|
68
|
+
# It also accepts options for input type and other CSS properties.
|
69
69
|
#
|
70
70
|
# input(["user", "name"])
|
71
|
-
# # => <input type="text" name="#{user_md5}[#{name_md5}]" /><input type="
|
71
|
+
# # => <input type="text" name="#{user_md5}[#{name_md5}]" /><input type="text" style="position:absolute;top:-10000px;left:-10000px;" name="user[name]" />
|
72
72
|
#
|
73
73
|
# input(["user", "name"], :type => "password")
|
74
|
-
# # => <input type="password" name="#{user_md5}[#{name_md5}]" /><input type="
|
74
|
+
# # => <input type="password" name="#{user_md5}[#{name_md5}]" /><input type="text" style="position:absolute;top:-10000px;left:-10000px;" name="user[name]" />
|
75
75
|
#
|
76
76
|
# input(["user", "name"], :id => "name", :class => "name")
|
77
|
-
# # => <input type="text" name="#{user_md5}[#{name_md5}]" id="name" class="name" /><input type="
|
77
|
+
# # => <input type="text" name="#{user_md5}[#{name_md5}]" id="name" class="name" /><input type="text" style="position:absolute;top:-10000px;left:-10000px;" name="user[name]" class="name" />
|
78
78
|
def input(paths, options = {})
|
79
79
|
type = options.delete(:type) || "text"
|
80
80
|
options_without_id = options.select { |key, value| key != :id }
|
81
81
|
others = hash_to_options(options)
|
82
82
|
others_without_id = hash_to_options(options_without_id)
|
83
83
|
digested_paths = paths.map { |path| Digest::MD5.hexdigest(path) }
|
84
|
-
%Q(<input type="#{type}" name="#{namify digested_paths}"#{others} /><input type="
|
84
|
+
%Q(<input type="#{type}" name="#{namify digested_paths}"#{others} /><input type="text" style="position:absolute;top:-10000px;left:-10000px;" name="#{namify paths}"#{others_without_id} />)
|
85
85
|
end
|
86
86
|
|
87
87
|
# Returns submit tags
|
data/lib/spambust/version.rb
CHANGED
@@ -15,7 +15,7 @@ describe "test application" do
|
|
15
15
|
it "contains hidden input fields" do
|
16
16
|
get "/"
|
17
17
|
|
18
|
-
last_response.body.must_include %Q(<input type="
|
18
|
+
last_response.body.must_include %Q(<input type="text" style="position:absolute;top:-10000px;left:-10000px;" name="user[email]" size="40" />)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -16,19 +16,25 @@ describe "Bustspam::FormHelpers" do
|
|
16
16
|
describe "#input" do
|
17
17
|
describe "when type is not mentioned" do
|
18
18
|
it "renders an input tag of type 'text'" do
|
19
|
-
subject.input(["user", "name"]).must_equal %Q(<input type="text" name="#{user_md5}[#{name_md5}]" /><input type="
|
19
|
+
subject.input(["user", "name"]).must_equal %Q(<input type="text" name="#{user_md5}[#{name_md5}]" /><input type="text" style="position:absolute;top:-10000px;left:-10000px;" name="user[name]" />)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
describe "when type is mentioned" do
|
24
24
|
it "renders an input tag of specified type" do
|
25
|
-
subject.input(["user", "name"], :type => "password").must_equal %Q(<input type="password" name="#{user_md5}[#{name_md5}]" /><input type="
|
25
|
+
subject.input(["user", "name"], :type => "password").must_equal %Q(<input type="password" name="#{user_md5}[#{name_md5}]" /><input type="text" style="position:absolute;top:-10000px;left:-10000px;" name="user[name]" />)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
describe "when other options are mentioned" do
|
30
30
|
it "renders the options" do
|
31
|
-
subject.input(["user", "name"], :
|
31
|
+
subject.input(["user", "name"], :class => "name").must_equal %Q(<input type="text" name="#{user_md5}[#{name_md5}]" class="name" /><input type="text" style="position:absolute;top:-10000px;left:-10000px;" name="user[name]" class="name" />)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "when other options include 'id'" do
|
36
|
+
it "doesn't repeat the 'id'" do
|
37
|
+
subject.input(["user", "name"], :id => "name").must_equal %Q(<input type="text" name="#{user_md5}[#{name_md5}]" id="name" /><input type="text" style="position:absolute;top:-10000px;left:-10000px;" name="user[name]" />)
|
32
38
|
end
|
33
39
|
end
|
34
40
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
require "rack/test"
|
2
2
|
require "sinatra/base"
|
3
3
|
|
4
|
+
begin
|
5
|
+
require "simplecov"
|
6
|
+
SimpleCov.start do
|
7
|
+
add_filter "/spec|test|vendor/"
|
8
|
+
end
|
9
|
+
rescue LoadError
|
10
|
+
puts "\nPlease install simplecov to generate coverage report!\n\n"
|
11
|
+
end
|
12
|
+
|
4
13
|
gem "minitest"
|
5
14
|
require "minitest/autorun"
|
6
15
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spambust
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chirantan Mitra
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ! '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rack-test
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,7 +81,7 @@ dependencies:
|
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: simplecov
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - ! '>='
|