jwt 1.5.2 → 1.5.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +13 -5
  2. data/.codeclimate.yml +20 -0
  3. data/.gitignore +6 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +2 -0
  6. data/.travis.yml +13 -0
  7. data/Gemfile +4 -0
  8. data/README.md +29 -11
  9. data/Rakefile +1 -18
  10. data/lib/jwt.rb +19 -75
  11. data/lib/jwt/decode.rb +56 -0
  12. data/lib/jwt/error.rb +12 -0
  13. data/lib/jwt/json.rb +9 -25
  14. data/lib/jwt/verify.rb +98 -0
  15. data/lib/jwt/version.rb +23 -0
  16. data/ruby-jwt.gemspec +29 -0
  17. data/spec/fixtures/certs/ec256-private.pem +8 -0
  18. data/spec/fixtures/certs/ec256-public.pem +4 -0
  19. data/spec/fixtures/certs/ec256-wrong-private.pem +8 -0
  20. data/spec/fixtures/certs/ec256-wrong-public.pem +4 -0
  21. data/spec/fixtures/certs/ec384-private.pem +9 -0
  22. data/spec/fixtures/certs/ec384-public.pem +5 -0
  23. data/spec/fixtures/certs/ec384-wrong-private.pem +9 -0
  24. data/spec/fixtures/certs/ec384-wrong-public.pem +5 -0
  25. data/spec/fixtures/certs/ec512-private.pem +10 -0
  26. data/spec/fixtures/certs/ec512-public.pem +6 -0
  27. data/spec/fixtures/certs/ec512-wrong-private.pem +10 -0
  28. data/spec/fixtures/certs/ec512-wrong-public.pem +6 -0
  29. data/spec/fixtures/certs/rsa-1024-private.pem +15 -0
  30. data/spec/fixtures/certs/rsa-1024-public.pem +6 -0
  31. data/spec/fixtures/certs/rsa-2048-private.pem +27 -0
  32. data/spec/fixtures/certs/rsa-2048-public.pem +9 -0
  33. data/spec/fixtures/certs/rsa-2048-wrong-private.pem +27 -0
  34. data/spec/fixtures/certs/rsa-2048-wrong-public.pem +9 -0
  35. data/spec/fixtures/certs/rsa-4096-private.pem +51 -0
  36. data/spec/fixtures/certs/rsa-4096-public.pem +14 -0
  37. data/spec/jwt/verify_spec.rb +175 -0
  38. data/spec/jwt_spec.rb +1 -181
  39. data/spec/spec_helper.rb +2 -3
  40. metadata +145 -28
  41. data/jwt.gemspec +0 -34
@@ -1,5 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require 'jwt'
3
+ require 'jwt/decode'
3
4
 
4
5
  describe JWT do
5
6
  let(:payload) { { 'user_id' => 'some@user.tld' } }
@@ -188,52 +189,6 @@ describe JWT do
188
189
  end
189
190
  end
190
191
 
191
- context 'expiration claim' do
192
- let(:exp) { Time.now.to_i - 5 }
193
- let(:leeway) { 10 }
194
-
195
- let :token do
196
- payload.merge!(exp: exp)
197
-
198
- JWT.encode payload, data[:secret]
199
- end
200
-
201
- it 'old token should raise JWT::ExpiredSignature' do
202
- expect do
203
- JWT.decode token, data[:secret]
204
- end.to raise_error JWT::ExpiredSignature
205
- end
206
-
207
- it 'should handle leeway' do
208
- expect do
209
- JWT.decode token, data[:secret], true, leeway: leeway
210
- end.not_to raise_error
211
- end
212
- end
213
-
214
- context 'not before claim' do
215
- let(:nbf) { Time.now.to_i + 5 }
216
- let(:leeway) { 10 }
217
-
218
- let :token do
219
- payload.merge!(nbf: nbf)
220
-
221
- JWT.encode payload, data[:secret]
222
- end
223
-
224
- it 'future token should raise JWT::ImmatureSignature' do
225
- expect do
226
- JWT.decode token, data[:secret]
227
- end.to raise_error JWT::ImmatureSignature
228
- end
229
-
230
- it 'should handle leeway' do
231
- expect do
232
- JWT.decode token, data[:secret], true, leeway: leeway
233
- end.not_to raise_error
234
- end
235
- end
236
-
237
192
  context 'issuer claim' do
238
193
  let(:iss) { 'ruby-jwt-gem' }
239
194
  let(:invalid_token) { JWT.encode payload, data[:secret] }
@@ -248,140 +203,6 @@ describe JWT do
248
203
  JWT.decode token, data[:secret], true, iss: iss
249
204
  end.not_to raise_error
250
205
  end
