oauthenticator 1.2.0 → 1.3.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 +7 -7
- data/CHANGELOG.md +6 -0
- data/lib/oauthenticator/parse_authorization.rb +1 -1
- data/lib/oauthenticator/rack_authenticator.rb +16 -3
- data/lib/oauthenticator/signable_request.rb +5 -5
- data/lib/oauthenticator/signed_request.rb +19 -19
- data/lib/oauthenticator/version.rb +1 -1
- metadata +174 -115
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
5
|
-
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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(
|
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(
|
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
|
-
|
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
|
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)).
|
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)).
|
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)).
|
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
|
|
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.
|
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
|
-
|
13
|
-
|
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
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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
|
-
|
28
|
-
requirements:
|
29
|
-
- - ~>
|
30
|
-
- !ruby/object:Gem::Version
|
31
|
-
version:
|
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
|
-
|
38
|
-
requirements:
|
39
|
-
- - ~>
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version:
|
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
|
-
|
48
|
-
requirements:
|
49
|
-
- - ~>
|
50
|
-
- !ruby/object:Gem::Version
|
51
|
-
version:
|
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
|
-
|
58
|
-
requirements:
|
59
|
-
-
|
60
|
-
-
|
61
|
-
|
62
|
-
|
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
|
-
|
69
|
-
requirements:
|
70
|
-
-
|
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
|
-
|
77
|
-
requirements:
|
78
|
-
-
|
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
|
-
|
85
|
-
requirements:
|
86
|
-
-
|
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
|
-
|
93
|
-
requirements:
|
94
|
-
-
|
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
|
-
|
101
|
-
requirements:
|
102
|
-
-
|
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
|
-
|
109
|
-
requirements:
|
110
|
-
-
|
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
|
-
|
117
|
-
requirements:
|
118
|
-
-
|
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
|
-
|
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
|
-
|
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
|
-
-
|
168
|
-
|
169
|
-
|
170
|
-
|
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.
|
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:
|