json-jwt 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of json-jwt might be problematic. Click here for more details.

data/Gemfile.lock CHANGED
@@ -1,15 +1,21 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- json-jwt (0.0.2)
4
+ json-jwt (0.0.3)
5
+ activesupport (>= 2.3)
6
+ i18n
5
7
  json (>= 1.4.3)
6
8
  url_safe_base64
7
9
 
8
10
  GEM
9
11
  remote: http://rubygems.org/
10
12
  specs:
13
+ activesupport (3.1.0)
14
+ multi_json (~> 1.0)
11
15
  diff-lcs (1.1.3)
16
+ i18n (0.6.0)
12
17
  json (1.6.1)
18
+ multi_json (1.0.3)
13
19
  rake (0.9.2)
14
20
  rcov (0.9.10)
15
21
  rspec (2.6.0)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
data/json-jwt.gemspec CHANGED
@@ -12,6 +12,8 @@ Gem::Specification.new do |s|
12
12
  s.require_paths = ["lib"]
13
13
  s.add_runtime_dependency "json", ">= 1.4.3"
14
14
  s.add_runtime_dependency "url_safe_base64"
15
+ s.add_runtime_dependency "activesupport", ">= 2.3"
16
+ s.add_runtime_dependency "i18n"
15
17
  s.add_development_dependency "rake", ">= 0.8"
16
18
  s.add_development_dependency "rcov", ">= 0.9"
17
19
  s.add_development_dependency "rspec", ">= 2"
data/lib/json/jws.rb CHANGED
@@ -21,7 +21,7 @@ module JSON
21
21
  private
22
22
 
23
23
  def algorithm
24
- header[:alg] || header['alg']
24
+ header[:alg]
25
25
  end
26
26
 
27
27
  def digest
data/lib/json/jwt.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'openssl'
2
2
  require 'url_safe_base64'
3
3
  require 'json'
4
+ require 'active_support/core_ext'
4
5
 
5
6
  module JSON
6
7
  class JWT < Hash
@@ -27,8 +28,7 @@ module JSON
27
28
  end
28
29
 
29
30
  def verify(signature_base_string, signature = '', public_key_or_secret = nil)
30
- case header[:alg]
31
- when :none
31
+ if header[:alg].to_s == 'none'
32
32
  signature == '' or raise VerificationFailed
33
33
  else
34
34
  JWS.new(self).verify(signature_base_string, signature, public_key_or_secret)
@@ -45,15 +45,24 @@ module JSON
45
45
  end.join('.')
46
46
  end
47
47
 
48
+ def [](key)
49
+ if key.respond_to? :to_sym
50
+ super key.to_sym or
51
+ super key.to_s
52
+ else
53
+ super
54
+ end
55
+ end
56
+
48
57
  class << self
49
58
  def decode(jwt_string, public_key_or_secret = nil)
50
59
  raise InvalidFormat.new('Invalid JWT Format. JWT should include 2 dots.') unless jwt_string.count('.') == 2
51
- header, claims, signature = jwt_string.split('.').collect do |segment|
60
+ header, claims, signature = jwt_string.split('.', 3).collect do |segment|
52
61
  UrlSafeBase64.decode64 segment.to_s
53
62
  end
54
- signature_base_string = jwt_string.split('.')[0,2].join('.')
63
+ signature_base_string = jwt_string.split('.')[0, 2].join('.')
55
64
  jwt = new JSON.parse(claims)
56
- jwt.header = JSON.parse header
65
+ jwt.header = JSON.parse(header).with_indifferent_access
57
66
  jwt.verify signature_base_string, signature, public_key_or_secret
58
67
  jwt
59
68
  rescue JSON::ParserError
@@ -75,4 +84,4 @@ module JSON
75
84
  end
76
85
 
77
86
  require 'json/jws'
78
- require 'json/jwe'
87
+ require 'json/jwe'
@@ -87,15 +87,20 @@ describe JSON::JWS do
87
87
  let(:header) { decoded.header }
88
88
  it 'should be parsed successfully' do
89
89
  header['typ'].should == 'JWT'
90
+ header[:typ].should == 'JWT'
90
91
  header['alg'].should == alg.to_s
92
+ header[:alg].should == alg.to_s
91
93
  end
92
94
  end
93
95
 
94
96
  describe 'claims' do
95
97
  it 'should be parsed successfully' do
96
98
  decoded['iss'].should == 'joe'
99
+ decoded[:iss].should == 'joe'
97
100
  decoded['exp'].should == 1300819380
101
+ decoded[:exp].should == 1300819380
98
102
  decoded['http://example.com/is_root'] == true
103
+ decoded[:'http://example.com/is_root'] == true
99
104
  end
100
105
  end
101
106
  end
@@ -41,14 +41,14 @@ describe JSON::JWT do
41
41
  context 'when not signed nor encrypted' do
42
42
  context 'no signature given' do
43
43
  it do
44
- jwt.verify(no_signed.chop).should be_true
44
+ jwt.verify(no_signed).should be_true
45
45
  end
