recaptcha 5.17.1 → 5.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +6 -3
- data/lib/recaptcha/adapters/controller_methods.rb +22 -1
- data/lib/recaptcha/configuration.rb +5 -2
- data/lib/recaptcha/version.rb +1 -1
- data/lib/recaptcha.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61fa7316f287cfcec8e2b06d36481f1fa596d1b629810a784fae509c55255b2f
|
4
|
+
data.tar.gz: 7cf82254973204d7ac47b6bba428ff394e24c9ec5dbbb5669657b4c10b30c16b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 572402b7af72a67f76a1952cb7e5739a7cf4073ba0b510f55f8f74bc59a6e6116bad1be5ece41e20a43cb2d3c36c7ab2bca072b8a4c27b5a1db16d1007846284
|
7
|
+
data.tar.gz: 021a0fa67e25aee448c66c43ae5fd3295d1472329bccdcfe4a5acf2c6fe90fd83c9cdcf8963db29816919fb6383d49c8303d41032e1af8abde3dcafbdeacc36a
|
data/CHANGELOG.md
CHANGED
@@ -1,9 +1,17 @@
|
|
1
1
|
## Next
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
## 5.19.0
|
6
|
+
* require a minimum lenght of 100 for responses, configured via response_minimum
|
7
|
+
|
8
|
+
## 5.18.0
|
2
9
|
* Add key setup to v3 example in README
|
3
10
|
* Remove unnecessary id from textarea - This was unused and may cause accessability concerns if there is more than one recaptcha on the page due to multiple elements with the same id
|
4
11
|
* Update to latest version of rubocop
|
5
12
|
* Drop support for Ruby 2.7; add Ruby 3.3
|
6
13
|
* Add i18n: de, es, it, pt, pt-BR
|
14
|
+
* Added recaptcha_failure_reason
|
7
15
|
|
8
16
|
## 5.16.0
|
9
17
|
* Allow usage of `options[:turbo]` as well as `options[:turbolinks]` for `recaptcha_v3`
|
data/README.md
CHANGED
@@ -78,9 +78,9 @@ export RECAPTCHA_ENTERPRISE_API_KEY = 'AIzvFyE3TU-g4K_Kozr9F1smEzZSGBVOfLKyup
|
|
78
78
|
export RECAPTCHA_ENTERPRISE_PROJECT_ID = 'my-project'
|
79
79
|
```
|
80
80
|
|
81
|
-
_note:_ you'll still have to provide `RECAPTCHA_SITE_KEY`, which will hold the value of your enterprise recaptcha key id. You will not need to provide a `RECAPTCHA_SECRET_KEY`, however.
|
81
|
+
_note:_ you'll still have to provide `RECAPTCHA_SITE_KEY`, which will hold the value of your enterprise recaptcha key id. You will not need to provide a `RECAPTCHA_SECRET_KEY`, however.
|
82
82
|
|
83
|
-
`RECAPTCHA_ENTERPRISE_API_KEY` is the enterprise key of your Google Cloud Project, which you can generate here: https://console.cloud.google.com/apis/credentials.
|
83
|
+
`RECAPTCHA_ENTERPRISE_API_KEY` is the enterprise key of your Google Cloud Project, which you can generate here: https://console.cloud.google.com/apis/credentials.
|
84
84
|
|
85
85
|
Add `recaptcha_tags` to the forms you want to protect:
|
86
86
|
|
@@ -488,7 +488,7 @@ are passed as a hash under `params['g-recaptcha-response-data']` with the action
|
|
488
488
|
It is recommended to pass `external_script: false` on all but one of the calls to
|
489
489
|
`recaptcha` since you only need to include the script tag once for a given `site_key`.
|
490
490
|
|
491
|
-
## `recaptcha_reply`
|
491
|
+
## `recaptcha_reply` and `recaptcha_failure_reason`
|
492
492
|
|
493
493
|
After `verify_recaptcha` has been called, you can call `recaptcha_reply` to get the raw reply from recaptcha. This can allow you to get the exact score returned by recaptcha should you need it.
|
494
494
|
|
@@ -504,6 +504,8 @@ end
|
|
504
504
|
|
505
505
|
`recaptcha_reply` will return `nil` if the the reply was not yet fetched.
|
506
506
|
|
507
|
+
`recaptcha_failure_reason` will return information if verification failed. E.g. if params was wrong or api resulted some error-codes.
|
508
|
+
|
507
509
|
## I18n support
|
508
510
|
|
509
511
|
reCAPTCHA supports the I18n gem (it comes with English translations)
|
@@ -587,6 +589,7 @@ Recaptcha.configure do |config|
|
|
587
589
|
config.verify_url = 'https://hcaptcha.com/siteverify'
|
588
590
|
config.api_server_url = 'https://hcaptcha.com/1/api.js'
|
589
591
|
config.response_limit = 100000
|
592
|
+
config.response_minimum = 100
|
590
593
|
end
|
591
594
|
```
|
592
595
|
|
@@ -17,6 +17,11 @@ module Recaptcha
|
|
17
17
|
|
18
18
|
begin
|
19
19
|
verified = if Recaptcha.invalid_response?(recaptcha_response)
|
20
|
+
@_recaptcha_failure_reason = if recaptcha_response.nil?
|
21
|
+
"No recaptcha response/param(:action) found."
|
22
|
+
else
|
23
|
+
"Recaptcha response/param(:action) was invalid."
|
24
|
+
end
|
20
25
|
false
|
21
26
|
else
|
22
27
|
unless options[:skip_remote_ip]
|
@@ -26,10 +31,21 @@ module Recaptcha
|
|
26
31
|
|
27
32
|
success, @_recaptcha_reply =
|
28
33
|
Recaptcha.verify_via_api_call(recaptcha_response, options.merge(with_reply: true))
|
34
|
+
unless success
|
35
|
+
@_recaptcha_failure_reason = if @_recaptcha_reply["score"] &&
|
36
|
+
@_recaptcha_reply["score"].to_f < options[:minimum_score].to_f
|
37
|
+
"Recaptcha score didn't exceed the minimum: #{@_recaptcha_reply["score"]} < #{options[:minimum_score]}."
|
38
|
+
elsif @_recaptcha_reply['error-codes']
|
39
|
+
"Recaptcha api call returned with error-codes: #{@_recaptcha_reply['error-codes']}."
|
40
|
+
else
|
41
|
+
"Recaptcha failure after api call. Api reply: #{@_recaptcha_reply}."
|
42
|
+
end
|
43
|
+
end
|
29
44
|
success
|
30
45
|
end
|
31
46
|
|
32
47
|
if verified
|
48
|
+
@_recaptcha_failure_reason = nil
|
33
49
|
flash.delete(:recaptcha_error) if recaptcha_flash_supported? && !model
|
34
50
|
true
|
35
51
|
else
|
@@ -41,6 +57,7 @@ module Recaptcha
|
|
41
57
|
false
|
42
58
|
end
|
43
59
|
rescue Timeout::Error
|
60
|
+
@_recaptcha_failure_reason = "Recaptcha server unreachable."
|
44
61
|
if Recaptcha.configuration.handle_timeouts_gracefully
|
45
62
|
recaptcha_error(
|
46
63
|
model,
|
@@ -57,13 +74,17 @@ module Recaptcha
|
|
57
74
|
end
|
58
75
|
|
59
76
|
def verify_recaptcha!(options = {})
|
60
|
-
verify_recaptcha(options) || raise(VerifyError)
|
77
|
+
verify_recaptcha(options) || raise(VerifyError, @_recaptcha_failure_reason)
|
61
78
|
end
|
62
79
|
|
63
80
|
def recaptcha_reply
|
64
81
|
@_recaptcha_reply if defined?(@_recaptcha_reply)
|
65
82
|
end
|
66
83
|
|
84
|
+
def recaptcha_failure_reason
|
85
|
+
@_recaptcha_failure_reason
|
86
|
+
end
|
87
|
+
|
67
88
|
def recaptcha_error(model, attribute, message)
|
68
89
|
if model
|
69
90
|
model.errors.add(attribute, message)
|
@@ -37,8 +37,10 @@ module Recaptcha
|
|
37
37
|
'enterprise_verify_url' => 'https://recaptchaenterprise.googleapis.com/v1/projects'
|
38
38
|
}.freeze
|
39
39
|
|
40
|
-
attr_accessor
|
41
|
-
|
40
|
+
attr_accessor(
|
41
|
+
:default_env, :skip_verify_env, :proxy, :secret_key, :site_key, :handle_timeouts_gracefully,
|
42
|
+
:hostname, :enterprise, :enterprise_api_key, :enterprise_project_id, :response_limit, :response_minimum
|
43
|
+
)
|
42
44
|
attr_writer :api_server_url, :verify_url
|
43
45
|
|
44
46
|
def initialize # :nodoc:
|
@@ -57,6 +59,7 @@ module Recaptcha
|
|
57
59
|
@api_server_url = nil
|
58
60
|
|
59
61
|
@response_limit = 4000
|
62
|
+
@response_minimum = 100
|
60
63
|
end
|
61
64
|
|
62
65
|
def secret_key!
|
data/lib/recaptcha/version.rb
CHANGED
data/lib/recaptcha.rb
CHANGED
@@ -55,7 +55,7 @@ module Recaptcha
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def self.invalid_response?(resp)
|
58
|
-
resp.empty? || resp.length > configuration.response_limit
|
58
|
+
resp.empty? || resp.length > configuration.response_limit || resp.length < configuration.response_minimum
|
59
59
|
end
|
60
60
|
|
61
61
|
def self.verify_via_api_call(response, options)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: recaptcha
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.19.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason L Perry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mocha
|