mauth-client 6.4.2 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mauth-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.4.2
4
+ version: 7.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Szenher
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2022-09-22 00:00:00.000000000 Z
14
+ date: 2023-05-24 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: addressable
@@ -41,26 +41,6 @@ dependencies:
41
41
  - - "~>"
42
42
  - !ruby/object:Gem::Version
43
43
  version: '1.0'
44
- - !ruby/object:Gem::Dependency
45
- name: dice_bag
46
- requirement: !ruby/object:Gem::Requirement
47
- requirements:
48
- - - ">="
49
- - !ruby/object:Gem::Version
50
- version: '0.9'
51
- - - "<"
52
- - !ruby/object:Gem::Version
53
- version: '2.0'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: '0.9'
61
- - - "<"
62
- - !ruby/object:Gem::Version
63
- version: '2.0'
64
44
  - !ruby/object:Gem::Dependency
65
45
  name: faraday
66
46
  requirement: !ruby/object:Gem::Requirement
@@ -105,16 +85,16 @@ dependencies:
105
85
  name: rack
106
86
  requirement: !ruby/object:Gem::Requirement
107
87
  requirements:
108
- - - ">="
88
+ - - ">"
109
89
  - !ruby/object:Gem::Version
110
- version: '0'
90
+ version: 2.2.3
111
91
  type: :runtime
112
92
  prerelease: false
113
93
  version_requirements: !ruby/object:Gem::Requirement
114
94
  requirements:
115
- - - ">="
95
+ - - ">"
116
96
  - !ruby/object:Gem::Version
117
- version: '0'
97
+ version: 2.2.3
118
98
  - !ruby/object:Gem::Dependency
119
99
  name: term-ansicolor
120
100
  requirement: !ruby/object:Gem::Requirement
@@ -129,188 +109,6 @@ dependencies:
129
109
  - - "~>"
130
110
  - !ruby/object:Gem::Version
131
111
  version: '1.0'
