oauthenticator 1.2.0 → 1.3.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
- ---
2
- SHA1:
3
- metadata.gz: f69d23d4847799b28bcac89a56d812472727cf3d
4
- data.tar.gz: ca253660ea69d85715f8ebe2427f45744e8aec57
5
- SHA512:
6
- metadata.gz: 7f2a35dc3501fa2542095db00906675fd0f77d40a3f0356e419a35399de4a3cd6ae7086b0420723529a271b6285b33efbdcf908e2b5c55109d81437fbf5fe7e2
7
- data.tar.gz: b81c5679eb69fd602b0eb659e3be7c9f4b6df60792237a94aedcba0a47e231ecd9e6f5835fecc5a59b08ba50c42683160d2ca04a5957cccb800a6db5550622db
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1c1af0773c8a1b3a3d9c3f1868856e19413eb8d6
4
+ data.tar.gz: 7d25f481acab4498447468b50dafcbd3d3afa87c
5
+ SHA512:
6
+ metadata.gz: b087ed346c3d4919a29882e7d499cee5a316fa75e0193123617b8e18c0490c1a9791db2a2aac98bf73675736b8ff2741e4859c0c22b3c55dc78442d34bde31b9
7
+ data.tar.gz: c007f8fa60d9a7b0e1c54af75a56fe81f02faa4f449cba5030c184a59844ef9efc4f05f7a87e05101c41565f36f0ae67acff06a1f033dc2926e1985fef7a0130
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ # 1.3.0
2
+
3
+ - Make error messages fully-human readable on their own (not requiring context of the error key)
4
+ - Add error_message key to error response, with a sentence of error messages.
5
+ - clarify argument errors
6
+
1
7
  # 1.2.0
2
8
 
3
9
  - OAuthenticator::RackTestSigner / OAuthenticator.signing_rack_test
@@ -50,7 +50,7 @@ module OAuthenticator
50
50
  duplicates = attributes.reject { |k,v| v.size <= 1 }
51
51
  if duplicates.any?
52
52
  errors = duplicates.map do |k,vs|
53
- {k => "Received multiple instances of Authorization parameter #{k}. Received values were: #{vs.inspect}"}
53
+ {k => ["Received multiple instances of Authorization parameter #{k}. Received values were: #{vs.inspect}"]}
54
54
  end.inject({}, &:update)
55
55
  raise DuplicatedParameters.new("Received duplicate parameters: #{duplicates.keys.inspect}", errors)
56
56
  end
@@ -45,7 +45,7 @@ module OAuthenticator
45
45
  oauth_request = oauth_signed_request_class.from_rack_request(request)
46
46
  if oauth_request.errors
47
47
  log_unauthenticated(env, oauth_request)
48
- unauthenticated_response({'errors' => oauth_request.errors})
48
+ unauthenticated_response(oauth_request.errors)
49
49
  else
50
50
  log_success(env, oauth_request)
51
51
  env["oauth.consumer_key"] = oauth_request.consumer_key
@@ -61,11 +61,24 @@ module OAuthenticator
61
61
  # the response for an unauthenticated request. the argument will be a hash with the key 'errors', whose
62
62
  # value is a hash with string keys indicating attributes with errors, and values being arrays of strings
63
63
  # indicating error messages on the attribute key..
64
- def unauthenticated_response(error_object)
64
+ def unauthenticated_response(errors)
65
65
  # default to a blank realm, I suppose
66
66
  realm = @options[:realm] || ''
67
67
  response_headers = {"WWW-Authenticate" => %Q(OAuth realm="#{realm}"), 'Content-Type' => 'application/json'}
68
- [401, response_headers, [JSON.pretty_generate(error_object)]]
68
+
69
+ body = {'errors' => errors}
70
+ error_message = begin
71
+ error_values = errors.values.inject([], &:+)
72
+ if error_values.size <= 1
73
+ error_values.first
74
+ else
75
+ # sentencify with periods
76
+ error_values.map { |v| v =~ /\.\s*\z/ ? v : v + '.' }.join(' ')
77
+ end
78
+ end
79
+ body['error_message'] = error_message if error_message
80
+
81
+ [401, response_headers, [JSON.pretty_generate(body)]]
69
82
  end
