invisible_captcha 0.12.0 → 0.12.1
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 +5 -5
- data/.rspec +3 -0
- data/.travis.yml +21 -6
- data/Appraisals +5 -1
- data/CHANGELOG.md +6 -0
- data/README.md +22 -8
- data/gemfiles/rails_3.2.gemfile +1 -1
- data/gemfiles/rails_4.2.gemfile +2 -2
- data/gemfiles/rails_5.0.gemfile +1 -1
- data/gemfiles/rails_5.1.gemfile +1 -1
- data/gemfiles/rails_5.2.gemfile +1 -1
- data/gemfiles/rails_6.0.gemfile +7 -0
- data/lib/invisible_captcha/controller_ext.rb +6 -0
- data/lib/invisible_captcha/version.rb +1 -1
- data/spec/controllers_spec.rb +12 -4
- data/spec/invisible_captcha_spec.rb +1 -3
- data/spec/spec_helper.rb +17 -1
- data/spec/view_helpers_spec.rb +1 -3
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f0904f2d5218d84ee62e3328259b217c7a3772497c8ecf47ed94a34b4bc083f8
|
4
|
+
data.tar.gz: a2e806057b7cbe29927bbb705e342426b666cbc5c6bc823fe97434d912b322cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f0ac495f41f5937859077d758e88884e369aa534d97b595fd4dc560923ce8cb9deb31bd3c487f33d04c82878eeed9ada45508b511e8ff77320d762979f0ea7d
|
7
|
+
data.tar.gz: 953bfa53bf999143d76c45f785e11e80e8fbd44a20fc0182c6d87e009ece31610f9b699049e01e01b6fcfeb887de968a656f1dd437973a5d54e8d43cc6c170bb
|
data/.rspec
ADDED
data/.travis.yml
CHANGED
@@ -3,23 +3,38 @@ cache: bundler
|
|
3
3
|
sudo: false
|
4
4
|
rvm:
|
5
5
|
- ruby-head
|
6
|
-
- 2.
|
7
|
-
- 2.
|
8
|
-
- 2.
|
9
|
-
- 2.
|
6
|
+
- 2.6.2
|
7
|
+
- 2.5.5
|
8
|
+
- 2.4.5
|
9
|
+
- 2.3.8
|
10
|
+
- 2.2.10
|
10
11
|
gemfile:
|
12
|
+
- gemfiles/rails_6.0.gemfile
|
11
13
|
- gemfiles/rails_5.2.gemfile
|
12
14
|
- gemfiles/rails_5.1.gemfile
|
13
15
|
- gemfiles/rails_5.0.gemfile
|
14
16
|
- gemfiles/rails_4.2.gemfile
|
15
17
|
- gemfiles/rails_3.2.gemfile
|
18
|
+
before_install:
|
19
|
+
# Rails 4.x requires Bundler version < 2.0.
|
20
|
+
- "find /home/travis/.rvm/rubies -wholename '*default/bundler-*.gemspec' -delete"
|
21
|
+
- rvm @global do gem uninstall bundler -a -x
|
22
|
+
- rvm @global do yes | gem install bundler -v '< 2'
|
16
23
|
matrix:
|
17
24
|
exclude:
|
25
|
+
- rvm: 2.4.5
|
26
|
+
gemfile: gemfiles/rails_6.0.gemfile
|
27
|
+
- rvm: 2.3.8
|
28
|
+
gemfile: gemfiles/rails_6.0.gemfile
|
29
|
+
- rvm: 2.2.10
|
30
|
+
gemfile: gemfiles/rails_6.0.gemfile
|
18
31
|
- rvm: ruby-head
|
19
32
|
gemfile: gemfiles/rails_3.2.gemfile
|
20
|
-
- rvm: 2.
|
33
|
+
- rvm: 2.6.2
|
21
34
|
gemfile: gemfiles/rails_3.2.gemfile
|
22
|
-
- rvm: 2.
|
35
|
+
- rvm: 2.5.5
|
36
|
+
gemfile: gemfiles/rails_3.2.gemfile
|
37
|
+
- rvm: 2.4.5
|
23
38
|
gemfile: gemfiles/rails_3.2.gemfile
|
24
39
|
allow_failures:
|
25
40
|
- rvm: ruby-head
|
data/Appraisals
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
appraise "rails-6.0" do
|
2
|
+
gem "rails", "6.0.0.rc1"
|
3
|
+
end
|
4
|
+
|
1
5
|
appraise "rails-5.2" do
|
2
6
|
gem "rails", "~> 5.2.0"
|
3
7
|
end
|
@@ -11,7 +15,7 @@ appraise "rails-5.0" do
|
|
11
15
|
end
|
12
16
|
|
13
17
|
appraise "rails-4.2" do
|
14
|
-
gem "rails",
|
18
|
+
gem "rails", "~> 4.2.0"
|
15
19
|
end
|
16
20
|
|
17
21
|
appraise "rails-3.2" do
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,11 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
|
5
|
+
## [0.12.1]
|
6
|
+
|
7
|
+
- Clear timestamp stored in `session[:invisible_captcha_timestamp]` (#50)
|
8
|
+
- Rails 6 support
|
9
|
+
|
5
10
|
## [0.12.0]
|
6
11
|
|
7
12
|
- Honeypot input with autocomplete="off" by default (#42)
|
@@ -92,6 +97,7 @@ All notable changes to this project will be documented in this file.
|
|
92
97
|
|
93
98
|
- First version of controller filters
|
94
99
|
|
100
|
+
[0.12.1]: https://github.com/markets/invisible_captcha/compare/v0.12.0...v0.12.1
|
95
101
|
[0.12.0]: https://github.com/markets/invisible_captcha/compare/v0.11.0...v0.12.0
|
96
102
|
[0.11.0]: https://github.com/markets/invisible_captcha/compare/v0.10.0...v0.11.0
|
97
103
|
[0.10.0]: https://github.com/markets/invisible_captcha/compare/v0.9.3...v0.10.0
|
data/README.md
CHANGED
@@ -21,18 +21,12 @@ It also comes with a time-sensitive :hourglass: form submission.
|
|
21
21
|
|
22
22
|
Invisible Captcha is tested against Rails `>= 3.2` and Ruby `>= 2.2`.
|
23
23
|
|
24
|
-
Add this line to
|
24
|
+
Add this line to your Gemfile and then execute `bundle install`:
|
25
25
|
|
26
|
-
```
|
26
|
+
```ruby
|
27
27
|
gem 'invisible_captcha'
|
28
28
|
```
|
29
29
|
|
30
|
-
Or install the gem manually:
|
31
|
-
|
32
|
-
```
|
33
|
-
$ gem install invisible_captcha
|
34
|
-
```
|
35
|
-
|
36
30
|
## Usage
|
37
31
|
|
38
32
|
View code:
|
@@ -166,6 +160,26 @@ You can override the english ones in your own i18n config files as well as add n
|
|
166
160
|
|
167
161
|
If you intend to use I18n with `invisible_captcha`, you _must not_ set `sentence_for_humans` or `timestamp_error_message` to strings in the setup phase.
|
168
162
|
|
163
|
+
## Testing your controllers
|
164
|
+
|
165
|
+
If you're encountering unexpected behaviour while testing controllers that use the `invisible_captcha` action filter, you may want to disable timestamp check for the test environment:
|
166
|
+
|
167
|
+
```ruby
|
168
|
+
# test/test_helper.rb, spec/rails_helper.rb, ...
|
169
|
+
InvisibleCaptcha.timestamp_enabled = false
|
170
|
+
```
|
171
|
+
|
172
|
+
Another option is to wait for the timestamp check to be valid:
|
173
|
+
|
174
|
+
```ruby
|
175
|
+
# Maybe in a before block
|
176
|
+
InvisibleCaptcha.init!
|
177
|
+
InvisibleCaptcha.timestamp_threshold = 1
|
178
|
+
|
179
|
+
# Before testing your controller action
|
180
|
+
sleep InvisibleCaptcha.timestamp_threshold
|
181
|
+
```
|
182
|
+
|
169
183
|
## Contribute
|
170
184
|
|
171
185
|
Any kind of idea, feedback or bug report are welcome! Open an [issue](https://github.com/markets/invisible_captcha/issues) or send a [pull request](https://github.com/markets/invisible_captcha/pulls).
|
data/gemfiles/rails_3.2.gemfile
CHANGED
data/gemfiles/rails_4.2.gemfile
CHANGED
data/gemfiles/rails_5.0.gemfile
CHANGED
data/gemfiles/rails_5.1.gemfile
CHANGED
data/gemfiles/rails_5.2.gemfile
CHANGED
@@ -22,6 +22,8 @@ module InvisibleCaptcha
|
|
22
22
|
elsif honeypot_spam?(options)
|
23
23
|
on_spam(options)
|
24
24
|
end
|
25
|
+
|
26
|
+
clear_session
|
25
27
|
end
|
26
28
|
|
27
29
|
def on_timestamp_spam(options = {})
|
@@ -73,6 +75,10 @@ module InvisibleCaptcha
|
|
73
75
|
false
|
74
76
|
end
|
75
77
|
|
78
|
+
def clear_session
|
79
|
+
session.delete(:invisible_captcha_timestamp) if session[:invisible_captcha_timestamp]
|
80
|
+
end
|
81
|
+
|
76
82
|
def honeypot_spam?(options = {})
|
77
83
|
honeypot = options[:honeypot]
|
78
84
|
scope = options[:scope] || controller_name.singularize
|
data/spec/controllers_spec.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
describe InvisibleCaptcha::ControllerExt, type: :controller do
|
1
|
+
RSpec.describe InvisibleCaptcha::ControllerExt, type: :controller do
|
4
2
|
render_views
|
5
3
|
|
6
4
|
def switchable_post(action, params = {})
|
@@ -60,6 +58,9 @@ describe InvisibleCaptcha::ControllerExt, type: :controller do
|
|
60
58
|
|
61
59
|
expect(response).to redirect_to 'http://test.host/topics'
|
62
60
|
expect(flash[:error]).to eq(InvisibleCaptcha.timestamp_error_message)
|
61
|
+
|
62
|
+
# Make sure session is cleared
|
63
|
+
expect(session[:invisible_captcha_timestamp]).to be_nil
|
63
64
|
end
|
64
65
|
|
65
66
|
it 'allow a custom on_timestamp_spam callback' do
|
@@ -72,10 +73,17 @@ describe InvisibleCaptcha::ControllerExt, type: :controller do
|
|
72
73
|
it 'passes if submission on or after timestamp_threshold' do
|
73
74
|
sleep InvisibleCaptcha.timestamp_threshold
|
74
75
|
|
75
|
-
switchable_post :create, topic: {
|
76
|
+
switchable_post :create, topic: {
|
77
|
+
title: 'foobar',
|
78
|
+
author: 'author',
|
79
|
+
body: 'body that passes validation'
|
80
|
+
}
|
76
81
|
|
77
82
|
expect(flash[:error]).not_to be_present
|
78
83
|
expect(response.body).to be_present
|
84
|
+
|
85
|
+
# Make sure session is cleared
|
86
|
+
expect(session[:invisible_captcha_timestamp]).to be_nil
|
79
87
|
end
|
80
88
|
|
81
89
|
it 'allow to set a custom timestamp_threshold per action' do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,12 +1,28 @@
|
|
1
1
|
ENV['RAILS_ENV'] = 'test'
|
2
|
+
|
2
3
|
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
3
4
|
require 'rspec/rails'
|
4
5
|
require 'invisible_captcha'
|
5
6
|
|
6
7
|
RSpec.configure do |config|
|
7
|
-
config.
|
8
|
+
config.disable_monkey_patching!
|
9
|
+
config.order = :random
|
8
10
|
config.expect_with :rspec
|
9
11
|
config.mock_with :rspec do |mocks|
|
10
12
|
mocks.verify_partial_doubles = true
|
11
13
|
end
|
12
14
|
end
|
15
|
+
|
16
|
+
# Rails 4.2 call `initialize` inside `recycle!`. However Ruby 2.6 doesn't allow calling `initialize` twice.
|
17
|
+
# More info: https://github.com/rails/rails/issues/34790
|
18
|
+
if RUBY_VERSION >= "2.6.0" && Rails.version < "5"
|
19
|
+
module ActionController
|
20
|
+
class TestResponse < ActionDispatch::TestResponse
|
21
|
+
def recycle!
|
22
|
+
@mon_mutex_owner_object_id = nil
|
23
|
+
@mon_mutex = nil
|
24
|
+
initialize
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/spec/view_helpers_spec.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
describe InvisibleCaptcha::ViewHelpers, type: :helper do
|
1
|
+
RSpec.describe InvisibleCaptcha::ViewHelpers, type: :helper do
|
4
2
|
before(:each) do
|
5
3
|
allow(Time.zone).to receive(:now).and_return(Time.zone.parse('Feb 19 1986'))
|
6
4
|
allow(InvisibleCaptcha).to receive(:css_strategy).and_return("display:none;")
|
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.12.
|
4
|
+
version: 0.12.1
|
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:
|
11
|
+
date: 2019-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -89,6 +89,7 @@ extensions: []
|
|
89
89
|
extra_rdoc_files: []
|
90
90
|
files:
|
91
91
|
- ".gitignore"
|
92
|
+
- ".rspec"
|
92
93
|
- ".travis.yml"
|
93
94
|
- Appraisals
|
94
95
|
- CHANGELOG.md
|
@@ -101,6 +102,7 @@ files:
|
|
101
102
|
- gemfiles/rails_5.0.gemfile
|
102
103
|
- gemfiles/rails_5.1.gemfile
|
103
104
|
- gemfiles/rails_5.2.gemfile
|
105
|
+
- gemfiles/rails_6.0.gemfile
|
104
106
|
- invisible_captcha.gemspec
|
105
107
|
- lib/invisible_captcha.rb
|
106
108
|
- lib/invisible_captcha/controller_ext.rb
|
@@ -170,8 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
170
172
|
- !ruby/object:Gem::Version
|
171
173
|
version: '0'
|
172
174
|
requirements: []
|
173
|
-
|
174
|
-
rubygems_version: 2.6.13
|
175
|
+
rubygems_version: 3.0.3
|
175
176
|
signing_key:
|
176
177
|
specification_version: 4
|
177
178
|
summary: Simple honeypot protection for RoR apps
|