invisible_captcha 0.11.0 → 0.12.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8e681b453a7901d41d318ded90fa7ef465537654
4
- data.tar.gz: 41f47473ce607a8610cdf784d60407c83d294cbf
3
+ metadata.gz: 69fb2a8c65477376dbea0a7162151d6c100282dc
4
+ data.tar.gz: b5f5134aff6f55b7d766972151ce85194cadd3e6
5
5
  SHA512:
6
- metadata.gz: 293b6539d38e67f8a95fc109aaf54d2d0f3af25695ab76c91b6427f8c132fb9bc7397c0aebef2bd2f78af65af65fc44a8468f9a6bd766294b496d781171d9104
7
- data.tar.gz: f64232b5bbaf63be0a41b5996bbb97b2960b13c0c31b3d87f379444e6017420b32941310d891c52d613fadc8d2cf33bb5ea90b2839942692f8ccd5661b0c47bf
6
+ metadata.gz: 390075abc680625ac3eee6b237765336554c5e7eec9c06acb368aa1b7f403ef4c1fc8b7ff21170fde71217b7704dc85b4d797e2f4760c9e255a464c7367deda5
7
+ data.tar.gz: be7d59009de1f3d70485fc19dd6e3bb5b8f0537a5f2e51b879a33ff8a4de9d7832bc81583ca3cf2f5f229ddd1fdde8c54f0e1201127a4e6941974b410f0127b2
@@ -2,6 +2,10 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [0.12.0]
6
+
7
+ - Honeypot input with autocomplete="off" by default (#42)
8
+
5
9
  ## [0.11.0]
6
10
 
7
11
  - Improve logging (#40, #41)
@@ -88,6 +92,7 @@ All notable changes to this project will be documented in this file.
88
92
 
89
93
  - First version of controller filters
90
94
 
95
+ [0.12.0]: https://github.com/markets/invisible_captcha/compare/v0.11.0...v0.12.0
91
96
  [0.11.0]: https://github.com/markets/invisible_captcha/compare/v0.10.0...v0.11.0
92
97
  [0.10.0]: https://github.com/markets/invisible_captcha/compare/v0.9.3...v0.10.0
93
98
  [0.9.3]: https://github.com/markets/invisible_captcha/compare/v0.9.2...v0.9.3
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Invisible Captcha
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/invisible_captcha.svg)](http://badge.fury.io/rb/invisible_captcha) [![Build Status](https://travis-ci.org/markets/invisible_captcha.svg)](https://travis-ci.org/markets/invisible_captcha)
3
+ [![Gem](https://img.shields.io/gem/v/invisible_captcha.svg?style=flat-square)](https://rubygems.org/gems/invisible_captcha)
4
+ [![Build Status](https://travis-ci.org/markets/invisible_captcha.svg)](https://travis-ci.org/markets/invisible_captcha)
4
5
 
5
6
  > Simple and flexible spam protection solution for Rails applications.
6
7
 
@@ -10,9 +11,9 @@ The main protection is a solution based on the `honeypot` principle, which provi
10
11
 
11
12
  Essentially, the strategy consists on adding an input field :honey_pot: into the form that:
12
13
 
13
- * shouldn't be visible by the real users
14
- * should be left empty by the real users
15
- * will most be filled by spam bots
14
+ - shouldn't be visible by the real users
15
+ - should be left empty by the real users
16
+ - will most be filled by spam bots
16
17
 
17
18
  It also comes with a time-sensitive :hourglass: form submission.
18
19
 
@@ -88,13 +89,13 @@ This section contains a description of all plugin options and customizations.
88
89
 
89
90
  You can customize:
90
91
 
91
- * `sentence_for_humans`: text for real users if input field was visible. By default, it uses I18n (see below).
92
- * `honeypots`: collection of default honeypots. Used by the view helper, called with no args, to generate a random honeypot field name. By default, a random collection is already generated.
93
- * `visual_honeypots`: make honeypots visible, also useful to test/debug your implementation.
94
- * `timestamp_threshold`: fastest time (in seconds) to expect a human to submit the form (see [original article by Yoav Aner](http://blog.gingerlime.com/2012/simple-detection-of-comment-spam-in-rails/) outlining the idea). By default, 4 seconds. **NOTE:** It's recommended to deactivate the autocomplete feature to avoid false positives (`autocomplete="off"`).
95
- * `timestamp_enabled`: option to disable the time threshold check at application level. Could be useful, for example, on some testing scenarios. By default, true.
96
- * `timestamp_error_message`: flash error message thrown when form submitted quicker than the `timestamp_threshold` value. It uses I18n by default.
97
- * `injectable_styles`: if enabled, you should call anywhere in your layout the following helper `<%= invisible_captcha_styles %>`. This allows you to inject styles, for example, in `<head>`. False by default, styles are injected inline with the honeypot.
92
+ - `sentence_for_humans`: text for real users if input field was visible. By default, it uses I18n (see below).
93
+ - `honeypots`: collection of default honeypots. Used by the view helper, called with no args, to generate a random honeypot field name. By default, a random collection is already generated.
94
+ - `visual_honeypots`: make honeypots visible, also useful to test/debug your implementation.
95
+ - `timestamp_threshold`: fastest time (in seconds) to expect a human to submit the form (see [original article by Yoav Aner](https://blog.gingerlime.com/2012/simple-detection-of-comment-spam-in-rails/) outlining the idea). By default, 4 seconds. **NOTE:** It's recommended to deactivate the autocomplete feature to avoid false positives (`autocomplete="off"`).
96
+ - `timestamp_enabled`: option to disable the time threshold check at application level. Could be useful, for example, on some testing scenarios. By default, true.
97
+ - `timestamp_error_message`: flash error message thrown when form submitted quicker than the `timestamp_threshold` value. It uses I18n by default.
98
+ - `injectable_styles`: if enabled, you should call anywhere in your layout the following helper `<%= invisible_captcha_styles %>`. This allows you to inject styles, for example, in `<head>`. False by default, styles are injected inline with the honeypot.
98
99
 
99
100
  To change these defaults, add the following to an initializer (recommended `config/initializers/invisible_captcha.rb`):
100
101
 
@@ -116,24 +117,31 @@ end
116
117
 
117
118
  The `invisible_captcha` method accepts some options:
118
119
 
119
- * `only`: apply to given controller actions.
120
- * `except`: exclude to given controller actions.
121
- * `honeypot`: name of custom honeypot.
122
- * `scope`: name of scope, ie: 'topic[subtitle]' -> 'topic' is the scope.
123
- * `on_spam`: custom callback to be called on spam detection.
124
- * `timestamp_enabled`: enable/disable this technique at action level.
125
- * `on_timestamp_spam`: custom callback to be called when form submitted too quickly. The default action redirects to `:back` printing a warning in `flash[:error]`.
126
- * `timestamp_threshold`: custom threshold per controller/action. Overrides the global value for `InvisibleCaptcha.timestamp_threshold`.
120
+ - `only`: apply to given controller actions.
121
+ - `except`: exclude to given controller actions.
122
+ - `honeypot`: name of custom honeypot.
123
+ - `scope`: name of scope, ie: 'topic[subtitle]' -> 'topic' is the scope.
124
+ - `on_spam`: custom callback to be called on spam detection.
125
+ - `timestamp_enabled`: enable/disable this technique at action level.
126
+ - `on_timestamp_spam`: custom callback to be called when form submitted too quickly. The default action redirects to `:back` printing a warning in `flash[:error]`.
127
+ - `timestamp_threshold`: custom threshold per controller/action. Overrides the global value for `InvisibleCaptcha.timestamp_threshold`.
127
128
 
128
129
  ### View helpers options:
129
130
 
130
- Using the view/form helper you can override some defaults for the given instance. Actually, it allows to change: `sentence_for_humans` and `visual_honeypots`.
131
+ Using the view/form helper you can override some defaults for the given instance. Actually, it allows to change:
132
+
133
+ - `sentence_for_humans`
131
134
 
132
135
  ```erb
133
136
  <%= form_for(@topic) do |f| %>
134
- <%= f.invisible_captcha :subtitle, visual_honeypots: true, sentence_for_humans: "hey! leave this input empty!" %>
135
- <!-- or -->
136
- <%= invisible_captcha visual_honeypots: true, sentence_for_humans: "hey! leave this input empty!" %>
137
+ <%= f.invisible_captcha :subtitle, sentence_for_humans: "hey! leave this input empty!" %>
138
+ <% end %>
139
+ ```
140
+ - `visual_honeypots`
141
+
142
+ ```erb
143
+ <%= form_for(@topic) do |f| %>
144
+ <%= f.invisible_captcha :subtitle, visual_honeypots: true %>
137
145
  <% end %>
138
146
  ```
139
147
 
@@ -1,3 +1,3 @@
1
1
  module InvisibleCaptcha
2
- VERSION = "0.11.0"
2
+ VERSION = "0.12.0"
3
3
  end
@@ -41,7 +41,7 @@ module InvisibleCaptcha
41
41
  content_tag(:div, class: css_class) do
42
42
  concat styles unless InvisibleCaptcha.injectable_styles
43
43
  concat label_tag(build_label_name(honeypot, scope), label)
44
- concat text_field_tag(build_text_field_name(honeypot, scope), nil, options.merge(tabindex: -1))
44
+ concat text_field_tag(build_input_name(honeypot, scope), nil, default_honeypot_options.merge(options))
45
45
  end
46
46
  end
47
47
 
@@ -67,12 +67,16 @@ module InvisibleCaptcha
67
67
  end
68
68
  end
69
69
 
70
- def build_text_field_name(honeypot, scope = nil)
70
+ def build_input_name(honeypot, scope = nil)
71
71
  if scope.present?
72
72
  "#{scope}[#{honeypot}]"
73
73
  else
74
74
  honeypot
75
75
  end
76
76
  end
77
+
78
+ def default_honeypot_options
79
+ { autocomplete: 'off', tabindex: -1 }
80
+ end
77
81
  end
78
82
  end
@@ -31,7 +31,7 @@ describe InvisibleCaptcha::ViewHelpers, type: :helper do
31
31
  it 'generated html + styles' do
32
32
  InvisibleCaptcha.honeypots = [:foo_id]
33
33
  output = invisible_captcha.gsub("\"", "'")
34
- regexp = %r{<div class='foo_id_\w*'><style.*>.foo_id_\w* {display:none;}</style><label.*>#{InvisibleCaptcha.sentence_for_humans}.*<input.*name='foo_id'.*tabindex='-1'.*</div>}
34
+ regexp = %r{<div class='foo_id_\w*'><style.*>.foo_id_\w* {display:none;}</style><label.*>#{InvisibleCaptcha.sentence_for_humans}</label><input (?=.*name='foo_id'.*)(?=.*autocomplete='off'.*)(?=.*tabindex='-1'.*).*/></div>}
35
35
 
36
36
  expect(output).to match(regexp)
37
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: invisible_captcha
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marc Anguera Insa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-12 00:00:00.000000000 Z
11
+ date: 2018-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails