defra_ruby_govpay 0.2.6 → 0.2.7

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
  SHA256:
3
- metadata.gz: 0c82aff9dd09e95432ad62c5aedb6b4a2d8d4e9e42d9f17bac37ac7cbebbc90f
4
- data.tar.gz: e859b6ca00740c0112aa80c117b3584dc2ae64f3be8aceb5fdc8cc055a2bdf59
3
+ metadata.gz: ac3b7ed597157e1d8efcb4a6220096407bfec1a87c570cb6f53026a324343feb
4
+ data.tar.gz: 2f5f8324e47f696598d464fdd9fb3fd32bf19fa0584e7abde98b06d7b6c91792
5
5
  SHA512:
6
- metadata.gz: 62772d1e4dd940a2faa216a9c53d9e1c3fbbe1a36e04bfc7faa9af5969550c2a9ad1c5b3e8ca75d47052b3689a76618cd653d78d357f3d8c4c2409f17fbc3e3d
7
- data.tar.gz: 1134a7ff08a8445cca67f50330f022a75e4e51fa08b13c0ef4e1c499659f9c88acf93397c1a1e5b963db4e953c8fd16f65456819a2c50257dc1ce260d5d30ad9
6
+ metadata.gz: ca9a4fb2f38cd10a18c5e5f0050dcde5fe9a9dae65b91257811853a3f1e3ad99a01be66341395fd466d93e376d5620f3618a9da448b819bb683988521cb398c8
7
+ data.tar.gz: cfb05cb7e6e85a5de86be4a0f093ba644b73d2462021e36372b82e5aad5299c873f74ec10ebdb6dd16a0d368fd6e04220b3feb96002c543bae3dba10ac0aed6a
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- defra_ruby_govpay (0.2.5)
4
+ defra_ruby_govpay (0.2.6)
5
5
  rest-client (~> 2.1)
6
6
 
7
7
  GEM
@@ -5,6 +5,7 @@ module DefraRubyGovpay
5
5
  # for the DefraRubyGovpay module. You can set different options like
6
6
  # API tokens, host preferences, and other necessary configurations here.
7
7
  class Configuration
8
- attr_accessor :govpay_url, :govpay_front_office_api_token, :govpay_back_office_api_token, :logger
8
+ attr_accessor :govpay_url, :govpay_front_office_api_token, :govpay_back_office_api_token, :logger,
9
+ :front_office_webhook_signing_secret, :back_office_webhook_signing_secret
9
10
  end
10
11
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DefraRubyGovpay
4
+ class GovpayWebhookSignatureService
5
+ class DigestFailure < StandardError; end
6
+
7
+ def self.run(body:)
8
+ new.run(body: body)
9
+ end
10
+
11
+ def run(body:)
12
+ generate_signatures(body.to_s)
13
+ rescue StandardError => e
14
+ DefraRubyGovpay.logger.error "Govpay payment webhook signature generation failed: #{e}"
15
+ raise DigestFailure, e
16
+ end
17
+
18
+ private
19
+
20
+ def generate_signatures(body)
21
+ {
22
+ front_office: hmac_digest(body, front_office_secret),
23
+ back_office: hmac_digest(body, back_office_secret)
24
+ }
25
+ end
26
+
27
+ def front_office_secret
28
+ DefraRubyGovpay.configuration.front_office_webhook_signing_secret
29
+ end
30
+
31
+ def back_office_secret
32
+ DefraRubyGovpay.configuration.back_office_webhook_signing_secret
33
+ end
34
+
35
+ def hmac_digest(body, secret)
36
+ digest = OpenSSL::Digest.new("sha256")
37
+ OpenSSL::HMAC.hexdigest(digest, secret, body)
38
+ end
39
+ end
40
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DefraRubyGovpay
4
- VERSION = "0.2.6"
4
+ VERSION = "0.2.7"
5
5
  end
@@ -9,11 +9,11 @@ require_relative "defra_ruby_govpay/payment"
9
9
  require_relative "defra_ruby_govpay/refund"
10
10
  require_relative "defra_ruby_govpay/error"
11
11
  require_relative "defra_ruby_govpay/api"
12
- require_relative "defra_ruby_govpay/callback_validator"
13
12
  require_relative "defra_ruby_govpay/services/govpay_webhook_base_service"
14
13
  require_relative "defra_ruby_govpay/services/govpay_webhook_payment_service"
15
14
  require_relative "defra_ruby_govpay/services/govpay_webhook_refund_service"
16
15
  require_relative "defra_ruby_govpay/services/govpay_webhook_sanitizer_service"
16
+ require_relative "defra_ruby_govpay/services/govpay_webhook_signature_service"
17
17
 
18
18
  # The DefraRubyGovpay module facilitates integration with Govpay services.
19
19
  # It provides a convenient and configurable way to interact with Govpay APIs in Defra's ruby applications.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: defra_ruby_govpay
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jerome Pratt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-23 00:00:00.000000000 Z
11
+ date: 2025-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -48,7 +48,6 @@ files:
48
48
  - defra_ruby_govpay.gemspec
49
49
  - lib/defra_ruby_govpay.rb
50
50
  - lib/defra_ruby_govpay/api.rb
51
- - lib/defra_ruby_govpay/callback_validator.rb
52
51
  - lib/defra_ruby_govpay/configuration.rb
53
52
  - lib/defra_ruby_govpay/error.rb
54
53
  - lib/defra_ruby_govpay/object.rb
@@ -58,6 +57,7 @@ files:
58
57
  - lib/defra_ruby_govpay/services/govpay_webhook_payment_service.rb
59
58
  - lib/defra_ruby_govpay/services/govpay_webhook_refund_service.rb
60
59
  - lib/defra_ruby_govpay/services/govpay_webhook_sanitizer_service.rb
60
+ - lib/defra_ruby_govpay/services/govpay_webhook_signature_service.rb
61
61
  - lib/defra_ruby_govpay/version.rb
62
62
  - sig/defra_ruby_govpay.rbs
63
63
  homepage: https://github.com/DEFRA/defra-ruby-govpay
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "openssl"
4
-
5
- module DefraRubyGovpay
6
- class CallbackValidator
7
- def self.call(request_body, signing_secret, pay_signature_header)
8
- new(request_body, signing_secret, pay_signature_header).call
9
- end
10
-
11
- attr_reader :request_body, :signing_secret, :pay_signature_header
12
-
13
- def initialize(request_body, signing_secret, pay_signature_header)
14
- @request_body = request_body
15
- @signing_secret = signing_secret
16
- @pay_signature_header = pay_signature_header
17
- end
18
-
19
- def call
20
- hmac = OpenSSL::HMAC.hexdigest("sha256", signing_secret.encode("utf-8"), request_body.encode("utf-8"))
21
-
22
- hmac == pay_signature_header
23
- end
24
- end
25
- end