openid_connect 0.0.15 → 0.0.16

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,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- openid_connect (0.0.14)
4
+ openid_connect (0.0.15)
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.3)
10
+ swd (>= 0.0.4)
11
11
  tzinfo
12
12
  validate_email
13
13
  validate_url
@@ -54,7 +54,7 @@ GEM
54
54
  rspec-expectations (2.6.0)
55
55
  diff-lcs (~> 1.1.2)
56
56
  rspec-mocks (2.6.0)
57
- swd (0.0.3)
57
+ swd (0.0.4)
58
58
  activesupport (>= 3)
59
59
  attr_required (>= 0.0.3)
60
60
  httpclient (>= 2.2.1)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.15
1
+ 0.0.16
@@ -0,0 +1,50 @@
1
+ module Rack
2
+ module OAuth2
3
+ module Server
4
+ class Authorize
5
+ module Extension
6
+ class CodeAndIdToken < Abstract::Handler
7
+ class << self
8
+ def response_type_for?(response_type)
9
+ response_type.split.sort == ['code', 'id_token']
10
+ end
11
+ end
12
+
13
+ def call(env)
14
+ @request = Request.new env
15
+ @response = Response.new request
16
+ super
17
+ end
18
+
19
+ class Request < Authorize::Code::Request
20
+ def initialize(env)
21
+ super
22
+ @response_type = [:code, :id_token]
23
+ attr_missing!
24
+ end
25
+ end
26
+
27
+ class Response < Authorize::Code::Response
28
+ include IdTokenResponse
29
+ attr_required :id_token, :private_key
30
+
31
+ def protocol_params
32
+ protocol_params_without_id_token
33
+ end
34
+
35
+ def redirect_uri_with_credentials_with_id_token
36
+ _redirect_uri_ = URI.parse redirect_uri_with_credentials_without_id_token
37
+ _redirect_uri_.fragment = {
38
+ :id_token => jwt_string
39
+ }.to_query
40
+ _redirect_uri_.to_s
41
+ end
42
+ alias_method_chain :redirect_uri_with_credentials, :id_token
43
+
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,50 @@
1
+ module Rack
2
+ module OAuth2
3
+ module Server
4
+ class Authorize
5
+ module Extension
6
+ class IdToken < Abstract::Handler
7
+ class << self
8
+ def response_type_for?(response_type)
9
+ response_type == 'id_token'
10
+ end
11
+ end
12
+
13
+ def call(env)
14
+ @request = Request.new env
15
+ @response = Response.new request
16
+ super
17
+ end
18
+
19
+ class Request < Authorize::Request
20
+ def initialize(env)
21
+ super
22
+ @response_type = :id_token
23
+ attr_missing!
24
+ end
25
+
26
+ def error_params_location
27
+ :fragment
28
+ end
29
+ end
30
+
31
+ class Response < Authorize::Response
32
+ include IdTokenResponse
33
+ attr_required :id_token, :private_key
34
+
35
+ def protocol_params_location
36
+ :fragment
37
+ end
38
+
39
+ def protocol_params
40
+ super.merge(
41
+ :id_token => jwt_string
42
+ )
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,35 @@
1
+ module Rack
2
+ module OAuth2
3
+ module Server
4
+ class Authorize
5
+ module Extension
6
+ class IdTokenAndToken < Abstract::Handler
7
+ class << self
8
+ def response_type_for?(response_type)
9
+ response_type.split.sort == ['id_token', 'token']
10
+ end
11
+ end
12
+
13
+ def call(env)
14
+ @request = Request.new env
15
+ @response = Response.new request
16
+ super
17
+ end
18
+
19
+ class Request < Authorize::Token::Request
20
+ def initialize(env)
21
+ super
22
+ @response_type = [:id_token, :token]
23
+ attr_missing!
24
+ end
25
+ end
26
+
27
+ class Response < Authorize::Token::Response
28
+ attr_required :id_token, :private_key
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -5,7 +5,7 @@ module Rack::OAuth2::Server
5
5
  klass.class_eval do
6
6
  def jwt_string
7
7
  if id_token.is_a? OpenIDConnect::ResponseObject::IdToken
8
- raise AttrRequired::AttrMissing.new('private_key is required') unless private_key
8
+ raise AttrRequired::AttrMissing.new("'private_key' required.") unless private_key
9
9
  id_token.to_jwt private_key
10
10
  else
11
11
  id_token