132
- - !ruby/object:Gem::Dependency
133
- name: appraisal
134
- requirement: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- type: :development
140
- prerelease: false
141
- version_requirements: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- - !ruby/object:Gem::Dependency
147
- name: benchmark-ips
148
- requirement: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: '2.7'
153
- type: :development
154
- prerelease: false
155
- version_requirements: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - "~>"
158
- - !ruby/object:Gem::Version
159
- version: '2.7'
160
- - !ruby/object:Gem::Dependency
161
- name: bundler
162
- requirement: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '1.17'
167
- type: :development
168
- prerelease: false
169
- version_requirements: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: '1.17'
174
- - !ruby/object:Gem::Dependency
175
- name: byebug
176
- requirement: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- version: '0'
181
- type: :development
182
- prerelease: false
183
- version_requirements: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - ">="
186
- - !ruby/object:Gem::Version
187
- version: '0'
188
- - !ruby/object:Gem::Dependency
189
- name: rack-test
190
- requirement: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - "~>"
193
- - !ruby/object:Gem::Version
194
- version: 1.1.0
195
- type: :development
196
- prerelease: false
197
- version_requirements: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - "~>"
200
- - !ruby/object:Gem::Version
201
- version: 1.1.0
202
- - !ruby/object:Gem::Dependency
203
- name: rake
204
- requirement: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - "~>"
207
- - !ruby/object:Gem::Version
208
- version: '12.0'
209
- type: :development
210
- prerelease: false
211
- version_requirements: !ruby/object:Gem::Requirement
212
- requirements:
213
- - - "~>"
214
- - !ruby/object:Gem::Version
215
- version: '12.0'
216
- - !ruby/object:Gem::Dependency
217
- name: rspec
218
- requirement: !ruby/object:Gem::Requirement
219
- requirements:
220
- - - "~>"
221
- - !ruby/object:Gem::Version
222
- version: '3.8'
223
- type: :development
224
- prerelease: false
225
- version_requirements: !ruby/object:Gem::Requirement
226
- requirements:
227
- - - "~>"
228
- - !ruby/object:Gem::Version
229
- version: '3.8'
230
- - !ruby/object:Gem::Dependency
231
- name: rubocop
232
- requirement: !ruby/object:Gem::Requirement
233
- requirements:
234
- - - '='
235
- - !ruby/object:Gem::Version
236
- version: 1.25.1
237
- type: :development
238
- prerelease: false
239
- version_requirements: !ruby/object:Gem::Requirement
240
- requirements:
241
- - - '='
242
- - !ruby/object:Gem::Version
243
- version: 1.25.1
244
- - !ruby/object:Gem::Dependency
245
- name: rubocop-mdsol
246
- requirement: !ruby/object:Gem::Requirement
247
- requirements:
248
- - - "~>"
249
- - !ruby/object:Gem::Version
250
- version: '0.1'
251
- type: :development
252
- prerelease: false
253
- version_requirements: !ruby/object:Gem::Requirement
254
- requirements:
255
- - - "~>"
256
- - !ruby/object:Gem::Version
257
- version: '0.1'
258
- - !ruby/object:Gem::Dependency
259
- name: rubocop-performance
260
- requirement: !ruby/object:Gem::Requirement
261
- requirements:
262
- - - '='
263
- - !ruby/object:Gem::Version
264
- version: 1.13.2
265
- type: :development
266
- prerelease: false
267
- version_requirements: !ruby/object:Gem::Requirement
268
- requirements:
269
- - - '='
270
- - !ruby/object:Gem::Version
271
- version: 1.13.2
272
- - !ruby/object:Gem::Dependency
273
- name: simplecov
274
- requirement: !ruby/object:Gem::Requirement
275
- requirements:
276
- - - "~>"
277
- - !ruby/object:Gem::Version
278
- version: '0.16'
279
- type: :development
280
- prerelease: false
281
- version_requirements: !ruby/object:Gem::Requirement
282
- requirements:
283
- - - "~>"
284
- - !ruby/object:Gem::Version
285
- version: '0.16'
286
- - !ruby/object:Gem::Dependency
287
- name: timecop
288
- requirement: !ruby/object:Gem::Requirement
289
- requirements:
290
- - - "~>"
291
- - !ruby/object:Gem::Version
292
- version: '0.9'
293
- type: :development
294
- prerelease: false
295
- version_requirements: !ruby/object:Gem::Requirement
296
- requirements:
297
- - - "~>"
298
- - !ruby/object:Gem::Version
299
- version: '0.9'
300
- - !ruby/object:Gem::Dependency
301
- name: webmock
302
- requirement: !ruby/object:Gem::Requirement
303
- requirements:
304
- - - "~>"
305
- - !ruby/object:Gem::Version
306
- version: '3.0'
307
- type: :development
308
- prerelease: false
309
- version_requirements: !ruby/object:Gem::Requirement
310
- requirements:
311
- - - "~>"
312
- - !ruby/object:Gem::Version
313
- version: '3.0'
314
112
  description: Client for signing and authentication of requests and responses with
315
113
  mAuth authentication. Includes middleware for Rack and Faraday for incoming and
316
114
  outgoing requests and responses.
@@ -337,15 +135,13 @@ files:
337
135
  - LICENSE.txt
338
136
  - README.md
339
137
  - Rakefile
138
+ - UPGRADE_GUIDE.md
340
139
  - doc/implementations.md
341
140
  - doc/mauth-client_CLI.md
342
141
  - doc/mauth-proxy.md
343
- - doc/mauth.yml.md
344
142
  - examples/Gemfile
345
- - examples/Gemfile.lock
346
143
  - examples/README.md
347
- - examples/config.yml
348
- - examples/get_user_info.rb
144
+ - examples/get_country_info.rb
349
145
  - examples/mauth_key
350
146
  - exe/mauth-client
351
147
  - exe/mauth-proxy
@@ -355,16 +151,11 @@ files:
355
151
  - lib/mauth-client.rb
356
152
  - lib/mauth/autoload.rb
357
153
  - lib/mauth/client.rb
