square.rb 31.0.0.20230816 → 33.0.0.20231018
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/lib/square/api/base_api.rb +1 -1
- data/lib/square/api/bookings_api.rb +66 -0
- data/lib/square/api/checkout_api.rb +0 -3
- data/lib/square/api/devices_api.rb +56 -0
- data/lib/square/api/employees_api.rb +2 -2
- data/lib/square/api/o_auth_api.rb +1 -4
- data/lib/square/api/subscriptions_api.rb +56 -0
- data/lib/square/client.rb +2 -2
- data/lib/square/configuration.rb +1 -1
- data/lib/square/utilities/webhooks_helper.rb +23 -0
- data/lib/square.rb +1 -0
- data/test/webhooks/test_webhooks_helper.rb +136 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1a9e797a4ed71794d0b22d02812a467b629f093bf7b52d0f431d1989b7674ae
|
4
|
+
data.tar.gz: b9f99ab1089d405de8c1e73efb286beed4f3c0e609c40e84a0453e403c31c57f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d425e644acdb896add3713f6a5883d998e37a9cd7ffe444186cff00b169f7a1fc2d1fbb492a75eb853547e28e2fe623829ece836224c3175eb25767aa9b65ff
|
7
|
+
data.tar.gz: 78de8fb5d730819d3e731776ed7c87c8448feec80666a1d5b9b4a594fa78f8aa1521f25c81fc7ec03bb17f762e7b80a12f436090d030d3c44c40a4468dafa210
|
data/lib/square/api/base_api.rb
CHANGED
@@ -4,7 +4,7 @@ module Square
|
|
4
4
|
attr_accessor :config, :http_call_back
|
5
5
|
|
6
6
|
def self.user_agent
|
7
|
-
'Square-Ruby-SDK/
|
7
|
+
'Square-Ruby-SDK/33.0.0.20231018 ({api-version}) {engine}/{engine-version} ({os-info}) {detail}'
|
8
8
|
end
|
9
9
|
|
10
10
|
def self.user_agent_parameters
|
@@ -157,6 +157,50 @@ module Square
|
|
157
157
|
.execute
|
158
158
|
end
|
159
159
|
|
160
|
+
# Lists location booking profiles of a seller.
|
161
|
+
# @param [Integer] limit Optional parameter: The maximum number of results
|
162
|
+
# to return in a paged response.
|
163
|
+
# @param [String] cursor Optional parameter: The pagination cursor from the
|
164
|
+
# preceding response to return the next page of the results. Do not set this
|
165
|
+
# when retrieving the first page of the results.
|
166
|
+
# @return [ListLocationBookingProfilesResponse Hash] response from the API call
|
167
|
+
def list_location_booking_profiles(limit: nil,
|
168
|
+
cursor: nil)
|
169
|
+
new_api_call_builder
|
170
|
+
.request(new_request_builder(HttpMethodEnum::GET,
|
171
|
+
'/v2/bookings/location-booking-profiles',
|
172
|
+
'default')
|
173
|
+
.query_param(new_parameter(limit, key: 'limit'))
|
174
|
+
.query_param(new_parameter(cursor, key: 'cursor'))
|
175
|
+
.header_param(new_parameter('application/json', key: 'accept'))
|
176
|
+
.auth(Single.new('global')))
|
177
|
+
.response(new_response_handler
|
178
|
+
.deserializer(APIHelper.method(:json_deserialize))
|
179
|
+
.is_api_response(true)
|
180
|
+
.convertor(ApiResponse.method(:create)))
|
181
|
+
.execute
|
182
|
+
end
|
183
|
+
|
184
|
+
# Retrieves a seller's location booking profile.
|
185
|
+
# @param [String] location_id Required parameter: The ID of the location to
|
186
|
+
# retrieve the booking profile.
|
187
|
+
# @return [RetrieveLocationBookingProfileResponse Hash] response from the API call
|
188
|
+
def retrieve_location_booking_profile(location_id:)
|
189
|
+
new_api_call_builder
|
190
|
+
.request(new_request_builder(HttpMethodEnum::GET,
|
191
|
+
'/v2/bookings/location-booking-profiles/{location_id}',
|
192
|
+
'default')
|
193
|
+
.template_param(new_parameter(location_id, key: 'location_id')
|
194
|
+
.should_encode(true))
|
195
|
+
.header_param(new_parameter('application/json', key: 'accept'))
|
196
|
+
.auth(Single.new('global')))
|
197
|
+
.response(new_response_handler
|
198
|
+
.deserializer(APIHelper.method(:json_deserialize))
|
199
|
+
.is_api_response(true)
|
200
|
+
.convertor(ApiResponse.method(:create)))
|
201
|
+
.execute
|
202
|
+
end
|
203
|
+
|
160
204
|
# Lists booking profiles for team members.
|
161
205
|
# @param [TrueClass | FalseClass] bookable_only Optional parameter:
|
162
206
|
# Indicates whether to include only bookable team members in the returned
|
@@ -191,6 +235,28 @@ module Square
|
|
191
235
|
.execute
|
192
236
|
end
|
193
237
|
|
238
|
+
# Retrieves one or more team members' booking profiles.
|
239
|
+
# @param [BulkRetrieveTeamMemberBookingProfilesRequest] body Required
|
240
|
+
# parameter: An object containing the fields to POST for the request. See
|
241
|
+
# the corresponding object definition for field details.
|
242
|
+
# @return [BulkRetrieveTeamMemberBookingProfilesResponse Hash] response from the API call
|
243
|
+
def bulk_retrieve_team_member_booking_profiles(body:)
|
244
|
+
new_api_call_builder
|
245
|
+
.request(new_request_builder(HttpMethodEnum::POST,
|
246
|
+
'/v2/bookings/team-member-booking-profiles/bulk-retrieve',
|
247
|
+
'default')
|
248
|
+
.header_param(new_parameter('application/json', key: 'Content-Type'))
|
249
|
+
.body_param(new_parameter(body))
|
250
|
+
.header_param(new_parameter('application/json', key: 'accept'))
|
251
|
+
.body_serializer(proc do |param| param.to_json unless param.nil? end)
|
252
|
+
.auth(Single.new('global')))
|
253
|
+
.response(new_response_handler
|
254
|
+
.deserializer(APIHelper.method(:json_deserialize))
|
255
|
+
.is_api_response(true)
|
256
|
+
.convertor(ApiResponse.method(:create)))
|
257
|
+
.execute
|
258
|
+
end
|
259
|
+
|
194
260
|
# Retrieves a team member's booking profile.
|
195
261
|
# @param [String] team_member_id Required parameter: The ID of the team
|
196
262
|
# member to retrieve.
|
@@ -8,9 +8,6 @@ module Square
|
|
8
8
|
# For more information, see [Checkout API
|
9
9
|
# highlights](https://developer.squareup.com/docs/checkout-api#checkout-api-
|
10
10
|
# highlights).
|
11
|
-
# We recommend that you use the
|
12
|
-
# new [CreatePaymentLink](api-endpoint:Checkout-CreatePaymentLink)
|
13
|
-
# endpoint in place of this previously released endpoint.
|
14
11
|
# @param [String] location_id Required parameter: The ID of the business
|
15
12
|
# location to associate the checkout with.
|
16
13
|
# @param [CreateCheckoutRequest] body Required parameter: An object
|
@@ -1,6 +1,42 @@
|
|
1
1
|
module Square
|
2
2
|
# DevicesApi
|
3
3
|
class DevicesApi < BaseApi
|
4
|
+
# List devices associated with the merchant. Currently, only Terminal API
|
5
|
+
# devices are supported.
|
6
|
+
# @param [String] cursor Optional parameter: A pagination cursor returned by
|
7
|
+
# a previous call to this endpoint. Provide this cursor to retrieve the next
|
8
|
+
# set of results for the original query. See
|
9
|
+
# [Pagination](https://developer.squareup.com/docs/build-basics/common-api-p
|
10
|
+
# atterns/pagination) for more information.
|
11
|
+
# @param [SortOrder] sort_order Optional parameter: The order in which
|
12
|
+
# results are listed. - `ASC` - Oldest to newest. - `DESC` - Newest to
|
13
|
+
# oldest (default).
|
14
|
+
# @param [Integer] limit Optional parameter: The number of results to return
|
15
|
+
# in a single page.
|
16
|
+
# @param [String] location_id Optional parameter: If present, only returns
|
17
|
+
# devices at the target location.
|
18
|
+
# @return [ListDevicesResponse Hash] response from the API call
|
19
|
+
def list_devices(cursor: nil,
|
20
|
+
sort_order: nil,
|
21
|
+
limit: nil,
|
22
|
+
location_id: nil)
|
23
|
+
new_api_call_builder
|
24
|
+
.request(new_request_builder(HttpMethodEnum::GET,
|
25
|
+
'/v2/devices',
|
26
|
+
'default')
|
27
|
+
.query_param(new_parameter(cursor, key: 'cursor'))
|
28
|
+
.query_param(new_parameter(sort_order, key: 'sort_order'))
|
29
|
+
.query_param(new_parameter(limit, key: 'limit'))
|
30
|
+
.query_param(new_parameter(location_id, key: 'location_id'))
|
31
|
+
.header_param(new_parameter('application/json', key: 'accept'))
|
32
|
+
.auth(Single.new('global')))
|
33
|
+
.response(new_response_handler
|
34
|
+
.deserializer(APIHelper.method(:json_deserialize))
|
35
|
+
.is_api_response(true)
|
36
|
+
.convertor(ApiResponse.method(:create)))
|
37
|
+
.execute
|
38
|
+
end
|
39
|
+
|
4
40
|
# Lists all DeviceCodes associated with the merchant.
|
5
41
|
# @param [String] cursor Optional parameter: A pagination cursor returned by
|
6
42
|
# a previous call to this endpoint. Provide this to retrieve the next set of
|
@@ -81,5 +117,25 @@ module Square
|
|
81
117
|
.convertor(ApiResponse.method(:create)))
|
82
118
|
.execute
|
83
119
|
end
|
120
|
+
|
121
|
+
# Retrieves Device with the associated `device_id`.
|
122
|
+
# @param [String] device_id Required parameter: The unique ID for the
|
123
|
+
# desired `Device`.
|
124
|
+
# @return [GetDeviceResponse Hash] response from the API call
|
125
|
+
def get_device(device_id:)
|
126
|
+
new_api_call_builder
|
127
|
+
.request(new_request_builder(HttpMethodEnum::GET,
|
128
|
+
'/v2/devices/{device_id}',
|
129
|
+
'default')
|
130
|
+
.template_param(new_parameter(device_id, key: 'device_id')
|
131
|
+
.should_encode(true))
|
132
|
+
.header_param(new_parameter('application/json', key: 'accept'))
|
133
|
+
.auth(Single.new('global')))
|
134
|
+
.response(new_response_handler
|
135
|
+
.deserializer(APIHelper.method(:json_deserialize))
|
136
|
+
.is_api_response(true)
|
137
|
+
.convertor(ApiResponse.method(:create)))
|
138
|
+
.execute
|
139
|
+
end
|
84
140
|
end
|
85
141
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Square
|
2
2
|
# EmployeesApi
|
3
3
|
class EmployeesApi < BaseApi
|
4
|
-
#
|
4
|
+
# TODO: type endpoint description here
|
5
5
|
# @param [String] location_id Optional parameter: Example:
|
6
6
|
# @param [EmployeeStatus] status Optional parameter: Specifies the
|
7
7
|
# EmployeeStatus to filter the employee by.
|
@@ -32,7 +32,7 @@ module Square
|
|
32
32
|
.execute
|
33
33
|
end
|
34
34
|
|
35
|
-
#
|
35
|
+
# TODO: type endpoint description here
|
36
36
|
# @param [String] id Required parameter: UUID for the employee that was
|
37
37
|
# requested.
|
38
38
|
# @return [RetrieveEmployeeResponse Hash] response from the API call
|
@@ -56,10 +56,7 @@ module Square
|
|
56
56
|
# Revokes an access token generated with the OAuth flow.
|
57
57
|
# If an account has more than one OAuth access token for your application,
|
58
58
|
# this
|
59
|
-
# endpoint revokes all of them, regardless of which token you specify.
|
60
|
-
# an
|
61
|
-
# OAuth access token is revoked, all of the active subscriptions associated
|
62
|
-
# with that OAuth token are canceled immediately.
|
59
|
+
# endpoint revokes all of them, regardless of which token you specify.
|
63
60
|
# __Important:__ The `Authorization` header for this endpoint must have the
|
64
61
|
# following format:
|
65
62
|
# ```
|
@@ -32,6 +32,32 @@ module Square
|
|
32
32
|
.execute
|
33
33
|
end
|
34
34
|
|
35
|
+
# Schedules a plan variation change for all active subscriptions under a
|
36
|
+
# given plan
|
37
|
+
# variation. For more information, see [Swap Subscription Plan
|
38
|
+
# Variations](https://developer.squareup.com/docs/subscriptions-api/swap-pla
|
39
|
+
# n-variations).
|
40
|
+
# @param [BulkSwapPlanRequest] body Required parameter: An object containing
|
41
|
+
# the fields to POST for the request. See the corresponding object
|
42
|
+
# definition for field details.
|
43
|
+
# @return [BulkSwapPlanResponse Hash] response from the API call
|
44
|
+
def bulk_swap_plan(body:)
|
45
|
+
new_api_call_builder
|
46
|
+
.request(new_request_builder(HttpMethodEnum::POST,
|
47
|
+
'/v2/subscriptions/bulk-swap-plan',
|
48
|
+
'default')
|
49
|
+
.header_param(new_parameter('application/json', key: 'Content-Type'))
|
50
|
+
.body_param(new_parameter(body))
|
51
|
+
.header_param(new_parameter('application/json', key: 'accept'))
|
52
|
+
.body_serializer(proc do |param| param.to_json unless param.nil? end)
|
53
|
+
.auth(Single.new('global')))
|
54
|
+
.response(new_response_handler
|
55
|
+
.deserializer(APIHelper.method(:json_deserialize))
|
56
|
+
.is_api_response(true)
|
57
|
+
.convertor(ApiResponse.method(:create)))
|
58
|
+
.execute
|
59
|
+
end
|
60
|
+
|
35
61
|
# Searches for subscriptions.
|
36
62
|
# Results are ordered chronologically by subscription creation date. If
|
37
63
|
# the request specifies more than one location ID,
|
@@ -146,6 +172,36 @@ module Square
|
|
146
172
|
.execute
|
147
173
|
end
|
148
174
|
|
175
|
+
# Changes the [billing anchor
|
176
|
+
# date](https://developer.squareup.com/docs/subscriptions-api/subscription-b
|
177
|
+
# illing#billing-dates)
|
178
|
+
# for a subscription.
|
179
|
+
# @param [String] subscription_id Required parameter: The ID of the
|
180
|
+
# subscription to update the billing anchor date.
|
181
|
+
# @param [ChangeBillingAnchorDateRequest] body Required parameter: An object
|
182
|
+
# containing the fields to POST for the request. See the corresponding
|
183
|
+
# object definition for field details.
|
184
|
+
# @return [ChangeBillingAnchorDateResponse Hash] response from the API call
|
185
|
+
def change_billing_anchor_date(subscription_id:,
|
186
|
+
body:)
|
187
|
+
new_api_call_builder
|
188
|
+
.request(new_request_builder(HttpMethodEnum::POST,
|
189
|
+
'/v2/subscriptions/{subscription_id}/billing-anchor',
|
190
|
+
'default')
|
191
|
+
.template_param(new_parameter(subscription_id, key: 'subscription_id')
|
192
|
+
.should_encode(true))
|
193
|
+
.header_param(new_parameter('application/json', key: 'Content-Type'))
|
194
|
+
.body_param(new_parameter(body))
|
195
|
+
.header_param(new_parameter('application/json', key: 'accept'))
|
196
|
+
.body_serializer(proc do |param| param.to_json unless param.nil? end)
|
197
|
+
.auth(Single.new('global')))
|
198
|
+
.response(new_response_handler
|
199
|
+
.deserializer(APIHelper.method(:json_deserialize))
|
200
|
+
.is_api_response(true)
|
201
|
+
.convertor(ApiResponse.method(:create)))
|
202
|
+
.execute
|
203
|
+
end
|
204
|
+
|
149
205
|
# Schedules a `CANCEL` action to cancel an active subscription. This
|
150
206
|
# sets the `canceled_date` field to the end of the active billing period.
|
151
207
|
# After this date,
|
data/lib/square/client.rb
CHANGED
@@ -4,7 +4,7 @@ module Square
|
|
4
4
|
attr_reader :config, :auth_managers
|
5
5
|
|
6
6
|
def sdk_version
|
7
|
-
'
|
7
|
+
'33.0.0.20231018'
|
8
8
|
end
|
9
9
|
|
10
10
|
def square_version
|
@@ -267,7 +267,7 @@ module Square
|
|
267
267
|
retry_methods: %i[get put], http_callback: nil,
|
268
268
|
environment: 'production',
|
269
269
|
custom_url: 'https://connect.squareup.com', access_token: '',
|
270
|
-
square_version: '2023-
|
270
|
+
square_version: '2023-10-18', user_agent_detail: '',
|
271
271
|
additional_headers: {}, config: nil)
|
272
272
|
@config = if config.nil?
|
273
273
|
Configuration.new(connection: connection, adapter: adapter,
|
data/lib/square/configuration.rb
CHANGED
@@ -19,7 +19,7 @@ module Square
|
|
19
19
|
retry_methods: %i[get put], http_callback: nil,
|
20
20
|
environment: 'production',
|
21
21
|
custom_url: 'https://connect.squareup.com', access_token: '',
|
22
|
-
square_version: '2023-
|
22
|
+
square_version: '2023-10-18', user_agent_detail: '',
|
23
23
|
additional_headers: {})
|
24
24
|
|
25
25
|
super connection: connection, adapter: adapter, timeout: timeout,
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
require 'base64'
|
3
|
+
|
4
|
+
module Square
|
5
|
+
class WebhooksHelper
|
6
|
+
def self.is_valid_webhook_event_signature(request_body, signature_header, signature_key, notification_url)
|
7
|
+
return false if request_body.nil?
|
8
|
+
raise 'signature_key is null or empty' if signature_key.nil? || signature_key.empty?
|
9
|
+
raise 'notification_url is null or empty' if notification_url.nil? || notification_url.empty?
|
10
|
+
|
11
|
+
# Perform UTF-8 encoding to bytes
|
12
|
+
payload_bytes = "#{notification_url}#{request_body}".force_encoding('utf-8')
|
13
|
+
signature_key_bytes = signature_key.force_encoding('utf-8')
|
14
|
+
|
15
|
+
# Compute the hash value
|
16
|
+
hmac = OpenSSL::HMAC.digest('sha256', signature_key_bytes, payload_bytes)
|
17
|
+
|
18
|
+
# Compare the computed hash vs the value in the signature header
|
19
|
+
hash_base64 = Base64.strict_encode64(hmac)
|
20
|
+
hash_base64 == signature_header
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/square.rb
CHANGED
@@ -0,0 +1,136 @@
|
|
1
|
+
require_relative '../../lib/square/utilities/webhooks_helper.rb'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'minitest/hell'
|
4
|
+
require 'minitest/pride'
|
5
|
+
require 'minitest/proveit'
|
6
|
+
require 'logger'
|
7
|
+
|
8
|
+
class WebhooksHelperTest < Minitest::Test
|
9
|
+
# Called only once for the class before any test has executed
|
10
|
+
def setup
|
11
|
+
@logger = Logger.new(STDOUT) # Create a Logger instance for logging
|
12
|
+
@logger.level = Logger::INFO # Set the log level to INFO or any desired level
|
13
|
+
@request_body = '{"merchant_id":"MLEFBHHSJGVHD","type":"webhooks.test_notification","event_id":"ac3ac95b-f97d-458c-a6e6-18981597e05f","created_at":"2022-07-13T20:30:59.037339943Z","data":{"type":"webhooks","id":"bc368e64-01aa-407e-b46e-3231809b1129"}}'
|
14
|
+
@signature_header = 'GF4YkrJgGBDZ9NIYbNXBnMzqb2HoL4RW/S6vkZ9/2N4='
|
15
|
+
@signature_key = 'Ibxx_5AKakO-3qeNVR61Dw'
|
16
|
+
@notification_url = 'https://webhook.site/679a4f3a-dcfa-49ee-bac5-9d0edad886b9'
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_signature_validation_pass
|
20
|
+
@logger.info('Running test_signature_validation_pass') # Log a message
|
21
|
+
is_valid = Square::WebhooksHelper.is_valid_webhook_event_signature(
|
22
|
+
@request_body,
|
23
|
+
@signature_header,
|
24
|
+
@signature_key,
|
25
|
+
@notification_url
|
26
|
+
)
|
27
|
+
assert_equal true, is_valid
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_signature_validation_fails_on_notification_url_mismatch
|
31
|
+
@logger.info('Running test_signature_validation_fails_on_notification_url_mismatch') # Log a message
|
32
|
+
is_valid = Square::WebhooksHelper.is_valid_webhook_event_signature(
|
33
|
+
@request_body,
|
34
|
+
@signature_header,
|
35
|
+
@signature_key,
|
36
|
+
'https://webhook.site/79a4f3a-dcfa-49ee-bac5-9d0edad886b9'
|
37
|
+
)
|
38
|
+
assert_equal false, is_valid
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_signature_validation_fails_on_invalid_signature_key
|
42
|
+
@logger.info('Running test_signature_validation_fails_on_invalid_signature_key') # Log a message
|
43
|
+
is_valid = Square::WebhooksHelper.is_valid_webhook_event_signature(
|
44
|
+
@request_body,
|
45
|
+
@signature_header,
|
46
|
+
'MCmhFRxGX82xMwg5FsaoQA',
|
47
|
+
@notification_url
|
48
|
+
)
|
49
|
+
assert_equal false, is_valid
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_signature_validation_fails_on_invalid_signature_header
|
53
|
+
is_valid = Square::WebhooksHelper.is_valid_webhook_event_signature(
|
54
|
+
@request_body,
|
55
|
+
'1z2n3DEJJiUPKcPzQo1ftvbxGdw=',
|
56
|
+
@signature_key,
|
57
|
+
@notification_url
|
58
|
+
)
|
59
|
+
assert_equal false, is_valid
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_signature_validation_fails_on_request_body_mismatch
|
63
|
+
request_body = '{"merchant_id":"MLEFBHHSJGVHD","type":"webhooks.test_notification","event_id":"ac3ac95b-f97d-458c-a6e6-18981597e05f","created_at":"2022-06-13T20:30:59.037339943Z","data":{"type":"webhooks","id":"bc368e64-01aa-407e-b46e-3231809b1129"}}'
|
64
|
+
is_valid = Square::WebhooksHelper.is_valid_webhook_event_signature(
|
65
|
+
request_body,
|
66
|
+
@signature_header,
|
67
|
+
@signature_key,
|
68
|
+
@notification_url
|
69
|
+
)
|
70
|
+
assert_equal false, is_valid
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_signature_validation_fails_on_request_body_formatted
|
74
|
+
request_body = '{
|
75
|
+
"merchant_id": "MLEFBHHSJGVHD",
|
76
|
+
"type": "webhooks.test_notification",
|
77
|
+
"event_id": "ac3ac95b-f97d-458c-a6e6-18981597e05f",
|
78
|
+
"created_at": "2022-07-13T20:30:59.037339943Z",
|
79
|
+
"data": {
|
80
|
+
"type": "webhooks",
|
81
|
+
"id": "bc368e64-01aa-407e-b46e-3231809b1129"
|
82
|
+
}
|
83
|
+
}'
|
84
|
+
is_valid = Square::WebhooksHelper.is_valid_webhook_event_signature(
|
85
|
+
request_body,
|
86
|
+
@signature_header,
|
87
|
+
@signature_key,
|
88
|
+
@notification_url
|
89
|
+
)
|
90
|
+
assert_equal false, is_valid
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_throws_error_on_empty_signature_key
|
94
|
+
assert_raises(RuntimeError, 'signature_key is null or empty') do
|
95
|
+
Square::WebhooksHelper.is_valid_webhook_event_signature(
|
96
|
+
@request_body,
|
97
|
+
@signature_header,
|
98
|
+
'',
|
99
|
+
@notification_url
|
100
|
+
)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_throws_error_on_signature_key_not_configured
|
105
|
+
assert_raises(RuntimeError) do
|
106
|
+
Square::WebhooksHelper.is_valid_webhook_event_signature(
|
107
|
+
@request_body,
|
108
|
+
@signature_header,
|
109
|
+
nil,
|
110
|
+
@notification_url
|
111
|
+
)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_throws_error_on_empty_notification_url
|
116
|
+
assert_raises(RuntimeError, 'notification_url is null or empty') do
|
117
|
+
Square::WebhooksHelper.is_valid_webhook_event_signature(
|
118
|
+
@request_body,
|
119
|
+
@signature_header,
|
120
|
+
@signature_key,
|
121
|
+
''
|
122
|
+
)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_throws_error_on_notification_url_not_configured
|
127
|
+
assert_raises(RuntimeError) do
|
128
|
+
Square::WebhooksHelper.is_valid_webhook_event_signature(
|
129
|
+
@request_body,
|
130
|
+
@signature_header,
|
131
|
+
@signature_key,
|
132
|
+
nil
|
133
|
+
)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: square.rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 33.0.0.20231018
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Square Developer Platform
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: apimatic_core_interfaces
|
@@ -150,6 +150,7 @@ files:
|
|
150
150
|
- lib/square/http/http_response.rb
|
151
151
|
- lib/square/utilities/date_time_helper.rb
|
152
152
|
- lib/square/utilities/file_wrapper.rb
|
153
|
+
- lib/square/utilities/webhooks_helper.rb
|
153
154
|
- spec/user_journey_spec.rb
|
154
155
|
- test/api/api_test_base.rb
|
155
156
|
- test/api/test_catalog_api.rb
|
@@ -161,6 +162,7 @@ files:
|
|
161
162
|
- test/api/test_payments_api.rb
|
162
163
|
- test/api/test_refunds_api.rb
|
163
164
|
- test/http_response_catcher.rb
|
165
|
+
- test/webhooks/test_webhooks_helper.rb
|
164
166
|
homepage: ''
|
165
167
|
licenses:
|
166
168
|
- Apache-2.0
|