oauthenticator 1.3.1 → 1.4.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2d0739deb62d222a81dc6ba95d0070a981a97a69
4
- data.tar.gz: 7a97a08a180f36d1ecfc1bec9e8feb4b7ba0645a
2
+ SHA256:
3
+ metadata.gz: 98e9bd15e6f01dd9896f6d499d3141f56614f93fd13fc9ac000c24796e74c5c2
4
+ data.tar.gz: 5479b9b613a4a0b77758a325a007e258dbeaa9b9aaa430414223737870abb7b3
5
5
  SHA512:
6
- metadata.gz: 5c3ae5a9de1a0b04dfc8449ba596e0d95e7846e2725bf02a151c97b38c71742ff0a0a553a388ebfe1a1e661079eb7574e53349fa100627d7e355eb2870cf2625
7
- data.tar.gz: 3dee24e48380e8787da2317cb51ffaf132c76785809f3d68c8659351814c2601868366a5f281a0a1f373ed5fe0af9eb8e8ecc337cff9b13eba6535c2ce1f1c79
6
+ metadata.gz: 6920168511a6582d34d4f4201e9c9d2c24adce1968389dc72e8d33878477b2a78d378aa4a140a817790ef41a8983c8ab620c631c83e6790333d7a7a3df41beff
7
+ data.tar.gz: 4260c1569b7a47d3bc1e9c3e40fb559cda77f5f1e888edeef1cb5943a927afd600f99348d0e6483a0de53005ad14707cd5e307e5509e41a138590c8190f9456f
@@ -1,3 +1,26 @@
1
+ # 1.4.0
2
+
3
+ - support signature methods HMAC-SHA256, HMAC-SHA512
4
+
5
+ # 1.3.5
6
+
7
+ - relax faraday and rack gem dependency constraints
8
+
9
+ # 1.3.4
10
+
11
+ - relax json gem dependency constraint
12
+
13
+ # 1.3.3
14
+
15
+ - env["oauth.signed_request"] contains the signed request. this makes any helper methods from the implemented
16
+ config methods module available and helps avoid code duplication (and sometimes duplicated db queries -
17
+ depending on implementation)
18
+ - fix irrelevant warning with Hash#reject called on hash with a default proc
19
+
20
+ # 1.3.2
21
+
22
+ - loosen dependency to allow rack 2.0
23
+
1
24
  # 1.3.1
2
25
 
3
26
  - set media type to the default that the adapter will use if it's not specified on a request that is expected to have a body
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # OAuthenticator
2
2
 
