recaptcha 5.17.1 → 5.18.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0cd4e9e48bb155611d906ffd22546fc3e25feb07db13ed55a7c3209b53249cd4
4
- data.tar.gz: 9417568b47cb0db8d1b8a87b6de59e9df9043c948acc662824e22b16c25bf3f5
3
+ metadata.gz: 41990aba0d4786ebf87da392ac025d8725d5ca5f30c9e1018b0cf2197f8efada
4
+ data.tar.gz: 34b8d6b1dc5e34d9349c64f3a2d2c77f0cc67b2570077788e9e128d2a855a927
5
5
  SHA512:
6
- metadata.gz: 2c3a5765b93cc36d87a91249a880a7d81f5a7c864295572e378f0f6c7e21624250f297b9ce139fa68f019e6ddb390f62f8c1615f8a69a8aacf8aae3587e2f0b6
7
- data.tar.gz: 863775382a5b6c8f767ca09af046e94abbe697eb25201087c5ceb2a37e16a57c1ad56d2f8ae00f3bd79d0d686b656dd9eece95fc46b8c5d9a22403026da282f5
6
+ metadata.gz: b3d440a27b41351c81ca9ad94368ea5485d1a1bed05092c011bbfe358cb8c829e89bc295a52a0e323333fc1a3135384149bd3ec13f0cd4c6a8fcc09184a3d4d4
7
+ data.tar.gz: f176ce1beb9764f342dedc8c36cbc40b248ae230c758f2df3053c891c5616b4898e435fde8251da03ff5e690b535bef64bdc7e2257aadc8755f7f0e4efbddbfd
data/CHANGELOG.md CHANGED
@@ -4,6 +4,7 @@
4
4
  * Update to latest version of rubocop
5
5
  * Drop support for Ruby 2.7; add Ruby 3.3
6
6
  * Add i18n: de, es, it, pt, pt-BR
7
+ * Added recaptcha_failure_reason
7
8
 
8
9
  ## 5.16.0
9
10
  * 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)
@@ -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)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Recaptcha
4
- VERSION = '5.17.1'
4
+ VERSION = '5.18.0'
5
5
  end
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.17.1
4
+ version: 5.18.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: 2024-11-27 00:00:00.000000000 Z
11
+ date: 2024-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mocha