251
-
252
- it 'invalid iss should raise JWT::InvalidIssuerError' do
253
- expect do
254
- JWT.decode token, data[:secret], true, iss: 'wrong-issuer', verify_iss: true
255
- end.to raise_error JWT::InvalidIssuerError
256
- end
257
-
258
- it 'with missing iss claim should raise JWT::InvalidIssuerError' do
259
- missing_iss_claim_token = JWT.encode payload, data[:secret]
260
-
261
- expect do
262
- JWT.decode missing_iss_claim_token, data[:secret], true, verify_iss: true, iss: iss
263
- end.to raise_error(JWT::InvalidIssuerError, /received <none>/)
264
- end
265
-
266
- it 'valid iss should not raise JWT::InvalidIssuerError' do
267
- expect do
268
- JWT.decode token, data[:secret], true, iss: iss, verify_iss: true
269
- end.not_to raise_error
270
- end
271
- end
272
-
273
- context 'issued at claim' do
274
- let(:iat) { Time.now.to_i }
275
- let(:new_payload) { payload.merge(iat: iat) }
276
- let(:token) { JWT.encode new_payload, data[:secret] }
277
- let(:invalid_token) { JWT.encode new_payload.merge('iat' => iat + 60), data[:secret] }
278
- let(:leeway) { 30 }
279
-
280
- it 'invalid iat should raise JWT::InvalidIatError' do
281
- expect do
282
- JWT.decode invalid_token, data[:secret], true, verify_iat: true
283
- end.to raise_error JWT::InvalidIatError
284
- end
285
-
286
- it 'should accept leeway' do
287
- expect do
288
- JWT.decode invalid_token, data[:secret], true, verify_iat: true, leeway: 70
289
- end.to_not raise_error
290
- end
291
-
292
- it 'valid iat should not raise JWT::InvalidIatError' do
293
- expect do
294
- JWT.decode token, data[:secret], true, verify_iat: true
295
- end.to_not raise_error
296
- end
297
- end
298
-
299
- context 'audience claim' do
300
- let(:simple_aud) { 'ruby-jwt-audience' }
301
- let(:array_aud) { %w(ruby-jwt-aud test-aud ruby-ruby-ruby) }
302
-
303
- let :simple_token do
304
- new_payload = payload.merge('aud' => simple_aud)
305
- JWT.encode new_payload, data[:secret]
306
- end
307
-
308
- let :array_token do
309
- new_payload = payload.merge('aud' => array_aud)
310
- JWT.encode new_payload, data[:secret]
311
- end
312
-
313
- it 'invalid aud should raise JWT::InvalidAudError' do
314
- expect do
315
- JWT.decode simple_token, data[:secret], true, aud: 'wrong audience', verify_aud: true
316
- end.to raise_error JWT::InvalidAudError
317
-
318
- expect do
319
- JWT.decode array_token, data[:secret], true, aud: %w(wrong audience), verify_aud: true
320
- end.to raise_error JWT::InvalidAudError
321
- end
322
-
323
- it 'valid aud should not raise JWT::InvalidAudError' do
324
- expect do
325
- JWT.decode simple_token, data[:secret], true, 'aud' => simple_aud, :verify_aud => true
326
- end.to_not raise_error
327
-
328
- expect do
329
- JWT.decode array_token, data[:secret], true, 'aud' => array_aud.first, :verify_aud => true
330
- end.to_not raise_error
331
- end
332
- end
333
-
334
- context 'subject claim' do
335
- let(:sub) { 'ruby jwt subject' }
336
-
337
- let :token do
338
- new_payload = payload.merge('sub' => sub)
339
- JWT.encode new_payload, data[:secret]
340
- end
341
-
342
- let :invalid_token do
343
- new_payload = payload.merge('sub' => 'we are not the druids you are looking for')
344
- JWT.encode new_payload, data[:secret]
345
- end
346
-
347
- it 'invalid sub should raise JWT::InvalidSubError' do
348
- expect do
349
- JWT.decode invalid_token, data[:secret], true, sub: sub, verify_sub: true
350
- end.to raise_error JWT::InvalidSubError
351
- end
352
-
353
- it 'valid sub should not raise JWT::InvalidSubError' do
354
- expect do
355
- JWT.decode token, data[:secret], true, 'sub' => sub, :verify_sub => true
356
- end.to_not raise_error
357
- end
358
- end
359
-
360
- context 'jwt id claim' do
361
- let :jti do
362
- new_payload = payload.merge('iat' => Time.now.to_i)
363
- key = data[:secret]
364
- new_payload.merge('jti' => Digest::MD5.hexdigest("#{key}:#{new_payload['iat']}"))
365
- end
366
-
367
- let(:token) { JWT.encode jti, data[:secret] }
368
-
369
- let :invalid_token do
370
- jti.delete('iat')
371
- JWT.encode jti, data[:secret]
372
- end
373
-
374
- it 'invalid jti should raise JWT::InvalidJtiError' do
375
- expect do
376
- JWT.decode invalid_token, data[:secret], true, :verify_jti => true, 'jti' => jti['jti']
377
- end.to raise_error JWT::InvalidJtiError
378
- end
379
-
380
- it 'valid jti should not raise JWT::InvalidJtiError' do
381
- expect do
382
- JWT.decode token, data[:secret], true, verify_jti: true, jti: jti['jti']
383
- end.to_not raise_error
384
- end
385
206
  end
