justifi 0.5.0 → 0.6.1

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: 3c34231d16ea73027351523d6309369021705f687926de6467fd4e81d1ff122f
4
- data.tar.gz: 8c0009bd8453cf885113b081c3527ce6f074c08b0ba7086ba82348d89f8ce09e
3
+ metadata.gz: bcd2d68a4fce4e0a644aa81c8c65e9e0a11bb31991583379b86b00d5db3f79e2
4
+ data.tar.gz: 5c7edcdb32022a4f56bbd3a688b496d376838dbce1b4528ccb6201e0e2eaddf1
5
5
  SHA512:
6
- metadata.gz: ce6dc69cbc087eaa57536791686380791ba816ef7acebad501ad5f6133567dd37c1475ef0ada32d666282f1d556dae668950fd3806297392b95e42703d6d1c61
7
- data.tar.gz: fff1e3c1f3d49da9dd15a248f43ee1f2330860a7ab0d492bdfd223f1ce80d77c1ea4088511bc577f7ca761c99aeaafd60377ee19bdcb9e97c71716cf2ca76d4c
6
+ metadata.gz: 150f2bb84c5fba3693dbf7d4c6889963809c00314e468845c3c6dbab3a9b2eec6b2b574fde0ab85821c62a9b519b116eddeafc65280dd0cf188e9941ff052bf5
7
+ data.tar.gz: e3612d77657510b4bcadaf8fbe6a316b642a9292f3048a5c7a4925b3d3852f9da8d3a14a58e0f04b1399f50b21ee5dd2d63b9dfd3c4bd62fb4c78b913e99ea7b
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- justifi (0.5.0)
4
+ justifi (0.6.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -22,7 +22,7 @@ GEM
22
22
  public_suffix (4.0.7)
23
23
  rainbow (3.1.1)
24
24
  rake (13.0.6)
25
- regexp_parser (2.3.0)
25
+ regexp_parser (2.4.0)
26
26
  repo-small-badge (0.2.7)
27
27
  victor (~> 0.2.8)
28
28
  rexml (3.2.5)
@@ -39,16 +39,16 @@ GEM
39
39
  diff-lcs (>= 1.2.0, < 2.0)
40
40
  rspec-support (~> 3.11.0)
41
41
  rspec-support (3.11.0)
42
- rubocop (1.27.0)
42
+ rubocop (1.29.1)
43
43
  parallel (~> 1.10)
44
44
  parser (>= 3.1.0.0)
45
45
  rainbow (>= 2.2.2, < 4.0)
46
46
  regexp_parser (>= 1.8, < 3.0)
47
- rexml
48
- rubocop-ast (>= 1.16.0, < 2.0)
47
+ rexml (>= 3.2.5, < 4.0)
48
+ rubocop-ast (>= 1.17.0, < 2.0)
49
49
  ruby-progressbar (~> 1.7)
50
50
  unicode-display_width (>= 1.4.0, < 3.0)
51
- rubocop-ast (1.17.0)
51
+ rubocop-ast (1.18.0)
52
52
  parser (>= 3.1.1.0)
53
53
  rubocop-performance (1.13.3)
54
54
  rubocop (>= 1.7.0, < 2.0)
@@ -63,8 +63,8 @@ GEM
63
63
  repo-small-badge (~> 0.2.7)
64
64
  simplecov (~> 0.17)
65
65
  simplecov_json_formatter (0.1.4)
66
- standard (1.10.0)
67
- rubocop (= 1.27.0)
66
+ standard (1.12.1)
67
+ rubocop (= 1.29.1)
68
68
  rubocop-performance (= 1.13.3)
69
69
  unicode-display_width (2.1.0)
70
70
  victor (0.2.8)
@@ -89,4 +89,4 @@ DEPENDENCIES
89
89
  webmock (>= 3.8.0)
90
90
 
91
91
  BUNDLED WITH
92
- 2.2.3
92
+ 2.2.15
data/README.md CHANGED
@@ -5,24 +5,15 @@ It includes a pre-defined set of modules and classes that are essentially wrappe
5
5
 
6
6
  ## Installation
7
7
 
8
- From the command line:
9
- ```bash
10
- gem install justifi --version "0.4.0" --source "https://rubygems.pkg.github.com/justifi-tech"
11
- ```
12
- OR
13
-
14
8
  Add these lines to your application's Gemfile:
15
9
 
16
10
  ```ruby
17
- source "https://rubygems.pkg.github.com/justifi-tech" do
18
- gem "justifi", "0.4.0"
19
- end
11
+ gem "justifi"
20
12
  ```
21
13
  And then execute:
22
14
 
23
15
  $ bundle install
24
16
 
25
-
26
17
  ## Setup
27
18
 
28
19
  The gem needs to be configured with your `client_id` and `client_secret` in order to access JustiFi API resources.
@@ -204,6 +195,20 @@ Justifi::PaymentIntent.create(params: payment_intent_params, seller_account_id:
204
195
  Any API resource using the `seller_account_id` variable will include the `Seller-Account` header and be
205
196
  processed as the seller account.
206
197
 
198
+ ## Webhook Signature Verification
199
+
200
+ Webhooks are secured by signature verification. An encrypted header is sent as a POST to your API endpoint (JUSTIFI-SIGNATURE),
201
+ which will need to be decrypted and verified with the signature secret provided.
202
+ You can use the JustiFi Ruby gem to validate the signature.
203
+
204
+ ```ruby
205
+ received_event = { id: "py_..." } # JustiFi webhook event
206
+ signature = "2463896d3cb..." # justifi-signature header
207
+ timestamp = "1651076887..." # justifi-timestamp header
208
+ secret_key = "sigk_2..." # secret key used for this webhook
209
+ Justifi::Webhook.verify_signature(received_event: received_event, timestamp: timestamp, secret_key: secret_key, signature: signature) # valid or not
210
+ ```
211
+
207
212
  ## Contributing
208
213
 
209
214
  ### Release a new version of the gem
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Justifi
4
+ module BalanceTransaction
5
+ class << self
6
+ def list(params: {}, headers: {}, seller_account_id: nil)
7
+ headers[:seller_account] = seller_account_id if seller_account_id
8
+ JustifiOperations.execute_get_request("/v1/balance_transactions", params, headers)
9
+ end
10
+
11
+ def get(id:, headers: {})
12
+ JustifiOperations.execute_get_request("/v1/balance_transactions/#{id}",
13
+ {},
14
+ headers)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -11,8 +11,8 @@ module Justifi
11
11
  headers: headers)
12
12
  end
13
13
 
14
- def create_refund(amount:, payment_id:, reason: nil, description: nil)
15
- refund_params = {amount: amount, description: description, reason: reason}
14
+ def create_refund(amount:, payment_id:, reason: nil, description: nil, metadata: nil)
15
+ refund_params = {amount: amount, description: description, reason: reason, metadata: metadata}
16
16
  JustifiOperations.idempotently_request("/v1/payments/#{payment_id}/refunds",
17
17
  method: :post,
18
18
  params: refund_params,
data/lib/justifi/util.rb CHANGED
@@ -78,5 +78,12 @@ module Justifi
78
78
  end
79
79
  result
80
80
  end
81
+
82
+ # Creates a computed signature that can verify the payload sent.
83
+ # Each webhook has its own signature key that can be achieved in JustiFi's platform
84
+ def self.compute_signature(received_event, timestamp, secret_key)
85
+ timestamp_payload = "#{timestamp}.#{received_event.to_json}"
86
+ OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), secret_key, timestamp_payload)
87
+ end
81
88
  end