3
+ [![Build Status](https://travis-ci.org/notEthan/oauthenticator.svg?branch=master)](https://travis-ci.org/notEthan/oauthenticator)
4
+
3
5
  OAuthenticator signs outgoing requests with OAuth 1.0.
4
6
 
5
7
  OAuthenticator authenticates incoming OAuth 1.0 signed requests, primarily as a middleware, and forms useful
@@ -46,7 +48,10 @@ connection.get '/path'
46
48
  ```
47
49
 
48
50
  Note that `:url_encoded` is only included to illustrate that other middleware should all go before
49
- `:oauthenticator_signer`; the use of `:url_encoded` is not related to OAuthenticator.
51
+ `:oauthenticator_signer`; the use of `:url_encoded` is not related to OAuthenticator.
52
+
53
+ Note that for the RSA-SHA1 signature method, the token secret is the contents of the RSA certificate
54
+ used for signing the requests.
50
55
 
51
56
  ### Any other HTTP library
52
57
 
@@ -73,13 +78,13 @@ See the documentation for {OAuthenticator::SignableRequest} for more detailed in
73
78
 
74
79
  ### OAuth Request Body Hash
75
80
 
76
- The [OAuth Request Body Hash](https://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html)
81
+ The [OAuth Request Body Hash](https://tools.ietf.org/html/draft-eaton-oauth-bodyhash-00)
77
82
  specification is supported. By default all signing of outgoing does include the body hash. This can be
78
83
  disabled by setting the `:hash_body?` / `'hash_body?'` attribute to false when instantiating an
79
84
  OAuthenticator::SignableRequest.
80
85
 
81
86
  For info on when to include the body hash, see
82
- [When to Include the Body Hash](https://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html#when_to_include).
87
+ [When to Include the Body Hash](https://tools.ietf.org/html/draft-eaton-oauth-bodyhash-00#section-4.1.1).
83
88
 
84
89
  ## Authenticating incoming requests
85
90
 
@@ -193,7 +198,7 @@ methods it needs to function.
193
198
 
194
199
  ### OAuth Request Body Hash
195
200
 
196
- The [OAuth Request Body Hash](https://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html)
201
+ The [OAuth Request Body Hash](https://tools.ietf.org/html/draft-eaton-oauth-bodyhash-00)
197
202
  specification is supported. Requests which include the oauth_body_hash parameter are authenticated according
198
203
  to the spec.
199
204
 
@@ -4,7 +4,8 @@ Rake::TestTask.new do |t|
4
4
  t.test_files = FileList['test/**/*_test.rb']
5
5
  t.verbose = true
6
6
  end
7
- task 'default' => 'test'
7
+ require 'wwtd/tasks'
8
+ task 'default' => 'wwtd'
8
9
 
9
10
  require 'yard'
10
11
  YARD::Rake::YardocTask.new do |t|
@@ -66,9 +66,10 @@ module OAuthenticator
66
66
  end
67
67
 
68
68
  # the signature methods which the application will accept. this MUST be a subset of the signature methods
69
- # defined in the OAuth 1.0 protocol: `%w(HMAC-SHA1 RSA-SHA1 PLAINTEXT)`. the default value for this is all
70
- # allowed signature methods, and may remain unimplemented if you wish to allow all defined signature
71
- # methods.
69
+ # defined in the OAuth 1.0 protocol plus OAuthenticator-defined extensions:
70
+ # `%w(HMAC-SHA1 RSA-SHA1 PLAINTEXT HMAC-SHA512 HMAC-SHA256)`.
71
+ # the default value for this is all allowed signature methods, and may remain unimplemented if you wish
72
+ # to allow all defined signature methods.
72
73
  #
73
74
  # @return [Array<String>]
74
75
  def allowed_signature_methods
@@ -1,5 +1,5 @@
1
- require 'oauthenticator'
2
1
  require 'faraday'
2
+ require 'rack'
3
3
 
4
4
  if Faraday.respond_to?(:register_middleware)
5
5
  Faraday.register_middleware(:request, :oauthenticator_signer => proc { OAuthenticator::FaradaySigner })
@@ -30,7 +30,7 @@ module OAuthenticator
30
30
  class FaradaySigner
31
31
  # options are passed to {OAuthenticator::SignableRequest}.
32
32
  #
33
- # attributes of the request are added by the middleware, so you should not provide those as optiosn
33
+ # attributes of the request are added by the middleware, so you should not provide those as options
34
34
  # (it would not make sense to do so on the connection level).
35
35
  #
36
36
  # These are the options you should or may provide (see {OAuthenticator::SignableRequest} for details of
@@ -54,10 +54,11 @@ module OAuthenticator
54
54
 
55
55
  # do the thing
56
56
  def call(request_env)
57
+ media_type = Rack::Request.new('CONTENT_TYPE' => request_env[:request_headers]['Content-Type']).media_type
57
58
  request_attributes = {
58
59
  :request_method => request_env[:method],
59
60
  :uri => request_env[:url],
60
- :media_type => request_env[:request_headers]['Content-Type'],
61
+ :media_type => media_type,
61
62
  :body => request_env[:body]
62
63
  }
63
64
  # the adapter will set the media type to form-encoded when not otherwise specified on
@@ -33,16 +33,16 @@ module OAuthenticator
33
33
  header = header.to_s
34
34
  scanner = StringScanner.new(header)
35
35
  auth_parse_error = proc { |message| raise ParseError.new(message, {'Authorization' => [message]}) }
36
- scanner.scan(/OAuth\s*/i) || auth_parse_error.call("Authorization scheme is not OAuth - recieved: #{header}")
37
- attributes = Hash.new { |h,k| h[k] = [] }
38
- while match = scanner.scan(/(\w+)="([^"]*)"\s*(,?)\s*/)
36
+ scanner.scan(/OAuth\s*/i) || auth_parse_error.call("Authorization scheme is not OAuth - received: #{header}")
37
+ attributes = {}
38
+ while scanner.scan(/(\w+)="([^"]*)"\s*(,?)\s*/)
39
39
  key = scanner[1]
40
40
  value = scanner[2]
41
41
  comma_follows = !scanner[3].empty?
42
42
  if !comma_follows && !scanner.eos?
43
43
  auth_parse_error.call("Could not parse Authorization header: #{header}\naround or after character #{scanner.pos}: #{scanner.rest}")
44
44
  end
45
- attributes[unescape(key)] << unescape(value)
45
+ (attributes[unescape(key)] ||= []) << unescape(value)
46
46
  end
47
47
  unless scanner.eos?
48
48
  auth_parse_error.call("Could not parse Authorization header: #{header}\naround or after character #{scanner.pos}: #{scanner.rest}")
@@ -25,8 +25,8 @@ module OAuthenticator
25
25
  #
26
26
  # - `:realm` - 401 responses include a `WWW-Authenticate` with the realm set to the given value. default
27
27
  # is an empty string.
28
- def initialize(app, options={})
29
- @app=app
28
+ def initialize(app, options = {})
29
+ @app = app
30
30
  @options = options
31
31
  unless @options[:config_methods].is_a?(Module)
32
32
  raise ArgumentError, "options[:config_methods] must be a Module"
@@ -48,6 +48,7 @@ module OAuthenticator
48
48
  unauthenticated_response(oauth_request.errors)
49
49
  else
50
50
  log_success(env, oauth_request)
51
+ env["oauth.signed_request"] = oauth_request
51
52
  env["oauth.consumer_key"] = oauth_request.consumer_key
52
53
  env["oauth.token"] = oauth_request.token
53
54
  env["oauth.authenticated"] = true
@@ -33,6 +33,7 @@ end
33
33
 
34
34
  class Rack::Test::Session
35
35
  actual_process_request = instance_method(:process_request)
36
+ remove_method(:process_request)
36
37
  define_method(:process_request) do |uri, env, &block|
37
38
  oauth_attrs = Thread.current[:oauthenticator_rack_test_attributes]
38
39
  if oauth_attrs
@@ -304,9 +304,33 @@ module OAuthenticator
304
304
  #
305
305
  # @return [String]
306
306
  def hmac_sha1_signature
307
+ hmac_digest_signature(OpenSSL::Digest::SHA1)
308
+ end
309
+
310
+ # signature, with method HMAC-SHA256. OAuthenticator extension, outside of spec. do not use.
311
+ # unless you want to.
312
+ #
313
+ # @return [String]
314
+ def hmac_sha256_signature
315
+ hmac_digest_signature(OpenSSL::Digest::SHA256)
316
+ end
317
+
318
+ # signature, with method HMAC-SHA512. OAuthenticator extension, outside of spec. do not use.
319
+ # unless you want to.
320
+ #
321
+ # @return [String]
322
+ def hmac_sha512_signature
323
+ hmac_digest_signature(OpenSSL::Digest::SHA512)
324
+ end
325
+
326
+ # signature with a HMAC digest
327
+ #
328
+ # @param digest_class [Class] the digest class
329
+ # @return [String]
330
+ def hmac_digest_signature(digest_class)
307
331
  # hmac secret is same as plaintext signature
308
332
  secret = plaintext_signature
309
- Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, secret, signature_base)).gsub(/\n/, '')
333
+ Base64.encode64(OpenSSL::HMAC.digest(digest_class.new, secret, signature_base)).gsub(/\n/, '')
310
334
  end
311
335
 
312
336
  # signature, with method plaintext. section 3.4.4
@@ -320,13 +344,39 @@ module OAuthenticator
320
344
  #
321
345
  # @return [String]
322
346
  def sha1_body_hash
323
- Base64.encode64(OpenSSL::Digest::SHA1.digest(read_body)).gsub(/\n/, '')
347
+ digest_body_hash(OpenSSL::Digest::SHA1)
348
+ end
349
+
350
+ # body hash, with a signature method which uses SHA256. OAuthenticator extension, outside of spec.
351
+ # do not use. unless you want to.
352
+ #
353
+ # @return [String]
354
+ def sha256_body_hash
355
+ digest_body_hash(OpenSSL::Digest::SHA256)
356
+ end
357
+
358
+ # body hash, with a signature method which uses SHA512. OAuthenticator extension, outside of spec.
359
+ # do not use. unless you want to.
360
+ #
361
+ # @return [String]
362
+ def sha512_body_hash
363
+ digest_body_hash(OpenSSL::Digest::SHA512)
364
+ end
365
+
366
+ # body hash with a given digest
367
+ #
368
+ # @param digest_class [Class] the digest class
369
+ # @return [String]
370
+ def digest_body_hash(digest_class)
371
+ Base64.encode64(digest_class.digest(read_body)).gsub(/\n/, '')
324
372
  end
325
373
 
326
374
  # map of oauth signature methods to their signature instance methods on this class
327
375
  SIGNATURE_METHODS = {
328
376
  'RSA-SHA1'.freeze => instance_method(:rsa_sha1_signature),
329
377
  'HMAC-SHA1'.freeze => instance_method(:hmac_sha1_signature),
378
+ 'HMAC-SHA256'.freeze => instance_method(:hmac_sha256_signature),
379
+ 'HMAC-SHA512'.freeze => instance_method(:hmac_sha512_signature),
330
380
  'PLAINTEXT'.freeze => instance_method(:plaintext_signature),
331
381
  }.freeze
332
382
 
@@ -335,6 +385,8 @@ module OAuthenticator
335
385
  BODY_HASH_METHODS = {
336
386
  'RSA-SHA1'.freeze => instance_method(:sha1_body_hash),
337
387
  'HMAC-SHA1'.freeze => instance_method(:sha1_body_hash),
388
+ 'HMAC-SHA256'.freeze => instance_method(:sha256_body_hash),
389
+ 'HMAC-SHA512'.freeze => instance_method(:sha512_body_hash),
338
390
  }.freeze
339
391
  end
340
392
  end
@@ -234,13 +234,13 @@ module OAuthenticator
234
234
  require 'oauthenticator/config_methods'
235
235
  include ConfigMethods
236
236
 
237
- private
238
-
239
237
  # hash of header params. keys should be a subset of OAUTH_ATTRIBUTE_KEYS.
240
238
  def oauth_header_params
241
239
  @oauth_header_params ||= OAuthenticator.parse_authorization(authorization)
242
240
  end
243
241
 
242
+ private
243
+
244
244
  # raise a nice error message for a method that needs to be implemented on a module of config methods
245
245
  def config_method_not_implemented
246
246
  caller_name = caller[0].match(%r(in `(.*?)'))[1]
@@ -1,5 +1,5 @@
1
1
  # OAuthenticator
2
2
  module OAuthenticator
3
3
  # OAuthenticator::VERSION
4
- VERSION = "1.3.1"
4
+ VERSION = "1.4.0"
5
5
  end
@@ -8,7 +8,7 @@ describe OAuthenticator::SignedRequest do
8
8
  exc = assert_raises(NotImplementedError) do
9
9
  OAuthenticator::SignedRequest.new({}).public_send(method_without_default)
10
10
  end
11
- assert_match /included in a subclass of OAuthenticator::SignedRequest/, exc.message
11
+ assert_match(/included in a subclass of OAuthenticator::SignedRequest/, exc.message)
12
12
  end
13
13
  it "uses the method #{method_without_default} when implemented" do
14
14
  called = false
@@ -21,7 +21,7 @@ describe OAuthenticator::SignedRequest do
21
21
  exc = assert_raises(NotImplementedError) do
22
22
  OAuthenticator::RackAuthenticator.new(proc {}, {:config_methods => Module.new}).call({'HTTP_AUTHORIZATION' => %q(OAuth oauth_timestamp="1")})
23
23
  end
24
- assert_match /passed to OAuthenticator::RackAuthenticator using the option :config_methods./, exc.message
24
+ assert_match(/passed to OAuthenticator::RackAuthenticator using the option :config_methods./, exc.message)
25
25
  end
26
26
  it "complains RackAuthenticator is not given config methods" do
27
27
  assert_raises(ArgumentError) do
@@ -36,7 +36,7 @@ describe OAuthenticator::SignedRequest do
36
36
  assert_equal 2, called
37
37
  end
38
38
  it 'uses the default value for allowed signature methods' do
39
- assert_equal %w(RSA-SHA1 HMAC-SHA1 PLAINTEXT).sort, OAuthenticator::SignedRequest.new({}).allowed_signature_methods.sort
39
+ assert_equal %w(RSA-SHA1 HMAC-SHA256 HMAC-SHA512 HMAC-SHA1 PLAINTEXT).sort, OAuthenticator::SignedRequest.new({}).allowed_signature_methods.sort
40
40
  end
41
41
  it 'uses default value for body_hash_required?' do
42
42
  assert_equal false, OAuthenticator::SignedRequest.new({}).body_hash_required?
@@ -46,6 +46,23 @@ describe OAuthenticator::FaradaySigner do
46
46
  assert_response 200, '☺', response
47
47
  end
48
48
 
49
+ it 'succeeds with charset' do
50
+ signing_options = {
51
+ :signature_method => 'HMAC-SHA1',
52
+ :consumer_key => consumer_key,
53
+ :consumer_secret => consumer_secret,
54
+ :token => token,
55
+ :token_secret => token_secret,
56
+ }
57
+
58
+ connection = Faraday.new(:url => 'http://example.com', :headers => {'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8'}) do |faraday|
59
+ faraday.request :oauthenticator_signer, signing_options
60
+ faraday.adapter :rack, oapp
61
+ end
62
+ response = connection.post('/', 'a=b')
63
+ assert_response 200, '☺', response
64
+ end
65
+
49
66
  it 'is unauthorized' do
50
67
  signing_options = {
51
68
  :signature_method => 'PLAINTEXT',
@@ -592,14 +592,16 @@ describe OAuthenticator::RackAuthenticator do
592
592
  end
593
593
  end
594
594
 
595
- it 'sets oauth.authenticated, oauth.token, oauth.consumer_key' do
595
+ it 'sets oauth.authenticated, oauth.token, oauth.consumer_key, oauth.signed_request' do
596
596
  oauth_authenticated = nil
597
597
  oauth_token = nil
598
598
  oauth_consumer_key = nil
599
+ oauth_signed_request = nil
599
600
  testapp = proc do |env|
600
601
  oauth_authenticated = env['oauth.authenticated']
601
602
  oauth_token = env['oauth.token']
602
603
  oauth_consumer_key = env['oauth.consumer_key']
604
+ oauth_signed_request = env['oauth.signed_request']
603
605
  [200, {}, ['☺']]
604
606
  end
605
607
  otestapp = OAuthenticator::RackAuthenticator.new(testapp, :config_methods => OAuthenticatorTestConfigMethods)
@@ -607,6 +609,7 @@ describe OAuthenticator::RackAuthenticator do
607
609
  assert_equal(token, oauth_token)
608
610
  assert_equal(consumer_key, oauth_consumer_key)
609
611
  assert_equal(true, oauth_authenticated)
612
+ assert_kind_of(OAuthenticator::SignedRequest, oauth_signed_request)
610
613
  end
611
614
  end
612
615
  end
@@ -87,7 +87,7 @@ describe OAuthenticator::SignableRequest do
87
87
  end
88
88
  it 'does not generate timestamp' do
89
89
  request = example_request(:signature_method => 'PLAINTEXT')
90
- assert(!request.protocol_params.key?('oauth_timestapm'))
90
+ assert(!request.protocol_params.key?('oauth_timestamp'))
91
91
  end
92
92
  end
93
93
  end
@@ -127,7 +127,7 @@ describe OAuthenticator::SignableRequest do
127
127
  it 'complains about missing required params' do
128
128
  err = assert_raises(ArgumentError) { OAuthenticator::SignableRequest.new({}) }
129
129
  %w(request_method uri media_type body consumer_key signature_method).each do |required|
130
- assert_match /#{required}/, err.message
130
+ assert_match(/#{required}/, err.message)
131
131
  end
132
132
  end
133
133
  end
@@ -135,7 +135,7 @@ describe OAuthenticator::SignableRequest do
135
135
 
136
136
  describe 'the example in 3.1' do
137
137
  # a request with attributes from the oauth spec
138
- def spec_request(attributes={})
138
+ def spec_request
139
139
  example_request({
140
140
  :request_method => 'POST',
141
141
  :uri => 'http://example.com/request?b5=%3D%253D&a3=a&c%40=&a2=r%20b',
@@ -231,6 +231,20 @@ describe OAuthenticator::SignableRequest do
231
231
  end
232
232
  end
233
233
 
234
+ describe 'HMAC-SHA256' do
235
+ it 'signs with a HMAC-SHA256 digest of the signature base' do
236
+ request = example_request(
237
+ :token => 'a token',
238
+ :token_secret => 'a token secret',
239
+ :signature_method => 'HMAC-SHA256',
240
+ :nonce => 'a nonce',
241
+ :timestamp => 1397726597,
242
+ :hash_body? => false
243
+ )
244
+ assert_equal('Cb4UAr3l25eqC7p2PSm0l6j7lgXvh5SPnMOhPAJ1jWU=', request.signed_protocol_params['oauth_signature'])
245
+ end
246
+ end
247
+
234
248
  describe 'RSA-SHA1' do
235
249
  it 'signs with a RSA private key SHA1 signature' do
236
250
  request = example_request(
@@ -329,6 +343,7 @@ describe OAuthenticator::SignableRequest do
329
343
 
330
344
  it 'excludes query and fragment' do
331
345
  assert_equal('http://example.com/FooBar', example_request(:uri => 'http://example.com/FooBar?foo=bar#foobar').send(:base_string_uri))
346
+ assert_equal('http://example.com/FooBar', example_request(:uri => 'http://example.com/FooBar#foobar').send(:base_string_uri))
332
347
  end
333
348
  end
334
349
 
@@ -486,6 +501,10 @@ describe OAuthenticator::SignableRequest do
486
501
  request = example_request(:media_type => 'text/plain', :body => 'foo=bar', :signature_method => 'HMAC-SHA1')
487
502
  assert_equal('L7j0ARXdHmlcviPU+Xzlsftpfu4=', request.protocol_params['oauth_body_hash'])
488
503
  end
504
+ it 'includes by default with non-form-encoded and HMAC-SHA256' do
505
+ request = example_request(:media_type => 'text/plain', :body => 'foo=bar', :signature_method => 'HMAC-SHA256')
506
+ assert_equal('O6iQfnolIydIjfOQ7VF8Rblt6tAzYAIZvcpxB9HT+Io=', request.protocol_params['oauth_body_hash'])
507
+ end
489
508
  it 'includes by default with non-form-encoded and RSA-SHA1' do
490
509
  request = example_request(:media_type => 'text/plain', :body => 'foo=bar', :signature_method => 'RSA-SHA1', :consumer_secret => rsa_private_key)
491
510
  assert_equal('L7j0ARXdHmlcviPU+Xzlsftpfu4=', request.protocol_params['oauth_body_hash'])
@@ -498,6 +517,10 @@ describe OAuthenticator::SignableRequest do
498
517
  request = example_request(:media_type => 'application/x-www-form-urlencoded', :body => 'foo=bar', :signature_method => 'HMAC-SHA1')
499
518
  assert(!request.protocol_params.key?('oauth_body_hash'))
500
519
  end
520
+ it 'does not include by default with form-encoded and HMAC-SHA256' do
521
+ request = example_request(:media_type => 'application/x-www-form-urlencoded', :body => 'foo=bar', :signature_method => 'HMAC-SHA256')
522
+ assert(!request.protocol_params.key?('oauth_body_hash'))
523
+ end
501
524
  it 'does not include by default with form-encoded and RSA-SHA1' do
502
525
  request = example_request(:media_type => 'application/x-www-form-urlencoded', :body => 'foo=bar', :signature_method => 'RSA-SHA1', :consumer_secret => rsa_private_key)
503
526
  assert(!request.protocol_params.key?('oauth_body_hash'))
metadata CHANGED
@@ -1,181 +1,193 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oauthenticator
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ethan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-20 00:00:00.000000000 Z
11
+ date: 2021-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.4'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '3.0'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - ~>
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: '1.4'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '3.0'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: json
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - ~>
37
+ - - ">="
32
38
  - !ruby/object:Gem::Version
33
- version: '1.8'
39
+ version: '0'
34
40
  type: :runtime
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
- - - ~>
44
+ - - ">="
39
45
  - !ruby/object:Gem::Version
40
- version: '1.8'
46
+ version: '0'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: faraday
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - ~>
51
+ - - ">="
46
52
  - !ruby/object:Gem::Version
47
53
  version: '0.9'
54
+ - - "<"
55
+ - !ruby/object:Gem::Version
56
+ version: '2.0'
48
57
  type: :runtime
49
58
  prerelease: false
50
59
  version_requirements: !ruby/object:Gem::Requirement
51
60
  requirements:
52
- - - ~>
61
+ - - ">="
53
62
  - !ruby/object:Gem::Version
54
63
  version: '0.9'
64
+ - - "<"
65
+ - !ruby/object:Gem::Version
66
+ version: '2.0'
55
67
  - !ruby/object:Gem::Dependency
56
68
  name: addressable
57
69
  requirement: !ruby/object:Gem::Requirement
58
70
  requirements:
59
- - - ~>
71
+ - - "~>"
60
72
  - !ruby/object:Gem::Version
61
73
  version: '2.3'
62
74
  type: :runtime
63
75
  prerelease: false
64
76
  version_requirements: !ruby/object:Gem::Requirement
65
77
  requirements:
66
- - - ~>
78
+ - - "~>"
67
79
  - !ruby/object:Gem::Version
68
80
  version: '2.3'
69
81
  - !ruby/object:Gem::Dependency
70
82
  name: rake
71
83
  requirement: !ruby/object:Gem::Requirement
72
84
  requirements:
73
- - - '>='
85
+ - - ">="
74
86
  - !ruby/object:Gem::Version
75
87
  version: '0'
76
88
  type: :development
77
89
  prerelease: false
78
90
  version_requirements: !ruby/object:Gem::Requirement
79
91
  requirements:
80
- - - '>='
92
+ - - ">="
81
93
  - !ruby/object:Gem::Version
82
94
  version: '0'
83
95
  - !ruby/object:Gem::Dependency
84
96
  name: minitest
85
97
  requirement: !ruby/object:Gem::Requirement
86
98
  requirements:
87
- - - '>='
99
+ - - ">="
88
100
  - !ruby/object:Gem::Version
89
101
  version: '0'
90
102
  type: :development
91
103
  prerelease: false
92
104
  version_requirements: !ruby/object:Gem::Requirement
93
105
  requirements:
94
- - - '>='
106
+ - - ">="
95
107
  - !ruby/object:Gem::Version
96
108
  version: '0'
97
109
  - !ruby/object:Gem::Dependency
98
110
  name: minitest-reporters
99
111
  requirement: !ruby/object:Gem::Requirement
100
112
  requirements:
101
- - - '>='
113
+ - - ">="
102
114
  - !ruby/object:Gem::Version
103
115
  version: '0'
104
116
  type: :development
105
117
  prerelease: false
106
118
  version_requirements: !ruby/object:Gem::Requirement
107
119
  requirements:
108
- - - '>='
120
+ - - ">="
109
121
  - !ruby/object:Gem::Version
110
122
  version: '0'
111
123
  - !ruby/object:Gem::Dependency
112
124
  name: rack-test
113
125
  requirement: !ruby/object:Gem::Requirement
114
126
  requirements:
115
- - - '>='
127
+ - - ">="
116
128
  - !ruby/object:Gem::Version
117
129
  version: '0'
118
130
  type: :development
119
131
  prerelease: false
120
132
  version_requirements: !ruby/object:Gem::Requirement
121
133
  requirements:
122
- - - '>='
134
+ - - ">="
123
135
  - !ruby/object:Gem::Version
124
136
  version: '0'
125
137
  - !ruby/object:Gem::Dependency
126
138
  name: timecop
127
139
  requirement: !ruby/object:Gem::Requirement
128
140
  requirements:
129
- - - '>='
141
+ - - ">="
130
142
  - !ruby/object:Gem::Version
131
143
  version: '0'
132
144
  type: :development
133
145
  prerelease: false
134
146
  version_requirements: !ruby/object:Gem::Requirement
135
147
  requirements:
136
- - - '>='
148
+ - - ">="
137
149
  - !ruby/object:Gem::Version
138
150
  version: '0'
139
151
  - !ruby/object:Gem::Dependency
140
152
  name: simplecov
141
153
  requirement: !ruby/object:Gem::Requirement
142
154
  requirements:
143
- - - '>='
155
+ - - ">="
144
156
  - !ruby/object:Gem::Version
145
157
  version: '0'
146
158
  type: :development
147
159
  prerelease: false
148
160
  version_requirements: !ruby/object:Gem::Requirement
149
161
  requirements:
150
- - - '>='
162
+ - - ">="
151
163
  - !ruby/object:Gem::Version
152
164
  version: '0'
153
165
  - !ruby/object:Gem::Dependency
154
166
  name: api_hammer
155
167
  requirement: !ruby/object:Gem::Requirement
156
168
  requirements:
157
- - - '>='
169
+ - - ">="
158
170
  - !ruby/object:Gem::Version
159
171
  version: '0'
160
172
  type: :development
161
173
  prerelease: false
162
174
  version_requirements: !ruby/object:Gem::Requirement
163
175
  requirements:
164
- - - '>='
176
+ - - ">="
165
177
  - !ruby/object:Gem::Version
166
178
  version: '0'
167
179
  - !ruby/object:Gem::Dependency
168
180
  name: yard
169
181
  requirement: !ruby/object:Gem::Requirement
170
182
  requirements:
171
- - - '>='
183
+ - - ">="
172
184
  - !ruby/object:Gem::Version
173
185
  version: '0'
174
186
  type: :development
175
187
  prerelease: false
176
188
  version_requirements: !ruby/object:Gem::Requirement
177
189
  requirements:
178
- - - '>='
190
+ - - ">="
179
191
  - !ruby/object:Gem::Version
180
192
  version: '0'
181
193
  description: OAuthenticator signs and authenticates OAuth 1.0 requests
@@ -185,8 +197,8 @@ executables: []
185
197
  extensions: []
186
198
  extra_rdoc_files: []
187
199
  files:
188
- - .simplecov
189
- - .yardopts
200
+ - ".simplecov"
201
+ - ".yardopts"
190
202
  - CHANGELOG.md
191
203
  - LICENSE.txt
192
204
  - README.md
@@ -219,17 +231,16 @@ require_paths:
219
231
  - lib
220
232
  required_ruby_version: !ruby/object:Gem::Requirement
221
233
  requirements:
222
- - - '>='
234
+ - - ">="
223
235
  - !ruby/object:Gem::Version
224
236
  version: '0'
225
237
  required_rubygems_version: !ruby/object:Gem::Requirement
226
238
  requirements:
227
- - - '>='
239
+ - - ">="
228
240
  - !ruby/object:Gem::Version
229
241
  version: '0'
230
242
  requirements: []
231
- rubyforge_project:
232
- rubygems_version: 2.2.2
243
+ rubygems_version: 3.0.6
233
244
  signing_key:
234
245
  specification_version: 4
235
246
  summary: OAuth 1.0 request signing and authentication
@@ -243,5 +254,4 @@ test_files:
243
254
  - test/signable_request_test.rb
244
255
  - test/signed_request_test.rb
245
256
  - test/test_config_methods.rb
246
- - .simplecov
247
- has_rdoc:
257
+ - ".simplecov"