jwt 1.5.2 → 1.5.4

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.
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