70
83
 
71
84
  # write a log entry regarding an unauthenticated request
@@ -69,10 +69,10 @@ module OAuthenticator
69
69
  required = %w(request_method uri media_type body)
70
70
  required += %w(signature_method consumer_key) unless @attributes['authorization']
71
71
  missing = required - @attributes.keys
72
- raise ArgumentError, "missing: #{missing.inspect}" if missing.any?
72
+ raise ArgumentError, "missing required attributes: #{missing.inspect}" if missing.any?
73
73
  other_recognized = PROTOCOL_PARAM_KEYS + %w(authorization consumer_secret token_secret realm hash_body?)
74
74
  extra = @attributes.keys - (required + other_recognized)
75
- raise ArgumentError, "received unrecognized @attributes: #{extra.inspect}" if extra.any?
75
+ raise ArgumentError, "received unrecognized attributes: #{extra.inspect}" if extra.any?
76
76
 
77
77
  if @attributes['authorization']
78
78
  # this means we are signing an existing request to validate the received signature. don't use defaults.
@@ -297,7 +297,7 @@ module OAuthenticator
297
297
  # @return [String]
298
298
  def rsa_sha1_signature
299
299
  private_key = OpenSSL::PKey::RSA.new(@attributes['consumer_secret'])
300
- Base64.encode64(private_key.sign(OpenSSL::Digest::SHA1.new, signature_base)).chomp.gsub(/\n/, '')
300
+ Base64.encode64(private_key.sign(OpenSSL::Digest::SHA1.new, signature_base)).gsub(/\n/, '')
301
301
  end
302
302
 
303
303
  # signature, with method HMAC-SHA1. section 3.4.2
@@ -306,7 +306,7 @@ module OAuthenticator
306
306
  def hmac_sha1_signature
307
307
  # hmac secret is same as plaintext signature
308
308
  secret = plaintext_signature
309
- Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, secret, signature_base)).chomp.gsub(/\n/, '')
309
+ Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, secret, signature_base)).gsub(/\n/, '')
310
310
  end
311
311
 
312
312
  # signature, with method plaintext. section 3.4.4
@@ -320,7 +320,7 @@ module OAuthenticator
320
320
  #
321
321
  # @return [String]
322
322
  def sha1_body_hash
323
- Base64.encode64(OpenSSL::Digest::SHA1.digest(read_body)).chomp.gsub(/\n/, '')
323
+ Base64.encode64(OpenSSL::Digest::SHA1.digest(read_body)).gsub(/\n/, '')
324
324
  end
325
325
 
326
326
  # map of oauth signature methods to their signature instance methods on this class
@@ -112,22 +112,22 @@ module OAuthenticator
112
112
  # timestamp
113
113
  if !timestamp?
114
114
  unless signature_method == 'PLAINTEXT'
115
- errors['Authorization oauth_timestamp'] << "is missing"
115
+ errors['Authorization oauth_timestamp'] << "Authorization oauth_timestamp is missing"
116
116
  end
117
117
  elsif timestamp !~ /\A\s*\d+\s*\z/
118
- errors['Authorization oauth_timestamp'] << "is not an integer - got: #{timestamp}"
118
+ errors['Authorization oauth_timestamp'] << "Authorization oauth_timestamp is not an integer - got: #{timestamp}"
119
119
  else
120
120
  timestamp_i = timestamp.to_i
121
121
  if timestamp_i < Time.now.to_i - timestamp_valid_past
122
- errors['Authorization oauth_timestamp'] << "is too old: #{timestamp}"
122
+ errors['Authorization oauth_timestamp'] << "Authorization oauth_timestamp is too old: #{timestamp}"
123
123
  elsif timestamp_i > Time.now.to_i + timestamp_valid_future
124
- errors['Authorization oauth_timestamp'] << "is too far in the future: #{timestamp}"
124
+ errors['Authorization oauth_timestamp'] << "Authorization oauth_timestamp is too far in the future: #{timestamp}"
125
125
  end
126
126
  end
127
127
 
128
128
  # oauth version
