mauth-client 4.1.1 → 4.2.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: f525040d66da5d6e6d3b5bf59e3d84267efad0d5f91598cc42291c972532c0b7
4
- data.tar.gz: bb573ed893f4f385f1f5c7847c79002d09257dd04d7e848968020245ae5fb82a
3
+ metadata.gz: 2e197a763a48eeb58d88be12eab10dc6e2c7c104287b0371a41120bd920402db
4
+ data.tar.gz: 84ef6da779ededf897bfe7a44eb2581073c2404a1208ae3a233b2d84c1bc98eb
5
5
  SHA512:
6
- metadata.gz: 8ee4aea0f49aa76ff0f70fce3afb8190edf5fce30b9d2750ab80a7297f7ae0f5ca639e0d3e8b89e2cdd932222b7ab164ac32ccf655ab0c791b356efd99016694
7
- data.tar.gz: 45aa7a70ddf934913348f063b287af103f32cafdc440aeaa00ec95430b883b1a726863aabf2055eb4e3216e7703f7e1a76fc2e511d24a0d11e4e047e89db8825
6
+ metadata.gz: f640994364eee25edcbbf611a611eb539efc96432de37daf78c0211f83e966154c5dcfb321fff6e25e067fdb53faae6af792665897a7ae4d295beada833282d2
7
+ data.tar.gz: 6270a48e063208842a1055d39814b96fe2cb4b8ceea04592eb94c62b533f110fe5510ca9060f321d5f4a309b96aaf9c99489ff28e068e5ddd6c04e20c1ae9bab
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## v4.2.0
2
+ * Drop legacy security token expiry in favor of honoring server cache headers via Faraday HTTP Cache Middleware.
3
+
1
4
  ## v4.1.1
2
5
  - Use warning level instead of error level for logs about missing mauth header.
3
6
 
data/lib/mauth/client.rb CHANGED
@@ -7,6 +7,8 @@ require 'mauth/core_ext'
7
7
  require 'mauth/autoload'
8
8
  require 'mauth/dice_bag/mauth_templates'
9
9
  require 'mauth/version'
10
+ require 'faraday-http-cache'
11
+ require 'oj'
10
12
 
11
13
  module MAuth
12
14
  class Client
@@ -405,12 +407,7 @@ module MAuth
405
407
  @security_token_cacher ||= SecurityTokenCacher.new(self)
406
408
  end
407
409
  class SecurityTokenCacher
408
- class ExpirableSecurityToken < Struct.new(:security_token, :create_time)
409
- CACHE_LIFE = 60
410
- def expired?
411
- create_time + CACHE_LIFE < Time.now
412
- end
413
- end
410
+
414
411
  def initialize(mauth_client)
415
412
  @mauth_client = mauth_client
416
413
  # TODO: should this be UnableToSignError?
@@ -421,7 +418,7 @@ module MAuth
421
418
  end
422
419
 
423
420
  def get(app_uuid)
424
- if !@cache[app_uuid] || @cache[app_uuid].expired?
421
+ if !@cache[app_uuid]
425
422
  # url-encode the app_uuid to prevent trickery like escaping upward with ../../ in a malicious
426
423
  # app_uuid - probably not exploitable, but this is the right way to do it anyway.
427
424
  # use UNRESERVED instead of UNSAFE (the default) as UNSAFE doesn't include /
@@ -432,13 +429,8 @@ module MAuth
432
429
  raise UnableToAuthenticateError, "mAuth service did not respond; received #{$!.class}: #{$!.message}"
433
430
  end
434
431
  if response.status == 200
435
- begin
436
- security_token = JSON.parse(response.body)
437
- rescue JSON::ParserError
438
- raise UnableToAuthenticateError, "mAuth service responded with unparseable json: #{response.body}\n#{$!.class}: #{$!.message}"
439
- end
440
432
  @cache_write_lock.synchronize do
441
- @cache[app_uuid] = ExpirableSecurityToken.new(security_token, Time.now)
433
+ @cache[app_uuid] = security_token_from(response.body)
442
434
  end
443
435
  elsif response.status == 404
444
436
  # signing with a key mAuth doesn't know about is considered inauthentic
@@ -447,11 +439,19 @@ module MAuth
447
439
  @mauth_client.send(:mauth_service_response_error, response)
448
440
  end
449
441
  end
450
- @cache[app_uuid].security_token
442
+ @cache[app_uuid]
451
443
  end