@@ -24,3 +24,7 @@ module Rack::OAuth2::Server
24
24
  Token::Response.send :include, IdTokenResponse
25
25
  Authorize::Token::Response.send :include, IdTokenResponse
26
26
  end
27
+
28
+ require 'rack/oauth2/server/authorize/extension/code_and_id_token'
29
+ require 'rack/oauth2/server/authorize/extension/id_token'
30
+ require 'rack/oauth2/server/authorize/extension/id_token_and_token'
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.add_runtime_dependency "validate_url"
18
18
  s.add_runtime_dependency "validate_email"
19
19
  s.add_runtime_dependency "jwt", ">= 0.1.3"
20
- s.add_runtime_dependency "swd", ">= 0.0.3"
20
+ s.add_runtime_dependency "swd", ">= 0.0.4"
21
21
  s.add_runtime_dependency "rack-oauth2", ">= 0.9"
22
22
  s.add_development_dependency "rake", ">= 0.8"
23
23
  s.add_development_dependency "rcov", ">= 0.9"
@@ -1,5 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe OpenIDConnect::Discovery::Principal::Email do
4
- it :TODO
4
+ subject { email }
5
+ let(:email) { OpenIDConnect::Discovery::Principal::Email.new identifier }
6
+ let(:identifier) { 'nov@server.example.com' }
7
+
8
+ its(:identifier) { should == identifier }
9
+ its(:host) { should == 'server.example.com' }
5
10
  end
@@ -52,7 +52,10 @@ describe OpenIDConnect::Discovery::Provider do
52
52
  end
53
53
 
54
54
  context 'when Email is given' do
55
- it :TODO
55
+ let(:identifier) { "nov@#{host}" }
56
+ let(:host) { 'server.example.com' }
57
+ let(:principal) { identifier }
58
+ it_behaves_like :discover_provider
56
59
  end
57
60
 
58
61
  end
@@ -47,7 +47,7 @@ describe Rack::OAuth2::Server::Authorize::Extension::CodeAndToken do
47
47
  end
48
48
  end
49
49
  it do
50
- expect { response }.should raise_error AttrRequired::AttrMissing, 'private_key is required'
50
+ expect { response }.should raise_error AttrRequired::AttrMissing, "'private_key' required."
51
51
  end
52
52
  end
53
53
  end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ describe Rack::OAuth2::Server::Authorize::Extension::CodeAndIdToken do