386
207
  end
387
208
 
@@ -408,5 +229,4 @@ describe JWT do
408
229
  expect(JWT.secure_compare('Foo', 'Bar')).to eq false
409
230
  end
410
231
  end
411
-
412
232
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  require 'rspec'
3
2
  require 'simplecov'
4
3
  require 'simplecov-json'
@@ -7,10 +6,10 @@ require 'codeclimate-test-reporter'
7
6
  SimpleCov.configure do
8
7
  root File.join(File.dirname(__FILE__), '..')
9
8
  project_name 'Ruby JWT - Ruby JSON Web Token implementation'
10
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
9
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
11
10
  SimpleCov::Formatter::HTMLFormatter,
12
11
  SimpleCov::Formatter::JSONFormatter
13
- ]
12
+ ])
14
13
 
15
14
  add_filter 'spec'
16
15
  end
metadata CHANGED
@@ -1,75 +1,192 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jwt
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 1.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Lindsay
8
+ - Tim Rudat
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2015-10-27 00:00:00.000000000 Z
12
+ date: 2016-03-24 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
- name: echoe
15
+ name: bundler
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
- - - ">="
18
+ - - ! '>='
18
19
  - !ruby/object:Gem::Version
19
- version: 4.6.3
20
+ version: '0'
20
21
  type: :development
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
- - - ">="
25
+ - - ! '>='
25
26
  - !ruby/object:Gem::Version
26
- version: 4.6.3
27
- description: JSON Web Token implementation in Ruby
28
- email: progrium@gmail.com
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rspec
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: simplecov
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: simplecov-json
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: codeclimate-test-reporter
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ! '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ description: A pure ruby implementation of the RFC 7519 OAuth JSON Web Token (JWT)
99
+ standard.
100
+ email: timrudat@gmail.com
29
101
  executables: []
30
102
  extensions: []
31
- extra_rdoc_files:
32
- - README.md
33
- - LICENSE
34
- - lib/jwt.rb
35
- - lib/jwt/json.rb
103
+ extra_rdoc_files: []
36
104
  files:
105
+ - .codeclimate.yml
106
+ - .gitignore
107
+ - .rspec
108
+ - .rubocop.yml
109
+ - .travis.yml
110
+ - Gemfile
37
111
  - LICENSE
38
112
  - Manifest
39
113
  - README.md
40
114
  - Rakefile
41
- - jwt.gemspec
42
115
  - lib/jwt.rb
116
+ - lib/jwt/decode.rb
117
+ - lib/jwt/error.rb
43
118
  - lib/jwt/json.rb
119
+ - lib/jwt/verify.rb
120
+ - lib/jwt/version.rb
121
+ - ruby-jwt.gemspec
122
+ - spec/fixtures/certs/ec256-private.pem
123
+ - spec/fixtures/certs/ec256-public.pem
124
+ - spec/fixtures/certs/ec256-wrong-private.pem
125
+ - spec/fixtures/certs/ec256-wrong-public.pem
126
+ - spec/fixtures/certs/ec384-private.pem
127
+ - spec/fixtures/certs/ec384-public.pem
128
+ - spec/fixtures/certs/ec384-wrong-private.pem
129
+ - spec/fixtures/certs/ec384-wrong-public.pem
130
+ - spec/fixtures/certs/ec512-private.pem
131
+ - spec/fixtures/certs/ec512-public.pem
132
+ - spec/fixtures/certs/ec512-wrong-private.pem
133
+ - spec/fixtures/certs/ec512-wrong-public.pem
134
+ - spec/fixtures/certs/rsa-1024-private.pem
135
+ - spec/fixtures/certs/rsa-1024-public.pem
136
+ - spec/fixtures/certs/rsa-2048-private.pem
137
+ - spec/fixtures/certs/rsa-2048-public.pem
138
+ - spec/fixtures/certs/rsa-2048-wrong-private.pem
139
+ - spec/fixtures/certs/rsa-2048-wrong-public.pem
140
+ - spec/fixtures/certs/rsa-4096-private.pem
141
+ - spec/fixtures/certs/rsa-4096-public.pem
142
+ - spec/jwt/verify_spec.rb
44
143
  - spec/jwt_spec.rb