46
46
  end
47
47
 
48
48
  context 'otherwise' do
49
49
  it do
50
50
  expect do
51
- jwt.verify(no_signed.chop, 'signature')
51
+ jwt.verify(no_signed, 'signature')
52
52
  end.should raise_error JSON::JWT::VerificationFailed
53
53
  end
54
54
  end
@@ -64,4 +64,14 @@ describe JSON::JWT do
64
64
  end
65
65
  end
66
66
  end
67
- end
67
+
68
+ describe '.decode' do
69
+ context 'when not signed nor encrypted' do
70
+ context 'no signature given' do
71
+ it do
72
+ JSON::JWT.decode(no_signed).should == jwt.with_indifferent_access
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
metadata CHANGED
@@ -1,82 +1,101 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: json-jwt
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
4
5
  prerelease:
5
- version: 0.0.3
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - nov matake
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-09-21 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2011-12-12 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: json
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70225743843840 !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
23
21
  version: 1.4.3
24
22
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
23
+ prerelease: false
24
+ version_requirements: *70225743843840
25
+ - !ruby/object:Gem::Dependency
27
26
  name: url_safe_base64
27
+ requirement: &70225743735080 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
28
34
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
35
+ version_requirements: *70225743735080
36
+ - !ruby/object:Gem::Dependency
37
+ name: activesupport
38
+ requirement: &70225743717540 !ruby/object:Gem::Requirement
30
39
  none: false
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: "0"
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '2.3'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70225743717540
47
+ - !ruby/object:Gem::Dependency
48
+ name: i18n
49
+ requirement: &70225743696960 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
35
55
  type: :runtime
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
38
- name: rake
39
56
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
57
+ version_requirements: *70225743696960
58
+ - !ruby/object:Gem::Dependency
59
+ name: rake
60
+ requirement: &70225743690140 !ruby/object:Gem::Requirement
41
61
  none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- version: "0.8"
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0.8'
46
66
  type: :development
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
49
- name: rcov
50
67
  prerelease: false
51
- requirement: &id004 !ruby/object:Gem::Requirement
68
+ version_requirements: *70225743690140
69
+ - !ruby/object:Gem::Dependency
70
+ name: rcov
71
+ requirement: &70225743687880 !ruby/object:Gem::Requirement
52
72
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: "0.9"
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0.9'
57
77
  type: :development
58
- version_requirements: *id004
59
- - !ruby/object:Gem::Dependency
60
- name: rspec
61
78
  prerelease: false
62
- requirement: &id005 !ruby/object:Gem::Requirement
79
+ version_requirements: *70225743687880
80
+ - !ruby/object:Gem::Dependency
81
+ name: rspec
82
+ requirement: &70225743683940 !ruby/object:Gem::Requirement
63
83
  none: false
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: "2"
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '2'
68
88
  type: :development
69
- version_requirements: *id005
70
- description: JSON Web Token and its family (JSON Web Signature, JSON Web Encryption and JSON Web Key) in Ruby
71
- email:
89
+ prerelease: false
90
+ version_requirements: *70225743683940
91
+ description: JSON Web Token and its family (JSON Web Signature, JSON Web Encryption
92
+ and JSON Web Key) in Ruby
93
+ email:
72
94
  - nov@matake.jp
73
95
  executables: []
74
-
75
96
  extensions: []
76
-
77
97
  extra_rdoc_files: []
78
-
79
- files:
98
+ files:
80
99
  - .gitignore
81
100
  - .rspec
82
101
  - .travis.yml
@@ -98,32 +117,30 @@ files:
98
117
  - spec/spec_helper.rb
99
118
  homepage: https://github.com/nov/json-jwt
100
119
  licenses: []
101
-
102
120
  post_install_message:
103
121
  rdoc_options: []
104
-
105
- require_paths:
122
+ require_paths:
106
123
  - lib
107
- required_ruby_version: !ruby/object:Gem::Requirement
124
+ required_ruby_version: !ruby/object:Gem::Requirement
108
125
  none: false
109
- requirements:
110
- - - ">="
111
- - !ruby/object:Gem::Version
112
- version: "0"
113
- required_rubygems_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
114
131
  none: false
115
- requirements:
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- version: "0"
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
119
136
  requirements: []
120
-
121
137
  rubyforge_project:
122
- rubygems_version: 1.8.10
138
+ rubygems_version: 1.8.12
123
139
  signing_key:
124
140
  specification_version: 3
125
- summary: JSON Web Token and its family (JSON Web Signature, JSON Web Encryption and JSON Web Key) in Ruby
126
- test_files:
141
+ summary: JSON Web Token and its family (JSON Web Signature, JSON Web Encryption and
142
+ JSON Web Key) in Ruby
143
+ test_files:
127
144
  - spec/fixtures/rsa/private_key.pem
128
145
  - spec/fixtures/rsa/public_key.pem
129
146
  - spec/helpers/sign_key_fixture_helper.rb