129
129
  if version? && version != '1.0'
130
- errors['Authorization oauth_version'] << "must be 1.0; got: #{version}"
130
+ errors['Authorization oauth_version'] << "Authorization oauth_version must be 1.0; got: #{version}"
131
131
  end
132
132
 
133
133
  # she's filled with secrets
@@ -135,11 +135,11 @@ module OAuthenticator
135
135
 
136
136
  # consumer / client application
137
137
  if !consumer_key?
138
- errors['Authorization oauth_consumer_key'] << "is missing"
138
+ errors['Authorization oauth_consumer_key'] << "Authorization oauth_consumer_key is missing"
139
139
  else
140
140
  secrets[:consumer_secret] = consumer_secret
141
141
  if !secrets[:consumer_secret]
142
- errors['Authorization oauth_consumer_key'] << 'is invalid'
142
+ errors['Authorization oauth_consumer_key'] << 'Authorization oauth_consumer_key is invalid'
143
143
  end
144
144
  end
145
145
 
@@ -147,32 +147,32 @@ module OAuthenticator
147
147
  if token?
148
148
  secrets[:token_secret] = token_secret
149
149
  if !secrets[:token_secret]
150
- errors['Authorization oauth_token'] << 'is invalid'
150
+ errors['Authorization oauth_token'] << 'Authorization oauth_token is invalid'
151
151
  elsif !token_belongs_to_consumer?
152
- errors['Authorization oauth_token'] << 'does not belong to the specified consumer'
152
+ errors['Authorization oauth_token'] << 'Authorization oauth_token does not belong to the specified consumer'
153
153
  end
154
154
  end
155
155
 
156
156
  # nonce
157
157
  if !nonce?
158
158
  unless signature_method == 'PLAINTEXT'
159
- errors['Authorization oauth_nonce'] << "is missing"
159
+ errors['Authorization oauth_nonce'] << "Authorization oauth_nonce is missing"
160
160
  end
161
161
  elsif nonce_used?
162
- errors['Authorization oauth_nonce'] << "has already been used"
162
+ errors['Authorization oauth_nonce'] << "Authorization oauth_nonce has already been used"
163
163
  end
164
164
 
165
165
  # signature method
166
166
  if !signature_method?
167
- errors['Authorization oauth_signature_method'] << "is missing"
167
+ errors['Authorization oauth_signature_method'] << "Authorization oauth_signature_method is missing"
168
168
  elsif !allowed_signature_methods.any? { |sm| signature_method.downcase == sm.downcase }
169
- errors['Authorization oauth_signature_method'] << "must be one of " +
169
+ errors['Authorization oauth_signature_method'] << "Authorization oauth_signature_method must be one of " +
170
170
  "#{allowed_signature_methods.join(', ')}; got: #{signature_method}"
171
171
  end
172
172
 
173
173
  # signature
174
174
  if !signature?
175
- errors['Authorization oauth_signature'] << "is missing"
175
+ errors['Authorization oauth_signature'] << "Authorization oauth_signature is missing"
176
176
  end
177
177
 
178
178
  signable_request = SignableRequest.new(@attributes.merge(secrets).merge('authorization' => oauth_header_params))
@@ -189,21 +189,21 @@ module OAuthenticator
189
189
  if body_hash == signable_request.body_hash
190
190
  # all good
191
191
  else
192
- errors['Authorization oauth_body_hash'] << "is invalid"
192
+ errors['Authorization oauth_body_hash'] << "Authorization oauth_body_hash is invalid"
193
193
  end
194
194
  else
195
195
  # received a body hash with plaintext. weird situation - we will ignore it; signature will not
196
196
  # be verified but it will be a part of the signature.
197
197
  end
198
198
  else
199
- errors['Authorization oauth_body_hash'] << "must not be included with form-encoded requests"
199
+ errors['Authorization oauth_body_hash'] << "Authorization oauth_body_hash must not be included with form-encoded requests"
200
200
  end
201
201
  else
202
202
  # allowed?
203
203
  if !signable_request.form_encoded?
204
204
  # required?
205
205
  if body_hash_required?