45
144
  - spec/spec_helper.rb
46
- homepage: http://github.com/progrium/ruby-jwt
145
+ homepage: http://github.com/jwt/ruby-jwt
47
146
  licenses:
48
147
  - MIT
49
148
  metadata: {}
50
149
  post_install_message:
51
- rdoc_options:
52
- - "--line-numbers"
53
- - "--title"
54
- - Jwt
55
- - "--main"
56
- - README.md
150
+ rdoc_options: []
57
151
  require_paths:
58
152
  - lib
59
153
  required_ruby_version: !ruby/object:Gem::Requirement
60
154
  requirements:
61
- - - ">="
155
+ - - ! '>='
62
156
  - !ruby/object:Gem::Version
63
157
  version: '0'
64
158
  required_rubygems_version: !ruby/object:Gem::Requirement
65
159
  requirements:
66
- - - ">="
160
+ - - ! '>='
67
161
  - !ruby/object:Gem::Version
68
- version: '1.2'
162
+ version: '0'
69
163
  requirements: []
70
- rubyforge_project: jwt
71
- rubygems_version: 2.4.8
164
+ rubyforge_project:
165
+ rubygems_version: 2.5.2
72
166
  signing_key:
73
167
  specification_version: 4
74
168
  summary: JSON Web Token implementation in Ruby
75
- test_files: []
169
+ test_files:
170
+ - spec/fixtures/certs/ec256-private.pem
171
+ - spec/fixtures/certs/ec256-public.pem
172
+ - spec/fixtures/certs/ec256-wrong-private.pem
173
+ - spec/fixtures/certs/ec256-wrong-public.pem
174
+ - spec/fixtures/certs/ec384-private.pem
175
+ - spec/fixtures/certs/ec384-public.pem
176
+ - spec/fixtures/certs/ec384-wrong-private.pem
177
+ - spec/fixtures/certs/ec384-wrong-public.pem
178
+ - spec/fixtures/certs/ec512-private.pem
179
+ - spec/fixtures/certs/ec512-public.pem
180
+ - spec/fixtures/certs/ec512-wrong-private.pem
181
+ - spec/fixtures/certs/ec512-wrong-public.pem
182
+ - spec/fixtures/certs/rsa-1024-private.pem
183
+ - spec/fixtures/certs/rsa-1024-public.pem
184
+ - spec/fixtures/certs/rsa-2048-private.pem
185
+ - spec/fixtures/certs/rsa-2048-public.pem
186
+ - spec/fixtures/certs/rsa-2048-wrong-private.pem
187
+ - spec/fixtures/certs/rsa-2048-wrong-public.pem
188
+ - spec/fixtures/certs/rsa-4096-private.pem
189
+ - spec/fixtures/certs/rsa-4096-public.pem
190
+ - spec/jwt/verify_spec.rb
191
+ - spec/jwt_spec.rb
192
+ - spec/spec_helper.rb
@@ -1,34 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- # stub: jwt 1.5.2 ruby lib
3
-
4
- Gem::Specification.new do |s|
5
- s.name = "jwt"
6
- s.version = "1.5.2"
7
-
8
- s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
9
- s.require_paths = ["lib"]
10
- s.authors = ["Jeff Lindsay"]
11
- s.date = "2015-10-27"
12
- s.description = "JSON Web Token implementation in Ruby"
13
- s.email = "progrium@gmail.com"
14
- s.extra_rdoc_files = ["README.md", "LICENSE", "lib/jwt.rb", "lib/jwt/json.rb"]
15
- s.files = ["LICENSE", "Manifest", "README.md", "Rakefile", "jwt.gemspec", "lib/jwt.rb", "lib/jwt/json.rb", "spec/jwt_spec.rb", "spec/spec_helper.rb"]
16
- s.homepage = "http://github.com/progrium/ruby-jwt"
17
- s.licenses = ["MIT"]
18
- s.rdoc_options = ["--line-numbers", "--title", "Jwt", "--main", "README.md"]
19
- s.rubyforge_project = "jwt"
20
- s.rubygems_version = "2.4.8"
21
- s.summary = "JSON Web Token implementation in Ruby"
22
-
23
- if s.respond_to? :specification_version then
24
- s.specification_version = 4
25
-
26
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
27
- s.add_development_dependency(%q<echoe>, [">= 4.6.3"])
28
- else
29
- s.add_dependency(%q<echoe>, [">= 4.6.3"])
30
- end
31
- else
32
- s.add_dependency(%q<echoe>, [">= 4.6.3"])
33
- end
34
- end