358
- - lib/mauth/client/authenticator_base.rb
359
- - lib/mauth/client/local_authenticator.rb
360
- - lib/mauth/client/remote_authenticator.rb
154
+ - lib/mauth/client/authenticator.rb
361
155
  - lib/mauth/client/security_token_cacher.rb
362
156
  - lib/mauth/client/signer.rb
157
+ - lib/mauth/config_env.rb
363
158
  - lib/mauth/core_ext.rb
364
- - lib/mauth/dice_bag/mauth.rb.dice
365
- - lib/mauth/dice_bag/mauth.yml.dice
366
- - lib/mauth/dice_bag/mauth_key.dice
367
- - lib/mauth/dice_bag/mauth_templates.rb
368
159
  - lib/mauth/errors.rb
369
160
  - lib/mauth/fake/rack.rb
370
161
  - lib/mauth/faraday.rb
@@ -388,7 +179,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
388
179
  requirements:
389
180
  - - ">="
390
181
  - !ruby/object:Gem::Version
391
- version: 2.6.0
182
+ version: 2.7.0
392
183
  required_rubygems_version: !ruby/object:Gem::Requirement
393
184
  requirements:
394
185
  - - ">="
data/doc/mauth.yml.md DELETED
@@ -1,84 +0,0 @@
1
- # mauth.yml
2
-
3
- The conventional way to configure MAuth-Client for your project is through a YAML file which lives in your project at `config/mauth.yml`.
4
- It is keyed on environment, and for the most part its contents are passed directly to instantiate an MAuth::Client.
5
- See the documentation for [MAuth::Client#initialize](../lib/mauth/client.rb) for more details of what it accepts.
6
-
7
- ## Generating keys
8
-
9
- To generate a private key (`mauth_key`) and its public counterpart (`mauth_key.pub`) run:
10
-
11
- ```
12
- openssl genrsa -out mauth_key 2048
13
- openssl rsa -in mauth_key -pubout -out mauth_key.pub
14
- ```
15
-
16
- ## Format
17
-
18
- ```yaml
19
- common: &common
20
- mauth_baseurl: https://mauth-innovate.imedidata.com
21
- mauth_api_version: v1
22
- app_uuid: 123we997-0333-44d8-8fCf-5dd555c5bd51
23
- private_key: |
24
- -----BEGIN RSA PRIVATE KEY-----
25
- AIIEowIBAAKCAQEAwLYWYcKrCAl7uWVlkwzBcBXRiRREqGYLXEnRGgDrlqbY+lDg
26
- gwMNga3ylckui/rTUZhtefx1MLtxgnTGiil45eleoJgjdfsOO5yXzUA46KW0cuL4
27
- ...
28
- oEKe4QKBgFNbVJp3Zut83MzpN4Zu7/wZ/+q9ds9WMMxWb4hUugKQTPjsgj+8tCqa
29
- SIY2exfsy7Y8NoOnBPlGiXKhgaF21T8kqV9C7R6OAuP0U6CgMJnINx/UjozvBENH
30
- Ux45QdvRd6vai8nHp7AgV7rr55SxXAZVgATll84uBUpfpmC6YK/j
31
- -----END RSA PRIVATE KEY-----
32
- v2_only_authenticate: false
33
- v2_only_sign_requests: false
34
- disable_fallback_to_v1_on_v2_failure: true
35
-
36
- production:
37
- <<: *common
38
- development:
39
- <<: *common
40
- test:
41
- <<: *common
42
- ```
43
-
44
- Optionally you can load the private key from a file:
45
-
46
- ```yaml
47
- common: &common
48
- mauth_baseurl: https://mauth-innovate.imedidata.com
49
- mauth_api_version: v1
50
- app_uuid: 123we997-0333-44d8-8fCf-5dd555c5bd51
51
- private_key_file: config/my_mauth_private.key
52
- v2_only_authenticate: false
53
- v2_only_sign_requests: false
54
- disable_fallback_to_v1_on_v2_failure: true
55
- v1_only_sign_requests: false
56
-
57
- production:
58
- <<: *common
59
- development:
60
- <<: *common
61
- test:
62
- <<: *common
63
- ```
64
-
65
- ## Configuration options
66
-
67
- - `private_key` - Required for signing and for authenticating responses. May be omitted if only remote authentication of requests is being performed.
68
- - `private_key_file` - May be used instead of `private_key`, mauth-client will load the file instead.
69
- - `app_uuid` - Required in the same circumstances where a `private_key` is required.
70
- - `mauth_baseurl` - Required for authentication but not for signing. Needed for local authentication to retrieve public keys and for remote authentication. Usually this is `https://mauth.imedidata.com` for production.
71
- - `mauth_api_version` - Required for authentication but not for signing. only `v1` exists as of this writing.
72
- - `v2_only_sign_requests` - If true, all outgoing requests will be signed with only the V2 protocol. Defaults to false.
73
- - `v2_only_authenticate` - If true, any incoming request or incoming response that does not use the V2 protocol will be rejected. Defaults to false.
74
- - `disable_fallback_to_v1_on_v2_failure` - If true, any incoming V2 requests that fail authentication will not fall back to V1 authentication. Defaults to false.
75
- - `v1_only_sign_requests` - If true, all outgoing requests will be signed with only the V1 protocol. Defaults to true. Note, cannot be `true` if `v2_only_sign_requests` is also `true`.
76
-
77
- ## Usage in your application
78
-
79
- Load mauth.yml, merge in any other configuration that is needed for your usage, and pass the config along to instantiate a `MAuth::Client` or a middleware.
80
- See the [README](../README.md) for more detail.
81
-
82
- ## Usage in MAuth-Client executables (mauth-client, mauth-proxy)
83
-
84
- See the [MAuth-Client CLI Tool doc](./mauth-client_CLI.md#configuration).
@@ -1,69 +0,0 @@
1
- PATH
2
- remote: ..
3
- specs:
4
- mauth-client (6.4.0)
5
- addressable (~> 2.0)
6
- coderay (~> 1.0)
7
- dice_bag (>= 0.9, < 2.0)
8
- faraday (>= 0.9, < 3.0)
9
- faraday-http-cache (>= 2.0, < 3.0)
10
- rack
11
- term-ansicolor (~> 1.0)
12
-
13
- GEM
14
- remote: https://rubygems.org/
15
- specs:
16
- addressable (2.8.0)
17
- public_suffix (>= 2.0.2, < 5.0)
18
- coderay (1.1.3)
19
- dice_bag (1.6.1)
20
- diff-lcs (~> 1.0)
21
- rake
22
- thor (< 2.0)
23
- diff-lcs (1.5.0)
24
- faraday (1.9.3)
25
- faraday-em_http (~> 1.0)
26
- faraday-em_synchrony (~> 1.0)
27
- faraday-excon (~> 1.1)
28
- faraday-httpclient (~> 1.0)
29
- faraday-multipart (~> 1.0)
30
- faraday-net_http (~> 1.0)
31
- faraday-net_http_persistent (~> 1.0)
32
- faraday-patron (~> 1.0)
33
- faraday-rack (~> 1.0)
34
- faraday-retry (~> 1.0)
35
- ruby2_keywords (>= 0.0.4)
36
- faraday-em_http (1.0.0)
37
- faraday-em_synchrony (1.0.0)
38
- faraday-excon (1.1.0)
39
- faraday-http-cache (2.2.0)
40
- faraday (>= 0.8)
41
- faraday-httpclient (1.0.1)
42
- faraday-multipart (1.0.3)
43
- multipart-post (>= 1.2, < 3)
44
- faraday-net_http (1.0.1)
45
- faraday-net_http_persistent (1.2.0)
46
- faraday-patron (1.0.0)
47
- faraday-rack (1.0.0)
48
- faraday-retry (1.0.3)
49
- multipart-post (2.1.1)
50
- public_suffix (4.0.6)
51
- rack (2.2.3)
52
- rake (13.0.6)
53
- ruby2_keywords (0.0.5)
54
- sync (0.5.0)
55
- term-ansicolor (1.7.1)
56
- tins (~> 1.0)
57
- thor (1.2.1)
58
- tins (1.31.0)
59
- sync
60
-
61
- PLATFORMS
62
- ruby
63
-
64
- DEPENDENCIES
65
- faraday (~> 1.0)
66
- mauth-client!
67
-
68
- BUNDLED WITH
69
- 2.2.29
data/examples/config.yml DELETED
@@ -1,12 +0,0 @@
1
- imedidata:
2
- host: https://innovate.imedidata.com
3
-
4
- mauth:
5
- mauth_baseurl: https://mauth-innovate.imedidata.com
6
- mauth_api_version: v1
7
- app_uuid: <APP UUID>
8
- private_key_file: ./mauth_key
9
- v2_only_authenticate: false
10
- v2_only_sign_requests: false
11
- disable_fallback_to_v1_on_v2_failure: true
12
- v1_only_sign_requests: false
@@ -1,58 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- abort "USAGE: ./#{__FILE__} <USER UUID>" unless ARGV.size == 1
5
-
6
- require 'bundler/setup'
7
- Bundler.require(:default)
8
-
9
- def config
10
- @config ||= YAML.safe_load(File.open('./config.yml'))
11
- end
12
-
13
- # get user information
14
- def get_user_info_mauth(user_uuid)
15
- get_data_from_imedidata "users/#{user_uuid}.json"
16
- end
17
-
18
- # fetch data from iMedidata
19
- def get_data_from_imedidata(resource_name)
20
- puts "fetching #{resource_name}..."
21
- begin
22
- connection = Faraday::Connection.new(url: config['imedidata']['host']) do |builder|
23
- builder.use MAuth::Faraday::RequestSigner, config['mauth']
24
- builder.adapter Faraday.default_adapter
25
- end
26
-
27
- # get the data
28
- response = connection.get "/api/v2/#{resource_name}"
29
- puts "HTTP #{response.status}"
30
-
31
- # return the user info
32
- if response.status == 200
33
- result = JSON.parse(response.body)
34
- puts JSON.pretty_generate(result)
35
- result
36
- else
37
- puts response.body
38
- nil
39
- end
40
- rescue JSON::ParserError => e
41
- puts "Error parsing data from imedidata: #{e.inspect}"
42
- puts e.backtrace.join("\n")
43
- end
44
- end
45
-
46
- get_user_info_mauth(ARGV[0])
47
-
48
- ### OTHER EXAMPLES
49
-
50
- #### get study groups for an user
51
- def get_study_groups_mauth(user_uuid)
52
- get_data_from_imedidata "users/#{user_uuid}/study_groups.json"
53
- end
54
-
55
- #### get roles for a user in an application study
56
- def get_user_study_roles_mauth(user_uuid, study_uuid)
57
- get_data_from_imedidata "users/#{user_uuid}/studies/#{study_uuid}/apps/#{config["mauth"]["app_uuid"]}/roles.json"
58
- end
@@ -1,133 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # methods common to RemoteRequestAuthenticator and LocalAuthenticator
4
-
5
- module MAuth
6
- class Client
7
- module AuthenticatorBase
8
- ALLOWED_DRIFT_SECONDS = 300
9
-
10
- # takes an incoming request or response object, and returns whether
11
- # the object is authentic according to its signature.
12
- def authentic?(object)
13
- log_authentication_request(object)
14
- begin
15
- authenticate!(object)
16
- true
17
- rescue InauthenticError, MAuthNotPresent, MissingV2Error
18
- false
19
- end
20
- end
21
-
22
- # raises InauthenticError unless the given object is authentic. Will only
23
- # authenticate with v2 if the environment variable V2_ONLY_AUTHENTICATE
24
- # is set. Otherwise will fall back to v1 when v2 authentication fails
25
- def authenticate!(object)
26
- case object.protocol_version
27
- when 2
28
- begin
29
- authenticate_v2!(object)
30
- rescue InauthenticError => e
31
- raise e if v2_only_authenticate?
32
- raise e if disable_fallback_to_v1_on_v2_failure?
33
-
34
- object.fall_back_to_mws_signature_info
35
- raise e unless object.signature
36
-
37
- log_authentication_request(object)
38
- authenticate_v1!(object)
39
- logger.warn('Completed successful authentication attempt after fallback to v1')
40
- end
41
- when 1
42
- if v2_only_authenticate?
43
- # If v2 is required but not present and v1 is present we raise MissingV2Error
44
- msg = 'This service requires mAuth v2 mcc-authentication header but only v1 x-mws-authentication is present'
45
- logger.error(msg)
46
- raise MissingV2Error, msg
47
- end
48
-
49
- authenticate_v1!(object)
50
- else
51
- sub_str = v2_only_authenticate? ? '' : 'X-MWS-Authentication header is blank, '
52
- msg = "Authentication Failed. No mAuth signature present; #{sub_str}MCC-Authentication header is blank."
53
- logger.warn("mAuth signature not present on #{object.class}. Exception: #{msg}")
54
- raise MAuthNotPresent, msg
55
- end
56
- end
57
-
58
- private
59
-
60
- # NOTE: This log is likely consumed downstream and the contents SHOULD NOT
61
- # be changed without a thorough review of downstream consumers.
62
- def log_authentication_request(object)
63
- object_app_uuid = object.signature_app_uuid || '[none provided]'
64
- object_token = object.signature_token || '[none provided]'
65
- logger.info(
66
- 'Mauth-client attempting to authenticate request from app with mauth' \
67
- " app uuid #{object_app_uuid} to app with mauth app uuid #{client_app_uuid}" \
68
- " using version #{object_token}."
69
- )
70
- end
71
-
72
- def log_inauthentic(object, message)
73
- logger.error("mAuth signature authentication failed for #{object.class}. Exception: #{message}")
74
- end
75
-
76
- def time_within_valid_range!(object, time_signed, now = Time.now)
77
- return if (-ALLOWED_DRIFT_SECONDS..ALLOWED_DRIFT_SECONDS).cover?(now.to_i - time_signed)
78
-
79
- msg = "Time verification failed. #{time_signed} not within #{ALLOWED_DRIFT_SECONDS} of #{now}"
80
- log_inauthentic(object, msg)
81
- raise InauthenticError, msg
82
- end
83
-
84
- # V1 helpers
85
- def authenticate_v1!(object)
86
- time_valid_v1!(object)
87
- token_valid_v1!(object)
88
- signature_valid_v1!(object)
89
- end
90
-
91
- def time_valid_v1!(object)
92
- if object.x_mws_time.nil?
93
- msg = 'Time verification failed. No x-mws-time present.'
94
- log_inauthentic(object, msg)
95
- raise InauthenticError, msg
96
- end
97
- time_within_valid_range!(object, object.x_mws_time.to_i)
98
- end
99
-
100
- def token_valid_v1!(object)
101
- return if object.signature_token == MWS_TOKEN
102
-
103
- msg = "Token verification failed. Expected #{MWS_TOKEN}; token was #{object.signature_token}"
104
- log_inauthentic(object, msg)
105
- raise InauthenticError, msg
106
- end
107
-
108
- # V2 helpers
109
- def authenticate_v2!(object)
110
- time_valid_v2!(object)
111
- token_valid_v2!(object)
112
- signature_valid_v2!(object)
113
- end
114
-
115
- def time_valid_v2!(object)
116
- if object.mcc_time.nil?
117
- msg = 'Time verification failed. No MCC-Time present.'
118
- log_inauthentic(object, msg)
119
- raise InauthenticError, msg
120
- end
121
- time_within_valid_range!(object, object.mcc_time.to_i)
122
- end
123
-
124
- def token_valid_v2!(object)
125
- return if object.signature_token == MWSV2_TOKEN
126
-
127
- msg = "Token verification failed. Expected #{MWSV2_TOKEN}; token was #{object.signature_token}"
128
- log_inauthentic(object, msg)
129
- raise InauthenticError, msg
130
- end
131
- end
132
- end
133
- end