206
- errors['Authorization oauth_body_hash'] << "is required (on non-form-encoded requests)"
206
+ errors['Authorization oauth_body_hash'] << "Authorization oauth_body_hash is required (on non-form-encoded requests)"
207
207
  else
208
208
  # okay - not supported by client, but allowed
209
209
  end
@@ -216,14 +216,14 @@ module OAuthenticator
216
216
 
217
217
  # proceed to check signature
218
218
  unless self.signature == signable_request.signature
219
- throw(:errors, {'Authorization oauth_signature' => ['is invalid']})
219
+ throw(:errors, {'Authorization oauth_signature' => ['Authorization oauth_signature is invalid']})
220
220
  end
221
221
 
222
222
  if nonce?
223
223
  begin
224
224
  use_nonce!
225
225
  rescue NonceUsedError
226
- throw(:errors, {'Authorization oauth_nonce' => ['has already been used']})
226
+ throw(:errors, {'Authorization oauth_nonce' => ['Authorization oauth_nonce has already been used']})
227
227
  end
228
228
  end
229
229
 
@@ -1,5 +1,5 @@
1
1
  # OAuthenticator
2
2
  module OAuthenticator
3
3
  # OAuthenticator::VERSION
4
- VERSION = "1.2.0"
4
+ VERSION = "1.3.0"
5
5
  end
metadata CHANGED
@@ -1,133 +1,196 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: oauthenticator
3
- version: !ruby/object:Gem::Version
4
- version: 1.2.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.3.0
5
5
  platform: ruby
6
- authors:
6
+ authors:
7
7
  - Ethan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
-
12
- date: 2014-06-25 00:00:00 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
11
+ date: 2014-11-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
15
14
  name: rack
16
- prerelease: false
17
- requirement: &id001 !ruby/object:Gem::Requirement
18
- requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
21
- version: "1.4"
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.4'
22
20
  type: :runtime
23
- version_requirements: *id001
24
- - !ruby/object:Gem::Dependency
25
- name: json
26
21
  prerelease: false
27
- requirement: &id002 !ruby/object:Gem::Requirement
28
- requirements:
29
- - - ~>
30
- - !ruby/object:Gem::Version
31
- version: "1.8"
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.8'
32
34
  type: :runtime
33
- version_requirements: *id002
34
- - !ruby/object:Gem::Dependency
35
- name: faraday
36
35
  prerelease: false
37
- requirement: &id003 !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ~>
40
- - !ruby/object:Gem::Version
41
- version: "0.9"
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.9'
42
48
  type: :runtime
43
- version_requirements: *id003
44
- - !ruby/object:Gem::Dependency
45
- name: addressable
46
49
  prerelease: false
47
- requirement: &id004 !ruby/object:Gem::Requirement
48
- requirements:
49
- - - ~>
50
- - !ruby/object:Gem::Version
51
- version: "2.3"
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.9'
55
+ - !ruby/object:Gem::Dependency
56
+ name: addressable
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.3'
52
62
  type: :runtime
53
- version_requirements: *id004
54
- - !ruby/object:Gem::Dependency
55
- name: rake
56
63
  prerelease: false
57
- requirement: &id005 !ruby/object:Gem::Requirement
58
- requirements:
59
- - &id006
60
- - ">="
61
- - !ruby/object:Gem::Version
62
- version: "0"
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
63
76
  type: :development
64
- version_requirements: *id005
65
- - !ruby/object:Gem::Dependency
66
- name: minitest
67
77
  prerelease: false
68
- requirement: &id007 !ruby/object:Gem::Requirement
69
- requirements:
70
- - *id006
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
71
90
  type: :development
72
- version_requirements: *id007
73
- - !ruby/object:Gem::Dependency
74
- name: minitest-reporters
75
91
  prerelease: false
76
- requirement: &id008 !ruby/object:Gem::Requirement
77
- requirements:
78
- - *id006
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: minitest-reporters
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
79
104
  type: :development
80
- version_requirements: *id008
81
- - !ruby/object:Gem::Dependency
82
- name: rack-test
83
105
  prerelease: false
84
- requirement: &id009 !ruby/object:Gem::Requirement
85
- requirements:
86
- - *id006
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rack-test
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
87
118
  type: :development
