json-jwt 0.0.3 → 0.0.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.
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