82
89
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Justifi
4
- VERSION = "0.5.0"
4
+ VERSION = "0.6.1"
5
5
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Justifi
4
+ module Webhook
5
+ class << self
6
+ def verify_signature(received_event:, timestamp:, secret_key:, signature:)
7
+ signature == Util.compute_signature(received_event, timestamp, secret_key)
8
+ end
9
+ end
10
+ end
11
+ end
data/lib/justifi.rb CHANGED
@@ -15,10 +15,12 @@ require "justifi/oauth"
15
15
  require "justifi/payment"
16
16
  require "justifi/refund"
17
17
  require "justifi/payout"
18
+ require "justifi/balance_transaction"
18
19
  require "justifi/dispute"
19
20
  require "justifi/payment_method"
20
21
  require "justifi/payment_intent"
21
22
  require "justifi/in_memory_cache"
23
+ require "justifi/webhook"
22
24
 
23
25
  module Justifi
24
26
  @config = Justifi::Configuration.setup
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: justifi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - JustiFi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-28 00:00:00.000000000 Z
11
+ date: 2022-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug
@@ -161,6 +161,7 @@ files:
161
161
  - justifi.gemspec
162
162
  - lib/justifi.rb
163
163
  - lib/justifi/api_operations.rb
164
+ - lib/justifi/balance_transaction.rb
164
165
  - lib/justifi/configuration.rb
165
166
  - lib/justifi/dispute.rb
166
167
  - lib/justifi/in_memory_cache.rb
@@ -177,6 +178,7 @@ files:
177
178
  - lib/justifi/refund.rb
178
179
  - lib/justifi/util.rb
179
180
  - lib/justifi/version.rb
181
+ - lib/justifi/webhook.rb
180
182
  homepage: https://justifi.ai
181
183
  licenses: []
182
184
  metadata: