openid_connect 0.0.12 → 0.0.13

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,12 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- openid_connect (0.0.11)
4
+ openid_connect (0.0.12)
5
5
  activemodel (>= 3)
6
6
  attr_required (>= 0.0.3)
7
7
  json (>= 1.4.3)
8
8
  jwt (>= 0.1.3)
9
9
  rack-oauth2 (>= 0.9)
10
+ swd (>= 0.0.1)
10
11
  tzinfo
11
12
  validate_email
12
13
  validate_url
@@ -53,6 +54,12 @@ GEM
53
54
  rspec-expectations (2.6.0)
54
55
  diff-lcs (~> 1.1.2)
55
56
  rspec-mocks (2.6.0)
57
+ swd (0.0.1)
58
+ activesupport (>= 3)
59
+ attr_required (>= 0.0.3)
60
+ httpclient (>= 2.2.1)
61
+ i18n
62
+ json (>= 1.4.3)
56
63
  treetop (1.4.10)
57
64
  polyglot
58
65
  polyglot (>= 0.3.1)
data/README.rdoc CHANGED
@@ -10,7 +10,7 @@ OpenID Connect Server & Client Library
10
10
 
11
11
  * View Source on GitHub (https://github.com/nov/openid_connect)
12
12
  * Report Issues on GitHub (https://github.com/nov/openid_connect/issues)
13
- * Subscribe Update Info (https://www.facebook.com/pages/OpenID-Connect/134681459957370)
13
+ * Subscribe Update Info (https://www.facebook.com/OpenIDConnect.rb)
14
14
 
15
15
  == Examples
16
16
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.12
1
+ 0.0.13
@@ -6,4 +6,5 @@ require 'openid_connect/exception'
6
6
  require 'openid_connect/client'
7
7
  require 'openid_connect/access_token'
8
8
  require 'openid_connect/response_object'
9
- require 'openid_connect/server/id_token'
9
+ require 'openid_connect/server'
10
+ require 'openid_connect/discovery'
@@ -23,13 +23,13 @@ module OpenIDConnect
23
23
  when 200
24
24
  JSON.parse(res.body).with_indifferent_access
25
25
  when 400
26
- raise BadRequest.new('API Access Faild')
26
+ raise BadRequest.new('API Access Faild', res)
27
27
  when 401
28
- raise Unauthorized.new('Access Token Invalid or Expired')
28
+ raise Unauthorized.new('Access Token Invalid or Expired', res)
29
29
  when 403
30
- raise Forbidden.new('Insufficient Scope')
30
+ raise Forbidden.new('Insufficient Scope', res)
31
31
  else
32
- raise HttpError.new(res.status, 'Unknown HttpError')
32
+ raise HttpError.new(res.status, 'Unknown HttpError', res)
33
33
  end
34
34
  end
35
35
  end
@@ -0,0 +1,9 @@
1
+ module OpenIDConnect
2
+ module Discovery
3
+ class InvalidIdentifier < Exception; end
4
+ class DiscoveryFailed < Exception; end
5
+ end
6
+ end
7
+
8
+ require 'openid_connect/discovery/principal'
9
+ require 'openid_connect/discovery/provider'
@@ -0,0 +1,38 @@
1
+ require 'swd'
2
+
3
+ module OpenIDConnect
4
+ module Discovery
5
+ class Principal
6
+ attr_reader :identifier, :host
7
+
8
+ def initialize(identifier)
9
+ raise InvalidIdentifier if identifier.blank?
10
+ type = case identifier
11
+ when /^(=|@|!)/
12
+ XRI
13
+ when /@/
14
+ Email
15
+ else
16
+ URI
17
+ end
18
+ principal = type.new identifier
19
+ @identifier = principal.identifier
20
+ @host = principal.host
21
+ end
22
+
23
+ def discover!
24
+ SWD.discover!(
25
+ :principal => identifier,
26
+ :service => 'http://openid.net/specs/connect/1.0/issuer',
27
+ :host => host
28
+ )
29
+ rescue SWD::Exception => e
30
+ raise DiscoveryFailed.new(e.message)
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ require 'openid_connect/discovery/principal/email'
37
+ require 'openid_connect/discovery/principal/uri'
38
+ require 'openid_connect/discovery/principal/xri'
@@ -0,0 +1,12 @@
1
+ module OpenIDConnect
2
+ module Discovery
3
+ class Principal
4
+ class Email < Principal
5
+ def initialize(identifier)
6
+ @identifier = identifier
7
+ @host = identifier.split('@').last
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,25 @@
1
+ module OpenIDConnect
2
+ module Discovery
3
+ class Principal
4
+ class URI < Principal
5
+ def initialize(identifier)
6
+ uri = normalize(identifier)
7
+ @identifier = uri.to_s
8
+ @host = uri.host
9
+ end
10
+
11
+ private
12
+
13
+ def normalize(identifier)
14
+ uri = ::URI.parse(identifier)
15
+ if uri.host.blank?
16
+ uri.host, uri.path = uri.path.split('/', 2)
17
+ uri.path = File.join('/', uri.path)
18
+ end
19
+ uri.scheme ||= 'https'
20
+ uri
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,11 @@
1
+ module OpenIDConnect
2
+ module Discovery
3
+ class Principal
4
+ class XRI < Principal
5
+ def initialize(identifier)
6
+ @identifier = identifier
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module OpenIDConnect
2
+ module Discovery
3
+ module Provider
4
+ def self.discover!(identifier)
5
+ Principal.new(identifier).discover!
6
+ end
7
+ end
8
+ end
9
+ end
10
+
11
+ require 'openid_connect/discovery/provider/config'
@@ -0,0 +1,11 @@
1
+ module OpenIDConnect
2
+ module Discovery
3
+ module Provider
4
+ class Config
5
+ def self.discover!(host)
6
+ # TODO
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -3,7 +3,7 @@ module OpenIDConnect
3
3
 
4
4
  class HttpError < Exception
5
5
  attr_accessor :status, :response
6
- def initialize(status, message, response = nil)
6
+ def initialize(status, message = nil, response = nil)
7
7
  super message
8
8
  @status = status
9
9
  @response = response
@@ -46,7 +46,7 @@ module OpenIDConnect
46
46
  end
47
47
 
48
48
  def validate!
49
- raise ValidationFailed.new(errors) unless valid?
49
+ valid? or raise ValidationFailed.new(errors)
50
50
  end
51
51
  end
52
52
  end
@@ -0,0 +1 @@
1
+ require 'openid_connect/server/id_token'
@@ -4,12 +4,11 @@ module Rack::OAuth2::Server
4
4
  klass.send :attr_optional, :id_token, :private_key
5
5
  klass.class_eval do
6
6
  def jwt_string
7
- case id_token
8
- when String
9
- id_token
10
- when OpenIDConnect::ResponseObject::IdToken
7
+ if id_token.is_a? OpenIDConnect::ResponseObject::IdToken
11
8
  raise AttrRequired::AttrMissing.new('private_key is required') unless private_key
12
9
  id_token.to_jwt private_key
10
+ else
11
+ id_token
13
12
  end
14
13
  end
15
14
 
@@ -10,13 +10,14 @@ Gem::Specification.new do |s|
10
10
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
11
11
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
12
  s.require_paths = ["lib"]
13
+ s.add_runtime_dependency "json", ">= 1.4.3"
14
+ s.add_runtime_dependency "tzinfo"
15
+ s.add_runtime_dependency "attr_required", ">= 0.0.3"
13
16
  s.add_runtime_dependency "activemodel", ">= 3"
14
17
  s.add_runtime_dependency "validate_url"
15
18
  s.add_runtime_dependency "validate_email"
16
- s.add_runtime_dependency "tzinfo"
17
19
  s.add_runtime_dependency "jwt", ">= 0.1.3"
18
- s.add_runtime_dependency "json", ">= 1.4.3"
19
- s.add_runtime_dependency "attr_required", ">= 0.0.3"
20
+ s.add_runtime_dependency "swd", ">= 0.0.1"
20
21
  s.add_runtime_dependency "rack-oauth2", ">= 0.9"
21
22
  s.add_development_dependency "rake", ">= 0.8"
22
23
  s.add_development_dependency "rcov", ">= 0.9"
@@ -34,8 +34,7 @@ describe OpenIDConnect::AccessToken do
34
34
  :iss => 'https://server.example.com',
35
35
  :user_id => 'user_id',
36
36
  :aud => 'client_id',
37
- :exp => 1313424327,
38
- :secret => 'secret'
37
+ :exp => 1313424327
39
38
  )
40
39
  end
41
40
  its(:id_token) { should be_a OpenIDConnect::ResponseObject::IdToken }
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe OpenIDConnect::Discovery::Principal::Email do
4
+ it :TODO
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe OpenIDConnect::Discovery::Principal::URI do
4
+ it :TODO
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe OpenIDConnect::Discovery::Principal::XRI do
4
+ it :TODO
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe OpenIDConnect::Discovery::Principal do
4
+ it :TODO
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe OpenIDConnect::Discovery do
4
+ it :TODO
5
+ end
@@ -47,7 +47,11 @@ describe OpenIDConnect::ResponseObject::IdToken do
47
47
  describe '#as_json' do
48
48
  subject { id_token.as_json }
49
49
  let(:attributes) { required_attributes }
50
- it { should_not include :secret }
50
+ it do
51
+ hash = required_attributes
52
+ hash[:exp] = required_attributes[:exp].to_i
53
+ should == hash
54
+ end
51
55
  end
52
56
 
53
57
  describe '.from_jwt' do
@@ -7,8 +7,9 @@ describe OpenIDConnect::ResponseObject do
7
7
  validates :required, :inclusion => {:in => ['Required', 'required']}, :length => 1..10
8
8
  end
9
9
 
10
- subject { klass.new attributes }
11
- let(:klass) { OpenIDConnect::ResponseObject::SubClass }
10
+ subject { instance }
11
+ let(:klass) { OpenIDConnect::ResponseObject::SubClass }
12
+ let(:instance) { klass.new attributes }
12
13
  let :attributes do
13
14
  {:required => 'Required', :optional => 'Optional'}
14
15
  end
@@ -46,24 +47,45 @@ describe OpenIDConnect::ResponseObject do
46
47
  end
47
48
 
48
49
  describe '#as_json' do
49
- its(:as_json) do
50
- should == {:required => 'Required', :optional => 'Optional'}
50
+ context 'when valid' do
51
+ its(:as_json) do
52
+ should == attributes
53
+ end
54
+ end
55
+
56
+ context 'otherwise' do
57
+ let :attributes do
58
+ {:required => 'Out of List and Too Long'}
59
+ end
60
+
61
+ it 'should raise OpenIDConnect::ResponseObject::ValidationFailed with ActiveModel::Errors' do
62
+ expect { instance.as_json }.should raise_error(OpenIDConnect::ResponseObject::ValidationFailed) { |e|
63
+ e.message.should include 'Required is not included in the list'
64
+ e.message.should include 'Required is too long (maximum is 10 characters)'
65
+ e.errors.should be_a ActiveModel::Errors
66
+ }
67
+ end
51
68
  end
52
69
  end
53
70
 
54
71
  describe '#validate!' do
55
- let(:invalid) do
56
- instance = klass.new attributes
57
- instance.required = 'Out of List and Too Long'
58
- instance
72
+ context 'when valid' do
73
+ subject { instance.validate! }
74
+ it { should be_true }
59
75
  end
60
76
 
61
- it 'should raise OpenIDConnect::ResponseObject::ValidationFailed with ActiveModel::Errors' do
62
- expect { invalid.validate! }.should raise_error(OpenIDConnect::ResponseObject::ValidationFailed) { |e|
63
- e.message.should include 'Required is not included in the list'
64
- e.message.should include 'Required is too long (maximum is 10 characters)'
65
- e.errors.should be_a ActiveModel::Errors
66
- }
77
+ context 'otherwise' do
78
+ let :attributes do
79
+ {:required => 'Out of List and Too Long'}
80
+ end
81
+
82
+ it 'should raise OpenIDConnect::ResponseObject::ValidationFailed with ActiveModel::Errors' do
83
+ expect { instance.validate! }.should raise_error(OpenIDConnect::ResponseObject::ValidationFailed) { |e|
84
+ e.message.should include 'Required is not included in the list'
85
+ e.message.should include 'Required is too long (maximum is 10 characters)'
86
+ e.errors.should be_a ActiveModel::Errors
87
+ }
88
+ end
67
89
  end
68
90
  end
69
91
  end
@@ -11,8 +11,7 @@ describe Rack::OAuth2::Server::Authorize::Token do
11
11
  :iss => 'https://server.example.com',
12
12
  :user_id => 'user_id',
13
13
  :aud => 'client_id',
14
- :exp => 1313424327,
15
- :secret => 'secret'
14
+ :exp => 1313424327
16
15
  )
17
16
  end
18
17
 
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openid_connect
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
5
4
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 12
10
- version: 0.0.12
5
+ version: 0.0.13
11
6
  platform: ruby
12
7
  authors:
13
8
  - nov matake
@@ -15,187 +10,151 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-08-18 00:00:00 Z
13
+ date: 2011-08-19 00:00:00 Z
19
14
  dependencies:
20
15
  - !ruby/object:Gem::Dependency
21
- name: activemodel
16
+ name: json
22
17
  prerelease: false
23
18
  requirement: &id001 !ruby/object:Gem::Requirement
24
19
  none: false
25
20
  requirements:
26
21
  - - ">="
27
22
  - !ruby/object:Gem::Version
28
- hash: 5
29
- segments:
30
- - 3
31
- version: "3"
23
+ version: 1.4.3
32
24
  type: :runtime
33
25
  version_requirements: *id001
34
26
  - !ruby/object:Gem::Dependency
35
- name: validate_url
27
+ name: tzinfo
36
28
  prerelease: false
37
29
  requirement: &id002 !ruby/object:Gem::Requirement
38
30
  none: false
39
31
  requirements:
40
32
  - - ">="
41
33
  - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
34
  version: "0"
46
35
  type: :runtime
47
36
  version_requirements: *id002
48
37
  - !ruby/object:Gem::Dependency
49
- name: validate_email
38
+ name: attr_required
50
39
  prerelease: false
51
40
  requirement: &id003 !ruby/object:Gem::Requirement
52
41
  none: false
53
42
  requirements:
54
43
  - - ">="
55
44
  - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
45
+ version: 0.0.3
60
46
  type: :runtime
61
47
  version_requirements: *id003
62
48
  - !ruby/object:Gem::Dependency
63
- name: tzinfo
49
+ name: activemodel
64
50
  prerelease: false
65
51
  requirement: &id004 !ruby/object:Gem::Requirement
66
52
  none: false
67
53
  requirements:
68
54
  - - ">="
69
55
  - !ruby/object:Gem::Version
70
- hash: 3
71
- segments:
72
- - 0
73
- version: "0"
56
+ version: "3"
74
57
  type: :runtime
75
58
  version_requirements: *id004
76
59
  - !ruby/object:Gem::Dependency
77
- name: jwt
60
+ name: validate_url
78
61
  prerelease: false
79
62
  requirement: &id005 !ruby/object:Gem::Requirement
80
63
  none: false
81
64
  requirements:
82
65
  - - ">="
83
66
  - !ruby/object:Gem::Version
84
- hash: 29
85
- segments:
86
- - 0
87
- - 1
88
- - 3
89
- version: 0.1.3
67
+ version: "0"
90
68
  type: :runtime
91
69
  version_requirements: *id005
92
70
  - !ruby/object:Gem::Dependency
93
- name: json
71
+ name: validate_email
94
72
  prerelease: false
95
73
  requirement: &id006 !ruby/object:Gem::Requirement
96
74
  none: false
97
75
  requirements:
98
76
  - - ">="
99
77
  - !ruby/object:Gem::Version
100
- hash: 1
101
- segments:
102
- - 1
103
- - 4
104
- - 3
105
- version: 1.4.3
78
+ version: "0"
106
79
  type: :runtime
107
80
  version_requirements: *id006
108
81
  - !ruby/object:Gem::Dependency
109
- name: attr_required
82
+ name: jwt
110
83
  prerelease: false
111
84
  requirement: &id007 !ruby/object:Gem::Requirement
112
85
  none: false
113
86
  requirements:
114
87
  - - ">="
115
88
  - !ruby/object:Gem::Version
116
- hash: 25
117
- segments:
118
- - 0
119
- - 0
120
- - 3
121
- version: 0.0.3
89
+ version: 0.1.3
122
90
  type: :runtime
123
91
  version_requirements: *id007
124
92
  - !ruby/object:Gem::Dependency
125
- name: rack-oauth2
93
+ name: swd
126
94
  prerelease: false
127
95
  requirement: &id008 !ruby/object:Gem::Requirement
128
96
  none: false
129
97
  requirements:
130
98
  - - ">="
131
99
  - !ruby/object:Gem::Version
132
- hash: 25
133
- segments:
134
- - 0
135
- - 9
136
- version: "0.9"
100
+ version: 0.0.1
137
101
  type: :runtime
138
102
  version_requirements: *id008
139
103
  - !ruby/object:Gem::Dependency
140
- name: rake
104
+ name: rack-oauth2
141
105
  prerelease: false
142
106
  requirement: &id009 !ruby/object:Gem::Requirement
143
107
  none: false
144
108
  requirements:
145
109
  - - ">="
146
110
  - !ruby/object:Gem::Version
147
- hash: 27
148
- segments:
149
- - 0
150
- - 8
111
+ version: "0.9"
112
+ type: :runtime
113
+ version_requirements: *id009
114
+ - !ruby/object:Gem::Dependency
115
+ name: rake
116
+ prerelease: false
117
+ requirement: &id010 !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
151
122
  version: "0.8"
152
123
  type: :development
153
- version_requirements: *id009
124
+ version_requirements: *id010
154
125
  - !ruby/object:Gem::Dependency
155
126
  name: rcov
156
127
  prerelease: false
157
- requirement: &id010 !ruby/object:Gem::Requirement
128
+ requirement: &id011 !ruby/object:Gem::Requirement
158
129
  none: false
159
130
  requirements:
160
131
  - - ">="
161
132
  - !ruby/object:Gem::Version
162
- hash: 25
163
- segments:
164
- - 0
165
- - 9
166
133
  version: "0.9"
167
134
  type: :development
168
- version_requirements: *id010
135
+ version_requirements: *id011
169
136
  - !ruby/object:Gem::Dependency
170
137
  name: rspec
171
138
  prerelease: false
172
- requirement: &id011 !ruby/object:Gem::Requirement
139
+ requirement: &id012 !ruby/object:Gem::Requirement
173
140
  none: false
174
141
  requirements:
175
142
  - - ">="
176
143
  - !ruby/object:Gem::Version
177
- hash: 7
178
- segments:
179
- - 2
180
144
  version: "2"
181
145
  type: :development
182
- version_requirements: *id011
146
+ version_requirements: *id012
183
147
  - !ruby/object:Gem::Dependency
184
148
  name: webmock
185
149
  prerelease: false
186
- requirement: &id012 !ruby/object:Gem::Requirement
150
+ requirement: &id013 !ruby/object:Gem::Requirement
187
151
  none: false
188
152
  requirements:
189
153
  - - ">="
190
154
  - !ruby/object:Gem::Version
191
- hash: 11
192
- segments:
193
- - 1
194
- - 6
195
- - 2
196
155
  version: 1.6.2
197
156
  type: :development
198
- version_requirements: *id012
157
+ version_requirements: *id013
199
158
  description: OpenID Connect Server & Client Library
200
159
  email:
201
160
  - nov@matake.jp
@@ -217,12 +176,20 @@ files:
217
176
  - lib/openid_connect.rb
218
177
  - lib/openid_connect/access_token.rb
219
178
  - lib/openid_connect/client.rb
179
+ - lib/openid_connect/discovery.rb
180
+ - lib/openid_connect/discovery/principal.rb
181
+ - lib/openid_connect/discovery/principal/email.rb
182
+ - lib/openid_connect/discovery/principal/uri.rb
183
+ - lib/openid_connect/discovery/principal/xri.rb
184
+ - lib/openid_connect/discovery/provider.rb
185
+ - lib/openid_connect/discovery/provider/config.rb
220
186
  - lib/openid_connect/exception.rb
221
187
  - lib/openid_connect/response_object.rb
222
188
  - lib/openid_connect/response_object/id_token.rb
223
189
  - lib/openid_connect/response_object/user_info.rb
224
190
  - lib/openid_connect/response_object/user_info/open_id.rb
225
191
  - lib/openid_connect/response_object/user_info/open_id/address.rb
192
+ - lib/openid_connect/server.rb
226
193
  - lib/openid_connect/server/id_token.rb
227
194
  - lib/openid_connect/server/id_token/error.rb
228
195
  - lib/rack/oauth2/server/id_token_response.rb
@@ -239,6 +206,11 @@ files:
239
206
  - spec/mock_response/user_info/openid.json
240
207
  - spec/openid_connect/access_token_spec.rb
241
208
  - spec/openid_connect/client_spec.rb
209
+ - spec/openid_connect/discovery/principal/email_spec.rb
210
+ - spec/openid_connect/discovery/principal/uri_spec.rb
211
+ - spec/openid_connect/discovery/principal/xri_spec.rb
212
+ - spec/openid_connect/discovery/principal_spec.rb
213
+ - spec/openid_connect/discovery_spec.rb
242
214
  - spec/openid_connect/exception_spec.rb
243
215
  - spec/openid_connect/response_object/id_token_spec.rb
244
216
  - spec/openid_connect/response_object/user_info/open_id/address_spec.rb
@@ -263,18 +235,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
263
235
  requirements:
264
236
  - - ">="
265
237
  - !ruby/object:Gem::Version
266
- hash: 3
267
- segments:
268
- - 0
269
238
  version: "0"
270
239
  required_rubygems_version: !ruby/object:Gem::Requirement
271
240
  none: false
272
241
  requirements:
273
242
  - - ">="
274
243
  - !ruby/object:Gem::Version
275
- hash: 3
276
- segments:
277
- - 0
278
244
  version: "0"
279
245
  requirements: []
280
246
 
@@ -296,6 +262,11 @@ test_files:
296
262
  - spec/mock_response/user_info/openid.json
297
263
  - spec/openid_connect/access_token_spec.rb
298
264
  - spec/openid_connect/client_spec.rb
265
+ - spec/openid_connect/discovery/principal/email_spec.rb
266
+ - spec/openid_connect/discovery/principal/uri_spec.rb
267
+ - spec/openid_connect/discovery/principal/xri_spec.rb
268
+ - spec/openid_connect/discovery/principal_spec.rb
269
+ - spec/openid_connect/discovery_spec.rb
299
270
  - spec/openid_connect/exception_spec.rb
300
271
  - spec/openid_connect/response_object/id_token_spec.rb
301
272
  - spec/openid_connect/response_object/user_info/open_id/address_spec.rb