452
444
 
453
445
  private
454
446
 
447
+ def security_token_from(response_body)
448
+ JSON.parse response_body
449
+ rescue JSON::ParserError => e
450
+ msg = "mAuth service responded with unparseable json: #{response_body}\n#{e.class}: #{e.message}"
451
+ @mauth_client.logger.error("Unable to authenticate with MAuth. Exception #{msg}")
452
+ raise UnableToAuthenticateError, msg
453
+ end
454
+
455
455
  def signed_mauth_connection
456
456
  require 'faraday'
457
457
  require 'mauth/faraday'
@@ -459,6 +459,7 @@ module MAuth
459
459
  @signed_mauth_connection ||= ::Faraday.new(@mauth_client.mauth_baseurl, @mauth_client.faraday_options) do |builder|
460
460
  builder.use MAuth::Faraday::MAuthClientUserAgent
461
461
  builder.use MAuth::Faraday::RequestSigner, 'mauth_client' => @mauth_client
462
+ builder.use :http_cache, serializer: Oj, logger: MAuth::Client.new.logger, shared_cache: false
462
463
  builder.adapter ::Faraday.default_adapter
463
464
  end
464
465
  end
data/lib/mauth/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module MAuth
2
- VERSION = '4.1.1'.freeze
2
+ VERSION = '4.2.0'.freeze
3
3
  end
data/mauth-client.gemspec CHANGED
@@ -18,8 +18,10 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'faraday', '~> 0.7'
22
- spec.add_dependency 'faraday_middleware', '~> 0.9'
21
+ spec.add_dependency 'faraday', '>= 0.17', '< 1.0'
22
+ spec.add_dependency 'faraday_middleware', '>= 0.9', '< 2.0'
23
+ spec.add_dependency 'faraday-http-cache', '>= 2.0', '< 3.0'
24
+ spec.add_dependency 'oj', '~> 3.0'
23
25
  spec.add_dependency 'term-ansicolor', '~> 1.0'
24
26
  spec.add_dependency 'coderay', '~> 1.0'
25
27
  spec.add_dependency 'rack'
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: 4.1.1
4
+ version: 4.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Szenher
@@ -11,36 +11,82 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2019-06-26 00:00:00.000000000 Z
14
+ date: 2021-06-16 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: faraday
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
- - - "~>"
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: '0.17'
23
+ - - "<"
21
24
  - !ruby/object:Gem::Version
22
- version: '0.7'
25
+ version: '1.0'
23
26
  type: :runtime
24
27
  prerelease: false
25
28
  version_requirements: !ruby/object:Gem::Requirement
26
29
  requirements:
27
- - - "~>"
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0.17'
33
+ - - "<"
28
34
  - !ruby/object:Gem::Version
29
- version: '0.7'
35
+ version: '1.0'
30
36
  - !ruby/object:Gem::Dependency
31
37
  name: faraday_middleware
32
38
  requirement: !ruby/object:Gem::Requirement
33
39
  requirements:
34
- - - "~>"
40
+ - - ">="
35
41
  - !ruby/object:Gem::Version
36
42
  version: '0.9'
43
+ - - "<"
44
+ - !ruby/object:Gem::Version
45
+ version: '2.0'
37
46
  type: :runtime
38
47
  prerelease: false
39
48
  version_requirements: !ruby/object:Gem::Requirement
40
49
  requirements:
41
- - - "~>"
50
+ - - ">="
42
51
  - !ruby/object:Gem::Version
43
52
  version: '0.9'
53
+ - - "<"
54
+ - !ruby/object:Gem::Version
55
+ version: '2.0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: faraday-http-cache
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '2.0'
63
+ - - "<"
64
+ - !ruby/object:Gem::Version
65
+ version: '3.0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '2.0'
73
+ - - "<"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ - !ruby/object:Gem::Dependency
77
+ name: oj
78
+ requirement: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
44
90
  - !ruby/object:Gem::Dependency
45
91
  name: term-ansicolor
46
92
  requirement: !ruby/object:Gem::Requirement
@@ -270,7 +316,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
270
316
  - !ruby/object:Gem::Version
271
317
  version: '0'
272
318
  requirements: []
273
- rubygems_version: 3.0.4
319
+ rubygems_version: 3.0.8
274
320
  signing_key:
275
321
  specification_version: 4
276
322
  summary: Sign and authenticate requests and responses with mAuth authentication.