4
+ subject { response }
5
+ let(:request) { Rack::MockRequest.new app }
6
+ let(:response) { request.get("/?response_type=code%20id_token&client_id=client") }
7
+ let(:redirect_uri) { 'http://client.example.com/callback' }
8
+ let(:code) { 'authorization_code' }
9
+ let :id_token do
10
+ OpenIDConnect::ResponseObject::IdToken.new(
11
+ :iss => 'https://server.example.com',
12
+ :user_id => 'user_id',
13
+ :aud => 'client_id',
14
+ :exp => 1313424327
15
+ )
16
+ end
17
+
18
+ context "when id_token is given" do
19
+ let :app do
20
+ Rack::OAuth2::Server::Authorize.new do |request, response|
21
+ response.redirect_uri = redirect_uri
22
+ response.code = code
23
+ response.id_token = id_token
24
+ response.private_key = private_key
25
+ response.approve!
26
+ end
27
+ end
28
+ its(:status) { should == 302 }
29
+ its(:location) { should == "#{redirect_uri}?code=#{code}#id_token=#{id_token.to_jwt(private_key)}" }
30
+
31
+ context 'when id_token is String' do
32
+ let(:id_token) { 'id_token' }
33
+ its(:location) { should == "#{redirect_uri}?code=#{code}#id_token=id_token" }
34
+ end
35
+
36
+ context 'when private_key is missing' do
37
+ let :app do
38
+ Rack::OAuth2::Server::Authorize.new do |request, response|
39
+ response.redirect_uri = redirect_uri
40
+ response.code = code
41
+ response.id_token = id_token
42
+ response.approve!
43
+ end
44
+ end
45
+ it do
46
+ expect { response }.should raise_error AttrRequired::AttrMissing, "'private_key' required."
47
+ end
48
+ end
49
+ end
50
+
51
+ context "otherwise" do
52
+ let :app do
53
+ Rack::OAuth2::Server::Authorize.new do |request, response|
54
+ response.redirect_uri = redirect_uri
55
+ response.code = code
56
+ response.approve!
57
+ end
58
+ end
59
+ it do
60
+ expect { response }.should raise_error AttrRequired::AttrMissing, "'id_token', 'private_key' required."
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ describe Rack::OAuth2::Server::Authorize::Extension::IdTokenAndToken do
4
+ subject { response }
5
+ let(:request) { Rack::MockRequest.new app }
6
+ let(:response) { request.get("/?response_type=token%20id_token&client_id=client") }
7
+ let(:redirect_uri) { 'http://client.example.com/callback' }
8
+ let(:bearer_token) { Rack::OAuth2::AccessToken::Bearer.new(:access_token => 'access_token') }
9
+ let :id_token do
10
+ OpenIDConnect::ResponseObject::IdToken.new(
11
+ :iss => 'https://server.example.com',
12
+ :user_id => 'user_id',
13
+ :aud => 'client_id',
14
+ :exp => 1313424327
15
+ )
16
+ end
17
+
18
+ context "when id_token is given" do
19
+ let :app do
20
+ Rack::OAuth2::Server::Authorize.new do |request, response|
21
+ response.redirect_uri = redirect_uri
22
+ response.access_token = bearer_token
23
+ response.id_token = id_token
24
+ response.private_key = private_key
25
+ response.approve!
26
+ end
27
+ end
28
+ its(:status) { should == 302 }
29
+ its(:location) { should == "#{redirect_uri}#access_token=access_token&id_token=#{id_token.to_jwt(private_key)}&token_type=bearer" }
30
+
31
+ context 'when id_token is String' do
32
+ let(:id_token) { 'id_token' }
33
+ its(:location) { should == "#{redirect_uri}#access_token=access_token&id_token=id_token&token_type=bearer" }
34
+ end
35
+
36
+ context 'when private_key is missing' do
37
+ let :app do
38
+ Rack::OAuth2::Server::Authorize.new do |request, response|
39
+ response.redirect_uri = redirect_uri
40
+ response.access_token = bearer_token
41
+ response.id_token = id_token
42
+ response.approve!
43
+ end
44
+ end
45
+ it do
46
+ expect { response }.should raise_error AttrRequired::AttrMissing, "'private_key' required."
47
+ end
48
+ end
49
+ end
50
+
51
+ context "otherwise" do
52
+ let :app do
53
+ Rack::OAuth2::Server::Authorize.new do |request, response|
54
+ response.redirect_uri = redirect_uri
55
+ response.access_token = bearer_token
56
+ response.approve!
57
+ end
58
+ end
59
+ it do
60
+ expect { response }.should raise_error AttrRequired::AttrMissing, "'id_token', 'private_key' required."
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ describe Rack::OAuth2::Server::Authorize::Extension::IdToken do
4
+ subject { response }
5
+ let(:request) { Rack::MockRequest.new app }
6
+ let(:response) { request.get("/?response_type=id_token&client_id=client") }
7
+ let(:redirect_uri) { 'http://client.example.com/callback' }
8
+ let :id_token do
9
+ OpenIDConnect::ResponseObject::IdToken.new(
10
+ :iss => 'https://server.example.com',
11
+ :user_id => 'user_id',
12
+ :aud => 'client_id',
13
+ :exp => 1313424327
14
+ )
15
+ end
16
+
17
+ context "when id_token is given" do
18
+ let :app do
19
+ Rack::OAuth2::Server::Authorize.new do |request, response|
20
+ response.redirect_uri = redirect_uri
21
+ response.id_token = id_token
22
+ response.private_key = private_key
23
+ response.approve!
24
+ end
25
+ end
26
+ its(:status) { should == 302 }
27
+ its(:location) { should == "#{redirect_uri}#id_token=#{id_token.to_jwt(private_key)}" }
28
+
29
+ context 'when id_token is String' do
30
+ let(:id_token) { 'id_token' }
31
+ its(:location) { should == "#{redirect_uri}#id_token=id_token" }
32
+ end
33
+
34
+ context 'when private_key is missing' do
35
+ let :app do
36
+ Rack::OAuth2::Server::Authorize.new do |request, response|
37
+ response.redirect_uri = redirect_uri
38
+ response.id_token = id_token
39
+ response.approve!
40
+ end
41
+ end
42
+ it do
43
+ expect { response }.should raise_error AttrRequired::AttrMissing, "'private_key' required."
44
+ end
45
+ end
46
+ end
47
+
48
+ context "otherwise" do
49
+ let :app do
50
+ Rack::OAuth2::Server::Authorize.new do |request, response|
51
+ response.redirect_uri = redirect_uri
52
+ response.approve!
53
+ end
54
+ end
55
+ it do
56
+ expect { response }.should raise_error AttrRequired::AttrMissing, "'id_token', 'private_key' required."
57
+ end
58
+ end
59
+ end
@@ -43,7 +43,7 @@ describe Rack::OAuth2::Server::Authorize::Token do
43
43
  end
44
44
  end
45
45
  it do
46
- expect { response }.should raise_error AttrRequired::AttrMissing, 'private_key is required'
46
+ expect { response }.should raise_error AttrRequired::AttrMissing, "'private_key' required."
47
47
  end
48
48
  end
49
49
  end
@@ -45,7 +45,7 @@ describe Rack::OAuth2::Server::Token::AuthorizationCode do
45
45
  end
46
46
  end
47
47
  it do
48
- expect { response }.should raise_error AttrRequired::AttrMissing, 'private_key is required'
48
+ expect { response }.should raise_error AttrRequired::AttrMissing, "'private_key' required."
49
49
  end
50
50
  end
51
51
  end
@@ -44,7 +44,7 @@ describe Rack::OAuth2::Server::Token::RefreshToken do
44
44
  end
45
45
  end
46
46
  it do
47
- expect { response }.should raise_error AttrRequired::AttrMissing, 'private_key is required'
47
+ expect { response }.should raise_error AttrRequired::AttrMissing, "'private_key' required."
48
48
  end
49
49
  end
50
50
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: openid_connect
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.15
5
+ version: 0.0.16
6
6
  platform: ruby
7
7
  authors:
8
8
  - nov matake
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-08-20 00:00:00 Z
13
+ date: 2011-08-24 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json
@@ -97,7 +97,7 @@ dependencies:
97
97
  requirements:
98
98
  - - ">="
99
99
  - !ruby/object:Gem::Version
100
- version: 0.0.3
100
+ version: 0.0.4
101
101
  type: :runtime
102
102
  version_requirements: *id008
103
103
  - !ruby/object:Gem::Dependency
@@ -194,6 +194,9 @@ files:
194
194
  - lib/openid_connect/server.rb
195
195
  - lib/openid_connect/server/id_token.rb
196
196
  - lib/openid_connect/server/id_token/error.rb
197
+ - lib/rack/oauth2/server/authorize/extension/code_and_id_token.rb
198
+ - lib/rack/oauth2/server/authorize/extension/id_token.rb
199
+ - lib/rack/oauth2/server/authorize/extension/id_token_and_token.rb
197
200
  - lib/rack/oauth2/server/id_token_response.rb
198
201
  - openid_connect.gemspec
199
202
  - spec/helpers/webmock_helper.rb
@@ -221,6 +224,9 @@ files:
221
224
  - spec/openid_connect/response_object_spec.rb
222
225
  - spec/openid_connect/server/id_token_spec.rb
223
226
  - spec/rack/oauth2/server/authorize/code_and_token_spec.rb
227
+ - spec/rack/oauth2/server/authorize/extension/code_and_id_token_spec.rb
228
+ - spec/rack/oauth2/server/authorize/extension/id_token_and_token_spec.rb
229
+ - spec/rack/oauth2/server/authorize/extension/id_token_spec.rb
224
230
  - spec/rack/oauth2/server/authorize/token_spec.rb
225
231
  - spec/rack/oauth2/server/token/authorization_code_spec.rb
226
232
  - spec/rack/oauth2/server/token/refresh_token_spec.rb
@@ -278,6 +284,9 @@ test_files:
278
284
  - spec/openid_connect/response_object_spec.rb
279
285
  - spec/openid_connect/server/id_token_spec.rb
280
286
  - spec/rack/oauth2/server/authorize/code_and_token_spec.rb
287
+ - spec/rack/oauth2/server/authorize/extension/code_and_id_token_spec.rb
288
+ - spec/rack/oauth2/server/authorize/extension/id_token_and_token_spec.rb
289
+ - spec/rack/oauth2/server/authorize/extension/id_token_spec.rb
281
290
  - spec/rack/oauth2/server/authorize/token_spec.rb
282
291
  - spec/rack/oauth2/server/token/authorization_code_spec.rb
283
292
  - spec/rack/oauth2/server/token/refresh_token_spec.rb