88
- version_requirements: *id009
89
- - !ruby/object:Gem::Dependency
90
- name: timecop
91
119
  prerelease: false
92
- requirement: &id010 !ruby/object:Gem::Requirement
93
- requirements:
94
- - *id006
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: timecop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
95
132
  type: :development
96
- version_requirements: *id010
97
- - !ruby/object:Gem::Dependency
98
- name: simplecov
99
133
  prerelease: false
100
- requirement: &id011 !ruby/object:Gem::Requirement
101
- requirements:
102
- - *id006
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
103
146
  type: :development
104
- version_requirements: *id011
105
- - !ruby/object:Gem::Dependency
106
- name: api_hammer
107
147
  prerelease: false
108
- requirement: &id012 !ruby/object:Gem::Requirement
109
- requirements:
110
- - *id006
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: api_hammer
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
111
160
  type: :development
112
- version_requirements: *id012
113
- - !ruby/object:Gem::Dependency
114
- name: yard
115
161
  prerelease: false
116
- requirement: &id013 !ruby/object:Gem::Requirement
117
- requirements:
118
- - *id006
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: yard
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
119
174
  type: :development
120
- version_requirements: *id013
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
121
181
  description: OAuthenticator signs and authenticates OAuth 1.0 requests
122
- email:
182
+ email:
123
183
  - ethan@unth
124
184
  executables: []
125
-
126
185
  extensions: []
127
-
128
186
  extra_rdoc_files: []
129
-
130
- files:
187
+ files:
188
+ - ".simplecov"
189
+ - ".yardopts"
190
+ - CHANGELOG.md
191
+ - LICENSE.txt
192
+ - README.md
193
+ - Rakefile.rb
131
194
  - lib/oauthenticator.rb
132
195
  - lib/oauthenticator/config_methods.rb
133
196
  - lib/oauthenticator/faraday_signer.rb
@@ -137,11 +200,6 @@ files:
137
200
  - lib/oauthenticator/signable_request.rb
138
201
  - lib/oauthenticator/signed_request.rb
139
202
  - lib/oauthenticator/version.rb
140
- - .yardopts
141
- - LICENSE.txt
142
- - CHANGELOG.md
143
- - README.md
144
- - Rakefile.rb
145
203
  - test/config_methods_test.rb
146
204
  - test/faraday_signer_test.rb
147
205
  - test/helper.rb
@@ -151,31 +209,31 @@ files:
151
209
  - test/signable_request_test.rb
152
210
  - test/signed_request_test.rb
153
211
  - test/test_config_methods.rb
154
- - .simplecov
155
212
  homepage: https://github.com/notEthan/oauthenticator
156
- licenses:
213
+ licenses:
157
214
  - MIT
158
215
  metadata: {}
159
-
160
216
  post_install_message:
161
217
  rdoc_options: []
162
-
163
- require_paths:
218
+ require_paths:
164
219
  - lib
165
- required_ruby_version: !ruby/object:Gem::Requirement
166
- requirements:
167
- - *id006
168
- required_rubygems_version: !ruby/object:Gem::Requirement
169
- requirements:
170
- - *id006
220
+ required_ruby_version: !ruby/object:Gem::Requirement
221
+ requirements:
222
+ - - ">="
223
+ - !ruby/object:Gem::Version
224
+ version: '0'
225
+ required_rubygems_version: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
171
230
  requirements: []
172
-
173
231
  rubyforge_project:
174
- rubygems_version: 2.0.14
232
+ rubygems_version: 2.2.2
175
233
  signing_key:
176
234
  specification_version: 4
177
235
  summary: OAuth 1.0 request signing and authentication
178
- test_files:
236
+ test_files:
179
237
  - test/config_methods_test.rb
180
238
  - test/faraday_signer_test.rb
181
239
  - test/helper.rb
@@ -185,4 +243,5 @@ test_files:
185
243
  - test/signable_request_test.rb
186
244
  - test/signed_request_test.rb
187
245
  - test/test_config_methods.rb
188
- - .simplecov
246
+ - ".simplecov"
247
+ has_rdoc: