mauth-client 5.0.1 → 6.1.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: a0e68cfc0209b5a75353832da0b86ad09d62414a7d7b41064140f74015202b62
4
- data.tar.gz: 9d7030753959fcb55da17f407d952d271bcb55ce17055b57c7639cab591968fe
3
+ metadata.gz: 902839b0bccce8c448cea26ff7e83788858f71b3906974a4c3bba27817271f21
4
+ data.tar.gz: 64f2fc3fb6f213099c4b8d657754e1c440ea610fe02b90c20c22794fe14b46dd
5
5
  SHA512:
6
- metadata.gz: 7d9c6a695ada3e6ba84d8cf315618e502841b59f261a19caadb7ee3f83ff2744a4cd6621571fb8d9f1e6917c5894c002e77d6b90556696cc6124ebc58b47870b
7
- data.tar.gz: d623c9f86481d9c159c49bf0222bdc06ea405bd3063763cdabfbd26d97014c3847854a2dcfd26a7100afd9cc3fcc8b79dd334dee0d89d96c45c4aa8ce1960826
6
+ metadata.gz: 6e4422f2ea53a1b36506a0544cd62dc3ab37fee032acda93e81d2ef364eb924059f905db7ea08196c4229009f742d405c22c0c069807534570dd09e5d3e85ae7
7
+ data.tar.gz: 56a0f91951fbaba3923291e51240caf53ec91037b200878f29af6a4412c88f9b087cfab9b325a13a22fd8b1fd71389748dab204c80142461a82aa0c78cb9cad6
data/.gitignore CHANGED
@@ -6,5 +6,9 @@
6
6
  /yardoc
7
7
  /log
8
8
 
9
+ # Appraisal related files
10
+ /gemfiles/.bundle/
11
+ /gemfiles/*.gemfile.lock
12
+
9
13
  /Gemfile.lock
10
14
  .byebug_history
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --tag ~protocol_suite
@@ -2,24 +2,33 @@ language: ruby
2
2
  cache: bundler
3
3
 
4
4
  rvm:
5
- - 2.3.8
6
- - 2.4.6
7
- - 2.5.5
8
- - 2.6.3
5
+ - 2.3
6
+ - 2.4
7
+ - 2.5
8
+ - 2.6
9
+ - 2.7
10
+
11
+ gemfile:
12
+ - gemfiles/faraday_0.x.gemfile
13
+ - gemfiles/faraday_1.x.gemfile
9
14
 
10
15
  before_install:
11
- - gem update --system -N > /dev/null && echo "Rubygems version $(gem --version)"
12
- - gem install bundler --force -N -v=2.0.1 && bundle --version
16
+ - gem update --system --force -N > /dev/null && echo "Rubygems version $(gem --version)"
17
+ - gem install bundler --force -N -v=2.1.4 && bundle --version
13
18
 
14
19
  install:
15
20
  - bundle install --jobs=3 --retry=3
16
- - |-
17
- curl -H 'Cache-Control: no-cache' https://raw.githubusercontent.com/mdsol/fossa_ci_scripts/master/travis_ci/fossa_install.sh | bash -s -- -b $TRAVIS_BUILD_DIR
21
+ - >-
22
+ curl -H 'Cache-Control: no-cache'
23
+ https://raw.githubusercontent.com/mdsol/fossa_ci_scripts/master/travis_ci/fossa_install.sh |
24
+ bash -s -- -b $TRAVIS_BUILD_DIR
18
25
 
19
26
  script:
20
27
  - bundle exec rspec
21
- - |-
22
- curl -H 'Cache-Control: no-cache' https://raw.githubusercontent.com/mdsol/fossa_ci_scripts/master/travis_ci/fossa_run.sh | bash -s -- -b $TRAVIS_BUILD_DIR
28
+ - >-
29
+ curl -H 'Cache-Control: no-cache'
30
+ https://raw.githubusercontent.com/mdsol/fossa_ci_scripts/master/travis_ci/fossa_run.sh |
31
+ bash -s -- -b $TRAVIS_BUILD_DIR
23
32
 
24
33
  deploy:
25
34
  provider: rubygems
@@ -29,4 +38,4 @@ deploy:
29
38
  on:
30
39
  tags: true
31
40
  repo: mdsol/mauth-client-ruby
32
- condition: "$TRAVIS_RUBY_VERSION == 2.6.3"
41
+ condition: $TRAVIS_RUBY_VERSION == 2.7 && $BUNDLE_GEMFILE == $TRAVIS_BUILD_DIR/gemfiles/faraday_1.x.gemfile
@@ -0,0 +1,7 @@
1
+ appraise 'faraday_0.x' do
2
+ gem 'faraday', '0.9.0'
3
+ end
4
+
5
+ appraise 'faraday_1.x' do
6
+ gem 'faraday', '~> 1.0'
7
+ end
@@ -1,3 +1,23 @@
1
+ ## v6.1.1
2
+ * Replace `URI.escape` with `CGI.escape` in SecurityTokenCacher to suppress "URI.escape is obsolete" warning.
3
+
4
+ ## v6.1.0
5
+ * Allow Faraday 1.x.
6
+
7
+ ## v6.0.0
8
+ - Added parsing code to test with mauth-protocol-test-suite.
9
+ - Added unescape step in query_string encoding in order to remove 'double encoding'.
10
+ - Added normalization of paths.
11
+ - Added flag to sign only with V1.
12
+ - Changed V2 to V1 fallback to be configurable.
13
+ - Fixed bug in sorting query parameters.
14
+
15
+ ## v5.1.0
16
+ - Fall back to V1 when V2 authentication fails.
17
+
18
+ ## v5.0.2
19
+ - Fix to not raise FrozenError when string to sign contains frozen value.
20
+
1
21
  ## v5.0.1
2
22
  - Update euresource escaping of query string.
3
23
 
@@ -19,6 +19,14 @@ Next, run the tests:
19
19
  bundle exec rspec
20
20
  ```
21
21
 
22
+ # Running mauth-protocol-test-suite
23
+
24
+ To run the mauth-protocol-test-suite clone the latest test suite onto your machine and place it in the same parent directory as this repo (or supply the ENV var `TEST_SUITE_RELATIVE_PATH` with the path to the test suite relative to this repo). Then run:
25
+
26
+ ```
27
+ bundle exec rspec --tag protocol_suite
28
+ ```
29
+
22
30
  ## Running Benchmark
23
31
 
24
32
  If you make changes which could affect performance, please run the benchmark before and after the change as a sanity check.
@@ -29,6 +29,9 @@ common: &common
29
29
  SIY2exfsy7Y8NoOnBPlGiXKhgaF21T8kqV9C7R6OAuP0U6CgMJnINx/UjozvBENH
30
30
  Ux45QdvRd6vai8nHp7AgV7rr55SxXAZVgATll84uBUpfpmC6YK/j
31
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
32
35
 
33
36
  production:
34
37
  <<: *common
@@ -46,6 +49,10 @@ common: &common
46
49
  mauth_api_version: v1
47
50
  app_uuid: 123we997-0333-44d8-8fCf-5dd555c5bd51
48
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
49
56
 
50
57
  production:
51
58
  <<: *common
@@ -62,6 +69,10 @@ test:
62
69
  - `app_uuid` - Required in the same circumstances where a `private_key` is required.
63
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.
64
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`.
65
76
 
66
77
  ## Usage in your application
67
78
 
@@ -1,4 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'faraday', '~> 0.15'
3
+ gem 'faraday', '~> 1.0'
4
4
  gem 'mauth-client', path: '..'
@@ -1,41 +1,47 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- mauth-client (4.1.0)
4
+ mauth-client (6.1.0)
5
+ addressable (~> 2.0)
5
6
  coderay (~> 1.0)
6
7
  dice_bag (>= 0.9, < 2.0)
7
- faraday (~> 0.7)
8
- faraday_middleware (~> 0.9)
8
+ faraday (>= 0.9, < 2.0)
9
+ faraday_middleware (>= 0.9, < 2.0)
9
10
  rack
10
11
  term-ansicolor (~> 1.0)
11
12
 
12
13
  GEM
13
14
  remote: https://rubygems.org/
14
15
  specs:
15
- coderay (1.1.2)
16
- dice_bag (1.3.1)
16
+ addressable (2.7.0)
17
+ public_suffix (>= 2.0.2, < 5.0)
18
+ coderay (1.1.3)
19
+ dice_bag (1.4.1)
17
20
  diff-lcs (~> 1.0)
18
21
  rake
19
- thor (~> 0.0)
20
- diff-lcs (1.3)
21
- faraday (0.15.3)
22
+ thor (< 2.0)
23
+ diff-lcs (1.4.4)
24
+ faraday (1.0.1)
22
25
  multipart-post (>= 1.2, < 3)
23
- faraday_middleware (0.12.2)
24
- faraday (>= 0.7.4, < 1.0)
25
- multipart-post (2.0.0)
26
- rack (2.0.6)
27
- rake (12.3.1)
28
- term-ansicolor (1.7.0)
26
+ faraday_middleware (1.0.0)
27
+ faraday (~> 1.0)
28
+ multipart-post (2.1.1)
29
+ public_suffix (4.0.6)
30
+ rack (2.2.3)
31
+ rake (13.0.1)
32
+ sync (0.5.0)
33
+ term-ansicolor (1.7.1)
29
34
  tins (~> 1.0)
30
- thor (0.20.3)
31
- tins (1.20.2)
35
+ thor (1.0.1)
36
+ tins (1.25.0)
37
+ sync
32
38
 
33
39
  PLATFORMS
34
40
  ruby
35
41
 
36
42
  DEPENDENCIES
37
- faraday (~> 0.15)
43
+ faraday (~> 1.0)
38
44
  mauth-client!
39
45
 
40
46
  BUNDLED WITH
41
- 1.17.1
47
+ 2.1.4
@@ -6,3 +6,7 @@ mauth:
6
6
  mauth_api_version: v1
7
7
  app_uuid: <APP UUID>
8
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
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "faraday", "0.9.0"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "faraday", "~> 1.0"
6
+
7
+ gemspec path: "../"
@@ -153,6 +153,12 @@ module MAuth
153
153
  @config['ssl_certs_path'] = given_config['ssl_certs_path'] if given_config['ssl_certs_path']
154
154
  @config['v2_only_authenticate'] = given_config['v2_only_authenticate'].to_s.downcase == 'true'
155
155
  @config['v2_only_sign_requests'] = given_config['v2_only_sign_requests'].to_s.downcase == 'true'
156
+ @config['disable_fallback_to_v1_on_v2_failure'] = given_config['disable_fallback_to_v1_on_v2_failure'].to_s.downcase == 'true'
157
+ @config['v1_only_sign_requests'] = given_config['v1_only_sign_requests'].to_s.downcase == 'true'
158
+
159
+ if @config['v2_only_sign_requests'] && @config['v1_only_sign_requests']
160
+ raise MAuth::Client::ConfigurationError, "v2_only_sign_requests and v1_only_sign_requests may not both be true"
161
+ end
156
162
 
157
163
  # if 'authenticator' was given, don't override that - including if it was given as nil / false
158
164
  if given_config.key?('authenticator')
@@ -205,6 +211,14 @@ module MAuth
205
211
  @config['v2_only_authenticate']
206
212
  end
207
213
 
214
+ def disable_fallback_to_v1_on_v2_failure?
215
+ @config['disable_fallback_to_v1_on_v2_failure']
216
+ end
217
+
218
+ def v1_only_sign_requests?
219
+ @config['v1_only_sign_requests']
220
+ end
221
+
208
222
  def assert_private_key(err)
209
223
  raise err unless private_key
210
224
  end
@@ -19,10 +19,22 @@ module MAuth
19
19
 
20
20
  # raises InauthenticError unless the given object is authentic. Will only
21
21
  # authenticate with v2 if the environment variable V2_ONLY_AUTHENTICATE
22
- # is set. Otherwise will authenticate with only the highest protocol version present
22
+ # is set. Otherwise will fall back to v1 when v2 authentication fails
23
23
  def authenticate!(object)
24
24
  if object.protocol_version == 2
25
- authenticate_v2!(object)
25
+ begin
26
+ authenticate_v2!(object)
27
+ rescue InauthenticError => e
28
+ raise e if v2_only_authenticate?
29
+ raise e if disable_fallback_to_v1_on_v2_failure?
30
+
31
+ object.fall_back_to_mws_signature_info
32
+ raise e unless object.signature
33
+
34
+ log_authentication_request(object)
35
+ authenticate_v1!(object)
36
+ logger.warn("Completed successful authentication attempt after fallback to v1")
37
+ end
26
38
  elsif object.protocol_version == 1
27
39
  if v2_only_authenticate?
28
40
  # If v2 is required but not present and v1 is present we raise MissingV2Error
@@ -42,7 +42,7 @@ module MAuth
42
42
  def make_mauth_request(authentication_ticket)
43
43
  begin
44
44
  response = mauth_connection.post("/mauth/#{mauth_api_version}/authentication_tickets.json", 'authentication_ticket' => authentication_ticket)
45
- rescue ::Faraday::Error::ConnectionFailed, ::Faraday::Error::TimeoutError => e
45
+ rescue ::Faraday::ConnectionFailed, ::Faraday::TimeoutError => e
46
46
  msg = "mAuth service did not respond; received #{e.class}: #{e.message}"
47
47
  logger.error("Unable to authenticate with MAuth. Exception #{msg}")
48
48
  raise UnableToAuthenticateError, msg
@@ -23,11 +23,10 @@ module MAuth
23
23
  if !@cache[app_uuid] || @cache[app_uuid].expired?
24
24
  # url-encode the app_uuid to prevent trickery like escaping upward with ../../ in a malicious
25
25
  # app_uuid - probably not exploitable, but this is the right way to do it anyway.
26
- # use UNRESERVED instead of UNSAFE (the default) as UNSAFE doesn't include /
27
- url_encoded_app_uuid = URI.escape(app_uuid, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
26
+ url_encoded_app_uuid = CGI.escape(app_uuid)
28
27
  begin
29
28
  response = signed_mauth_connection.get("/mauth/#{@mauth_client.mauth_api_version}/security_tokens/#{url_encoded_app_uuid}.json")
30
- rescue ::Faraday::Error::ConnectionFailed, ::Faraday::Error::TimeoutError => e
29
+ rescue ::Faraday::ConnectionFailed, ::Faraday::TimeoutError => e
31
30
  msg = "mAuth service did not respond; received #{e.class}: #{e.message}"
32
31
  @mauth_client.logger.error("Unable to authenticate with MAuth. Exception #{msg}")
33
32
  raise UnableToAuthenticateError, msg
@@ -30,6 +30,8 @@ module MAuth
30
30
  def signed_headers(object, attributes = {})
31
31
  if v2_only_sign_requests?
32
32
  signed_headers_v2(object, attributes)
33
+ elsif v1_only_sign_requests?
34
+ signed_headers_v1(object, attributes)
33
35
  else # by default sign with both the v1 and v2 protocol
34
36
  signed_headers_v1(object, attributes).merge(signed_headers_v2(object, attributes))
35
37
  end
@@ -7,6 +7,8 @@ common: &common
7
7
  private_key_file: config/mauth_key
8
8
  v2_only_authenticate: <%= configured.v2_only_authenticate || 'false' %>
9
9
  v2_only_sign_requests: <%= configured.v2_only_sign_requests || 'false' %>
10
+ disable_fallback_to_v1_on_v2_failure: <%= configured.disable_fallback_to_v1_on_v2_failure || 'false' %>
11
+ v1_only_sign_requests: <%= configured.v1_only_sign_requests || 'true' %>
10
12
 
11
13
  production:
12
14
  <<: *common
@@ -1,4 +1,5 @@
1
1
  require 'digest'
2
+ require 'addressable'
2
3
 
3
4
  module MAuth
4
5
  # module which composes a string to sign.
@@ -25,7 +26,7 @@ module MAuth
25
26
  # for responses:
26
27
  # string_to_sign =
27
28
  # status_code_string + <LF> +
28
- # response_body_digest + <LF> +
29
+ # response_body + <LF> +
29
30
  # app_uuid + <LF> +
30
31
  # current_seconds_since_epoch
31
32
  def string_to_sign_v1(more_attributes)
@@ -59,9 +60,10 @@ module MAuth
59
60
 
60
61
  # memoization of body_digest to avoid hashing three times when we call
61
62
  # string_to_sign_v2 three times in client#signature_valid_v2!
62
- # note that if :body is nil we hash an empty string ("")
63
- attrs_with_overrides[:body_digest] ||= Digest::SHA512.hexdigest(attrs_with_overrides[:body].to_s)
64
- attrs_with_overrides[:encoded_query_params] = encode_query_string(attrs_with_overrides[:query_string].to_s)
63
+ # note that if :body is nil we hash an empty string ('')
64
+ attrs_with_overrides[:body_digest] ||= Digest::SHA512.hexdigest(attrs_with_overrides[:body] || '')
65
+ attrs_with_overrides[:encoded_query_params] = unescape_encode_query_string(attrs_with_overrides[:query_string] || '')
66
+ attrs_with_overrides[:request_url] = normalize_path(attrs_with_overrides[:request_url])
65
67
 
66
68
  missing_attributes = self.class::SIGNATURE_COMPONENTS_V2.reject do |key|
67
69
  attrs_with_overrides.dig(key)
@@ -74,16 +76,30 @@ module MAuth
74
76
  end
75
77
 
76
78
  self.class::SIGNATURE_COMPONENTS_V2.map do |k|
77
- attrs_with_overrides[k].to_s.force_encoding('UTF-8')
79
+ attrs_with_overrides[k].to_s.dup.force_encoding('UTF-8')
78
80
  end.join("\n")
79
81
  end
80
82
 
83
+ # Addressable::URI.parse(path).normalize.to_s.squeeze('/')
84
+ def normalize_path(path)
85
+ return if path.nil?
86
+
87
+ # Addressable::URI.normalize_path normalizes `.` and `..` in path
88
+ # i.e. /./example => /example ; /example/.. => /
89
+ # String#squeeze removes duplicated slahes i.e. /// => /
90
+ # String#gsub normalizes percent encoding to uppercase i.e. %cf%80 => %CF%80
91
+ Addressable::URI.normalize_path(path).squeeze('/').
92
+ gsub(/%[a-f0-9]{2}/, &:upcase)
93
+ end
94
+
81
95
  # sorts query string parameters by codepoint, uri encodes keys and values,
82
96
  # and rejoins parameters into a query string
83
- def encode_query_string(q_string)
84
- q_string.split('&').sort.map do |part|
85
- k, e, v = part.partition('=')
86
- uri_escape(k) + e + uri_escape(v)
97
+ def unescape_encode_query_string(q_string)
98
+ fir = q_string.split('&').map do |part|
99
+ k, _eq, v = part.partition('=')
100
+ [CGI.unescape(k), CGI.unescape(v)]
101
+ end.sort.map do |k, v|
102
+ "#{uri_escape(k)}=#{uri_escape(v)}"
87
103
  end.join('&')
88
104
  end
89
105
 
@@ -115,23 +131,17 @@ module MAuth
115
131
  # - #x_mws_authentication which returns that header's value
116
132
  # - #x_mws_time
117
133
  module Signed
118
- # mauth_client will authenticate with the highest protocol version present and ignore other
119
- # protocol versions.
134
+ # mauth_client will authenticate with the highest protocol version present and if authentication fails,
135
+ # will fall back to lower protocol versions (if provided).
120
136
  # returns a hash with keys :token, :app_uuid, and :signature parsed from the MCC-Authentication header
121
137
  # if it is present and if not then the X-MWS-Authentication header if it is present.
122
138
  # Note MWSV2 protocol no longer allows more than one space between the token and app uuid.
123
139
  def signature_info
124
- @signature_info ||= begin
125
- match = if mcc_authentication
126
- mcc_authentication.match(
127
- /\A(#{MAuth::Client::MWSV2_TOKEN}) ([^:]+):([^:]+)#{MAuth::Client::AUTH_HEADER_DELIMITER}\z/
128
- )
129
- elsif x_mws_authentication
130
- x_mws_authentication.match(/\A([^ ]+) *([^:]+):([^:]+)\z/)
131
- end
132
-
133
- match ? { token: match[1], app_uuid: match[2], signature: match[3] } : {}
134
- end
140
+ @signature_info ||= build_signature_info(mcc_data || x_mws_data)
141
+ end
142
+
143
+ def fall_back_to_mws_signature_info
144
+ @signature_info = build_signature_info(x_mws_data)
135
145
  end
136
146
 
137
147
  def signature_app_uuid
@@ -153,6 +163,22 @@ module MAuth
153
163
  1
154
164
  end
155
165
  end
166
+
167
+ private
168
+
169
+ def build_signature_info(match_data)
170
+ match_data ? { token: match_data[1], app_uuid: match_data[2], signature: match_data[3] } : {}
171
+ end
172
+
173
+ def mcc_data
174
+ mcc_authentication&.match(
175
+ /\A(#{MAuth::Client::MWSV2_TOKEN}) ([^:]+):([^:]+)#{MAuth::Client::AUTH_HEADER_DELIMITER}\z/
176
+ )
177
+ end
178
+
179
+ def x_mws_data
180
+ x_mws_authentication&.match(/\A([^ ]+) *([^:]+):([^:]+)\z/)
181
+ end
156
182
  end
157
183
 
158
184
  # virtual base class for signable requests
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module MAuth
2
- VERSION = '5.0.1'.freeze
4
+ VERSION = '6.1.1'
3
5
  end
@@ -18,13 +18,15 @@ 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.9', '< 2.0'
22
+ spec.add_dependency 'faraday_middleware', '>= 0.9', '< 2.0'
23
23
  spec.add_dependency 'term-ansicolor', '~> 1.0'
24
24
  spec.add_dependency 'coderay', '~> 1.0'
25
25
  spec.add_dependency 'rack'
26
26
  spec.add_dependency 'dice_bag', '>= 0.9', '< 2.0'
27
+ spec.add_dependency 'addressable', '~> 2.0'
27
28
 
29
+ spec.add_development_dependency 'appraisal'
28
30
  spec.add_development_dependency 'bundler', '>= 1.17'
29
31
  spec.add_development_dependency 'byebug'
30
32
  spec.add_development_dependency 'rack-test', '~> 1.1.0'
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: 5.0.1
4
+ version: 6.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Szenher
@@ -11,36 +11,48 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2019-08-07 00:00:00.000000000 Z
14
+ date: 2020-09-15 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.9'
23
+ - - "<"
21
24
  - !ruby/object:Gem::Version
22
- version: '0.7'
25
+ version: '2.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.9'
33
+ - - "<"
28
34
  - !ruby/object:Gem::Version
29
- version: '0.7'
35
+ version: '2.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'
44
56
  - !ruby/object:Gem::Dependency
45
57
  name: term-ansicolor
46
58
  requirement: !ruby/object:Gem::Requirement
@@ -103,6 +115,34 @@ dependencies:
103
115
  - - "<"
104
116
  - !ruby/object:Gem::Version
105
117
  version: '2.0'
118
+ - !ruby/object:Gem::Dependency
119
+ name: addressable
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '2.0'
125
+ type: :runtime
126
+ prerelease: false
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '2.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'
106
146
  - !ruby/object:Gem::Dependency
107
147
  name: bundler
108
148
  requirement: !ruby/object:Gem::Requirement
@@ -228,8 +268,10 @@ extra_rdoc_files: []
228
268
  files:
229
269
  - ".fossa.yml"
230
270
  - ".gitignore"
271
+ - ".rspec"
231
272
  - ".travis.yml"
232
273
  - ".yardopts"
274
+ - Appraisals
233
275
  - CHANGELOG.md
234
276
  - CONTRIBUTING.md
235
277
  - Gemfile
@@ -248,6 +290,8 @@ files:
248
290
  - examples/mauth_key
249
291
  - exe/mauth-client
250
292
  - exe/mauth-proxy
293
+ - gemfiles/faraday_0.x.gemfile
294
+ - gemfiles/faraday_1.x.gemfile
251
295
  - lib/mauth-client.rb
252
296
  - lib/mauth/autoload.rb
253
297
  - lib/mauth/client.rb
@@ -290,8 +334,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
290
334
  - !ruby/object:Gem::Version
291
335
  version: '0'
292
336
  requirements: []
293
- rubyforge_project:
294
- rubygems_version: 2.7.7
337
+ rubygems_version: 3.0.8
295
338
  signing_key:
296
339
  specification_version: 4
297
340
  summary: Sign and authenticate requests and responses with mAuth authentication.