openid_connect 0.7.3 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/LICENSE +3 -1
- data/Rakefile +6 -6
- data/VERSION +1 -1
- data/lib/openid_connect.rb +0 -1
- data/lib/openid_connect/access_token.rb +3 -3
- data/lib/openid_connect/client/registrar.rb +9 -6
- data/lib/openid_connect/discovery/provider.rb +3 -1
- data/lib/openid_connect/discovery/provider/config/response.rb +3 -4
- data/lib/openid_connect/request_object.rb +1 -1
- data/lib/openid_connect/request_object/{userinfo.rb → user_info.rb} +0 -0
- data/lib/openid_connect/response_object/user_info.rb +65 -0
- data/lib/openid_connect/response_object/user_info/address.rb +10 -0
- data/openid_connect.gemspec +3 -1
- data/spec/mock_response/discovery/config.json +0 -1
- data/spec/openid_connect/access_token_spec.rb +6 -16
- data/spec/openid_connect/discovery/provider/config_spec.rb +0 -2
- data/spec/openid_connect/discovery/provider_spec.rb +1 -1
- data/spec/openid_connect/response_object/user_info/{open_id/address_spec.rb → address_spec.rb} +2 -2
- data/spec/openid_connect/response_object/{user_info/open_id_spec.rb → user_info_spec.rb} +6 -6
- data/spec/spec_helper.rb +5 -1
- metadata +48 -51
- data/lib/openid_connect/response_object/userinfo.rb +0 -3
- data/lib/openid_connect/response_object/userinfo/open_id.rb +0 -65
- data/lib/openid_connect/response_object/userinfo/open_id/address.rb +0 -12
- data/lib/rack/oauth2/server/resource/error_with_connect_ext.rb +0 -14
- data/spec/rack/oauth2/server/resource/error_with_connect_ext_spec.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35d71b7a3743bd72c3f58f3ec42cb738154713ed
|
4
|
+
data.tar.gz: 5937a7527d73fb7a304da639aec619db2cbe3954
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9618737dec9685e33637aa65dad56f2b8d8392156459f93ae3f157bf54fe6332f07e9007778ebfe17b6279bd6e30a50ceea8ae56c2d75272b5cbcbb7cda24692
|
7
|
+
data.tar.gz: c5f72442ebc141bdbeaf8c7f1b0a1036a5b74d345411bf593cf2c9f21c79aecd44d56ef9df07e97dc1027495f6c0dbfbf54da191667013fb3d760133ec3111f9
|
data/.gitignore
CHANGED
data/LICENSE
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
Copyright (c) 2011 nov matake
|
2
2
|
|
3
|
+
MIT License
|
4
|
+
|
3
5
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
6
|
a copy of this software and associated documentation files (the
|
5
7
|
"Software"), to deal in the Software without restriction, including
|
@@ -17,4 +19,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
19
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
20
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
21
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
CHANGED
@@ -4,16 +4,16 @@ Bundler::GemHelper.install_tasks
|
|
4
4
|
require 'rspec/core/rake_task'
|
5
5
|
RSpec::Core::RakeTask.new(:spec)
|
6
6
|
|
7
|
-
namespace :
|
8
|
-
desc "
|
7
|
+
namespace :coverage do
|
8
|
+
desc "Open coverage report"
|
9
9
|
task :report do
|
10
|
-
require '
|
11
|
-
|
10
|
+
require 'simplecov'
|
11
|
+
`open "#{File.join SimpleCov.coverage_path, 'index.html'}"`
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
task :spec do
|
16
|
-
Rake::Task['
|
16
|
+
Rake::Task[:'coverage:report'].invoke unless ENV['TRAVIS_RUBY_VERSION']
|
17
17
|
end
|
18
18
|
|
19
|
-
task default
|
19
|
+
task :default => :spec
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.8.0
|
data/lib/openid_connect.rb
CHANGED
@@ -11,7 +11,6 @@ require 'attr_optional'
|
|
11
11
|
require 'rack/oauth2'
|
12
12
|
require 'rack/oauth2/server/authorize/request_with_connect_params'
|
13
13
|
require 'rack/oauth2/server/id_token_response'
|
14
|
-
require 'rack/oauth2/server/resource/error_with_connect_ext'
|
15
14
|
|
16
15
|
module OpenIDConnect
|
17
16
|
VERSION = ::File.read(
|
@@ -8,11 +8,11 @@ module OpenIDConnect
|
|
8
8
|
@token_type = :bearer
|
9
9
|
end
|
10
10
|
|
11
|
-
def userinfo!
|
11
|
+
def userinfo!
|
12
12
|
hash = resource_request do
|
13
|
-
get client.userinfo_uri
|
13
|
+
get client.userinfo_uri
|
14
14
|
end
|
15
|
-
ResponseObject::UserInfo
|
15
|
+
ResponseObject::UserInfo.new hash
|
16
16
|
end
|
17
17
|
|
18
18
|
private
|
@@ -18,21 +18,24 @@ module OpenIDConnect
|
|
18
18
|
singular_attributes = [
|
19
19
|
:application_type,
|
20
20
|
:client_name,
|
21
|
-
:
|
21
|
+
:jwks,
|
22
22
|
:subject_type,
|
23
|
-
:request_object_signing_alg,
|
24
|
-
:userinfo_signed_response_alg,
|
25
|
-
:userinfo_encrypted_response_alg,
|
26
|
-
:userinfo_encrypted_response_enc,
|
27
23
|
:id_token_signed_response_alg,
|
28
24
|
:id_token_encrypted_response_alg,
|
29
25
|
:id_token_encrypted_response_enc,
|
26
|
+
:userinfo_signed_response_alg,
|
27
|
+
:userinfo_encrypted_response_alg,
|
28
|
+
:userinfo_encrypted_response_enc,
|
29
|
+
:request_object_signing_alg,
|
30
|
+
:request_object_encryption_alg,
|
31
|
+
:request_object_encryption_enc,
|
32
|
+
:token_endpoint_auth_method,
|
33
|
+
:token_endpoint_auth_signing_alg,
|
30
34
|
:default_max_age,
|
31
35
|
:require_auth_time
|
32
36
|
] + singular_uri_attributes
|
33
37
|
self.plurar_uri_attributes = [
|
34
38
|
:redirect_uris,
|
35
|
-
:post_logout_redirect_uris,
|
36
39
|
:request_uris
|
37
40
|
]
|
38
41
|
plurar_attributes = [
|
@@ -16,8 +16,6 @@ module OpenIDConnect
|
|
16
16
|
:authorization_endpoint,
|
17
17
|
:token_endpoint,
|
18
18
|
:userinfo_endpoint,
|
19
|
-
:check_session_endpoint,
|
20
|
-
:end_session_endpoint,
|
21
19
|
:registration_endpoint,
|
22
20
|
:service_documentation,
|
23
21
|
:op_policy_uri,
|
@@ -31,13 +29,14 @@ module OpenIDConnect
|
|
31
29
|
])
|
32
30
|
attr_optional *(uri_attributes[:optional] + [
|
33
31
|
:scopes_supported,
|
32
|
+
:response_modes_supported,
|
34
33
|
:grant_types_supported,
|
35
34
|
:acr_values_supported,
|
35
|
+
:id_token_encryption_alg_values_supported,
|
36
|
+
:id_token_encryption_enc_values_supported,
|
36
37
|
:userinfo_signing_alg_values_supported,
|
37
38
|
:userinfo_encryption_alg_values_supported,
|
38
39
|
:userinfo_encryption_enc_values_supported,
|
39
|
-
:id_token_encryption_alg_values_supported,
|
40
|
-
:id_token_encryption_enc_values_supported,
|
41
40
|
:request_object_signing_alg_values_supported,
|
42
41
|
:request_object_encryption_alg_values_supported,
|
43
42
|
:request_object_encryption_enc_values_supported,
|
File without changes
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module OpenIDConnect
|
2
|
+
class ResponseObject
|
3
|
+
class UserInfo < ConnectObject
|
4
|
+
attr_optional(
|
5
|
+
:sub,
|
6
|
+
:name,
|
7
|
+
:given_name,
|
8
|
+
:family_name,
|
9
|
+
:middle_name,
|
10
|
+
:nickname,
|
11
|
+
:preferred_username,
|
12
|
+
:profile,
|
13
|
+
:picture,
|
14
|
+
:website,
|
15
|
+
:email,
|
16
|
+
:email_verified,
|
17
|
+
:gender,
|
18
|
+
:birthdate,
|
19
|
+
:zoneinfo,
|
20
|
+
:locale,
|
21
|
+
:phone_number,
|
22
|
+
:phone_number_verified,
|
23
|
+
:address,
|
24
|
+
:updated_at
|
25
|
+
)
|
26
|
+
alias_method :subject, :sub
|
27
|
+
alias_method :subject=, :sub=
|
28
|
+
|
29
|
+
validates :email_verified, :phone_number_verified, allow_nil: true, inclusion: {in: [true, false]}
|
30
|
+
validates :gender, allow_nil: true, inclusion: {in: ['male', 'female']}
|
31
|
+
validates :zoneinfo, allow_nil: true, inclusion: {in: TZInfo::TimezoneProxy.all.collect(&:name)}
|
32
|
+
validates :profile, :picture, :website, allow_nil: true, url: true
|
33
|
+
validates :email, allow_nil: true, email: true
|
34
|
+
validates :updated_at, allow_nil: true, numericality: {only_integer: true}
|
35
|
+
validate :validate_address
|
36
|
+
validate :require_at_least_one_attributes
|
37
|
+
# TODO: validate locale
|
38
|
+
|
39
|
+
def initialize(attributes = {})
|
40
|
+
super
|
41
|
+
(all_attributes - [:email_verified, :phone_number_verified, :address, :updated_at]).each do |key|
|
42
|
+
self.send "#{key}=", self.send(key).try(:to_s)
|
43
|
+
end
|
44
|
+
self.updated_at = updated_at.try(:to_i)
|
45
|
+
end
|
46
|
+
|
47
|
+
def validate_address
|
48
|
+
errors.add :address, address.errors.full_messages.join(', ') if address.present? && !address.valid?
|
49
|
+
end
|
50
|
+
|
51
|
+
def address=(hash_or_address)
|
52
|
+
@address = case hash_or_address
|
53
|
+
when Hash
|
54
|
+
Address.new hash_or_address
|
55
|
+
when Address
|
56
|
+
hash_or_address
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
Dir[File.dirname(__FILE__) + '/user_info/*.rb'].each do |file|
|
64
|
+
require file
|
65
|
+
end
|
data/openid_connect.gemspec
CHANGED
@@ -6,6 +6,8 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.homepage = "https://github.com/nov/openid_connect"
|
7
7
|
s.summary = %q{OpenID Connect Server & Client Library}
|
8
8
|
s.description = %q{OpenID Connect Server & Client Library}
|
9
|
+
s.license = 'MIT'
|
10
|
+
|
9
11
|
s.files = `git ls-files`.split("\n")
|
10
12
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
11
13
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
@@ -23,5 +25,5 @@ Gem::Specification.new do |s|
|
|
23
25
|
s.add_development_dependency "rake", ">= 0.8"
|
24
26
|
s.add_development_dependency "rspec", ">= 2"
|
25
27
|
s.add_development_dependency "webmock", ">= 1.6.2"
|
26
|
-
s.add_development_dependency "
|
28
|
+
s.add_development_dependency "simplecov"
|
27
29
|
end
|
@@ -53,9 +53,7 @@ describe OpenIDConnect::AccessToken do
|
|
53
53
|
shared_examples_for :access_token_error_handling do
|
54
54
|
context 'when bad_request' do
|
55
55
|
it 'should raise OpenIDConnect::Forbidden' do
|
56
|
-
mock_json :get, endpoint, 'errors/invalid_request', :HTTP_AUTHORIZATION => 'Bearer access_token', status: 400
|
57
|
-
schema: 'openid'
|
58
|
-
} do
|
56
|
+
mock_json :get, endpoint, 'errors/invalid_request', :HTTP_AUTHORIZATION => 'Bearer access_token', status: 400 do
|
59
57
|
expect { request }.to raise_error OpenIDConnect::BadRequest
|
60
58
|
end
|
61
59
|
end
|
@@ -63,9 +61,7 @@ describe OpenIDConnect::AccessToken do
|
|
63
61
|
|
64
62
|
context 'when unauthorized' do
|
65
63
|
it 'should raise OpenIDConnect::Unauthorized' do
|
66
|
-
mock_json :get, endpoint, 'errors/invalid_access_token', :HTTP_AUTHORIZATION => 'Bearer access_token', status: 401
|
67
|
-
schema: 'openid'
|
68
|
-
} do
|
64
|
+
mock_json :get, endpoint, 'errors/invalid_access_token', :HTTP_AUTHORIZATION => 'Bearer access_token', status: 401 do
|
69
65
|
expect { request }.to raise_error OpenIDConnect::Unauthorized
|
70
66
|
end
|
71
67
|
end
|
@@ -73,9 +69,7 @@ describe OpenIDConnect::AccessToken do
|
|
73
69
|
|
74
70
|
context 'when forbidden' do
|
75
71
|
it 'should raise OpenIDConnect::Forbidden' do
|
76
|
-
mock_json :get, endpoint, 'errors/insufficient_scope', :HTTP_AUTHORIZATION => 'Bearer access_token', status: 403
|
77
|
-
schema: 'openid'
|
78
|
-
} do
|
72
|
+
mock_json :get, endpoint, 'errors/insufficient_scope', :HTTP_AUTHORIZATION => 'Bearer access_token', status: 403 do
|
79
73
|
expect { request }.to raise_error OpenIDConnect::Forbidden
|
80
74
|
end
|
81
75
|
end
|
@@ -83,9 +77,7 @@ describe OpenIDConnect::AccessToken do
|
|
83
77
|
|
84
78
|
context 'when unknown' do
|
85
79
|
it 'should raise OpenIDConnect::HttpError' do
|
86
|
-
mock_json :get, endpoint, 'errors/unknown', :HTTP_AUTHORIZATION => 'Bearer access_token', status: 500
|
87
|
-
schema: 'openid'
|
88
|
-
} do
|
80
|
+
mock_json :get, endpoint, 'errors/unknown', :HTTP_AUTHORIZATION => 'Bearer access_token', status: 500 do
|
89
81
|
expect { request }.to raise_error OpenIDConnect::HttpError
|
90
82
|
end
|
91
83
|
end
|
@@ -94,12 +86,10 @@ describe OpenIDConnect::AccessToken do
|
|
94
86
|
|
95
87
|
describe '#userinfo!' do
|
96
88
|
it do
|
97
|
-
userinfo = mock_json :get, client.userinfo_uri, 'userinfo/openid', :HTTP_AUTHORIZATION => 'Bearer access_token'
|
98
|
-
schema: 'openid'
|
99
|
-
} do
|
89
|
+
userinfo = mock_json :get, client.userinfo_uri, 'userinfo/openid', :HTTP_AUTHORIZATION => 'Bearer access_token' do
|
100
90
|
access_token.userinfo!
|
101
91
|
end
|
102
|
-
userinfo.should be_instance_of OpenIDConnect::ResponseObject::UserInfo
|
92
|
+
userinfo.should be_instance_of OpenIDConnect::ResponseObject::UserInfo
|
103
93
|
end
|
104
94
|
|
105
95
|
describe 'error handling' do
|
@@ -13,8 +13,6 @@ describe OpenIDConnect::Discovery::Provider::Config do
|
|
13
13
|
config.authorization_endpoint.should == 'https://connect-op.heroku.com/authorizations/new'
|
14
14
|
config.token_endpoint.should == 'https://connect-op.heroku.com/access_tokens'
|
15
15
|
config.userinfo_endpoint.should == 'https://connect-op.heroku.com/userinfo'
|
16
|
-
config.check_session_endpoint.should be_nil
|
17
|
-
config.end_session_endpoint.should be_nil
|
18
16
|
config.jwks_uri.should == 'https://connect-op.heroku.com/jwks.json'
|
19
17
|
config.registration_endpoint.should == 'https://connect-op.heroku.com/connect/client'
|
20
18
|
config.scopes_supported.should == ['openid', 'profile', 'email', 'address']
|
data/spec/openid_connect/response_object/user_info/{open_id/address_spec.rb → address_spec.rb}
RENAMED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe OpenIDConnect::ResponseObject::UserInfo::
|
4
|
-
let(:klass) { OpenIDConnect::ResponseObject::UserInfo::
|
3
|
+
describe OpenIDConnect::ResponseObject::UserInfo::Address do
|
4
|
+
let(:klass) { OpenIDConnect::ResponseObject::UserInfo::Address }
|
5
5
|
|
6
6
|
describe 'attributes' do
|
7
7
|
subject { klass }
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe OpenIDConnect::ResponseObject::UserInfo
|
4
|
-
let(:klass) { OpenIDConnect::ResponseObject::UserInfo
|
3
|
+
describe OpenIDConnect::ResponseObject::UserInfo do
|
4
|
+
let(:klass) { OpenIDConnect::ResponseObject::UserInfo }
|
5
5
|
let(:instance) { klass.new attributes }
|
6
6
|
subject { instance }
|
7
7
|
|
@@ -29,7 +29,7 @@ describe OpenIDConnect::ResponseObject::UserInfo::OpenID do
|
|
29
29
|
:phone_number,
|
30
30
|
:phone_number_verified,
|
31
31
|
:address,
|
32
|
-
:
|
32
|
+
:updated_at
|
33
33
|
]
|
34
34
|
end
|
35
35
|
end
|
@@ -95,14 +95,14 @@ describe OpenIDConnect::ResponseObject::UserInfo::OpenID do
|
|
95
95
|
let :attributes do
|
96
96
|
{address: {}}
|
97
97
|
end
|
98
|
-
its(:address) { should be_a OpenIDConnect::ResponseObject::UserInfo::
|
98
|
+
its(:address) { should be_a OpenIDConnect::ResponseObject::UserInfo::Address }
|
99
99
|
end
|
100
100
|
|
101
101
|
context 'when Address is given' do
|
102
102
|
let :attributes do
|
103
|
-
{address: OpenIDConnect::ResponseObject::UserInfo::
|
103
|
+
{address: OpenIDConnect::ResponseObject::UserInfo::Address.new}
|
104
104
|
end
|
105
|
-
its(:address) { should be_a OpenIDConnect::ResponseObject::UserInfo::
|
105
|
+
its(:address) { should be_a OpenIDConnect::ResponseObject::UserInfo::Address }
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,211 +1,211 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openid_connect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nov matake
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 1.4.3
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.4.3
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: tzinfo
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: attr_required
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 0.0.5
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.0.5
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: activemodel
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: validate_url
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: validate_email
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: json-jwt
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: 0.5.5
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 0.5.5
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: swd
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: 0.1.2
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: 0.1.2
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: webfinger
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: 0.0.2
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: 0.0.2
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: rack-oauth2
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: 1.0.0
|
146
146
|
type: :runtime
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: 1.0.0
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: rake
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- -
|
157
|
+
- - ">="
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: '0.8'
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- -
|
164
|
+
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0.8'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: rspec
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
|
-
- -
|
171
|
+
- - ">="
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: '2'
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
|
-
- -
|
178
|
+
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '2'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: webmock
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
|
-
- -
|
185
|
+
- - ">="
|
186
186
|
- !ruby/object:Gem::Version
|
187
187
|
version: 1.6.2
|
188
188
|
type: :development
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
|
-
- -
|
192
|
+
- - ">="
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: 1.6.2
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
196
|
+
name: simplecov
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
198
198
|
requirements:
|
199
|
-
- -
|
199
|
+
- - ">="
|
200
200
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
201
|
+
version: '0'
|
202
202
|
type: :development
|
203
203
|
prerelease: false
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
205
205
|
requirements:
|
206
|
-
- -
|
206
|
+
- - ">="
|
207
207
|
- !ruby/object:Gem::Version
|
208
|
-
version:
|
208
|
+
version: '0'
|
209
209
|
description: OpenID Connect Server & Client Library
|
210
210
|
email:
|
211
211
|
- nov@matake.jp
|
@@ -213,9 +213,9 @@ executables: []
|
|
213
213
|
extensions: []
|
214
214
|
extra_rdoc_files: []
|
215
215
|
files:
|
216
|
-
- .gitignore
|
217
|
-
- .rspec
|
218
|
-
- .travis.yml
|
216
|
+
- ".gitignore"
|
217
|
+
- ".rspec"
|
218
|
+
- ".travis.yml"
|
219
219
|
- Gemfile
|
220
220
|
- LICENSE
|
221
221
|
- README.rdoc
|
@@ -239,12 +239,11 @@ files:
|
|
239
239
|
- lib/openid_connect/request_object.rb
|
240
240
|
- lib/openid_connect/request_object/claimable.rb
|
241
241
|
- lib/openid_connect/request_object/id_token.rb
|
242
|
-
- lib/openid_connect/request_object/
|
242
|
+
- lib/openid_connect/request_object/user_info.rb
|
243
243
|
- lib/openid_connect/response_object.rb
|
244
244
|
- lib/openid_connect/response_object/id_token.rb
|
245
|
-
- lib/openid_connect/response_object/
|
246
|
-
- lib/openid_connect/response_object/
|
247
|
-
- lib/openid_connect/response_object/userinfo/open_id/address.rb
|
245
|
+
- lib/openid_connect/response_object/user_info.rb
|
246
|
+
- lib/openid_connect/response_object/user_info/address.rb
|
248
247
|
- lib/rack/oauth2/server/authorize/error_with_connect_ext.rb
|
249
248
|
- lib/rack/oauth2/server/authorize/extension/code_and_id_token.rb
|
250
249
|
- lib/rack/oauth2/server/authorize/extension/code_and_id_token_and_token.rb
|
@@ -252,7 +251,6 @@ files:
|
|
252
251
|
- lib/rack/oauth2/server/authorize/extension/id_token_and_token.rb
|
253
252
|
- lib/rack/oauth2/server/authorize/request_with_connect_params.rb
|
254
253
|
- lib/rack/oauth2/server/id_token_response.rb
|
255
|
-
- lib/rack/oauth2/server/resource/error_with_connect_ext.rb
|
256
254
|
- openid_connect.gemspec
|
257
255
|
- spec/helpers/crypto_spec_helper.rb
|
258
256
|
- spec/helpers/webmock_helper.rb
|
@@ -286,19 +284,19 @@ files:
|
|
286
284
|
- spec/openid_connect/exception_spec.rb
|
287
285
|
- spec/openid_connect/request_object_spec.rb
|
288
286
|
- spec/openid_connect/response_object/id_token_spec.rb
|
289
|
-
- spec/openid_connect/response_object/user_info/
|
290
|
-
- spec/openid_connect/response_object/
|
287
|
+
- spec/openid_connect/response_object/user_info/address_spec.rb
|
288
|
+
- spec/openid_connect/response_object/user_info_spec.rb
|
291
289
|
- spec/openid_connect_spec.rb
|
292
290
|
- spec/rack/oauth2/server/authorize/extension/code_and_id_token_and_token_spec.rb
|
293
291
|
- spec/rack/oauth2/server/authorize/extension/code_and_id_token_spec.rb
|
294
292
|
- spec/rack/oauth2/server/authorize/extension/id_token_and_token_spec.rb
|
295
293
|
- spec/rack/oauth2/server/authorize/extension/id_token_spec.rb
|
296
|
-
- spec/rack/oauth2/server/resource/error_with_connect_ext_spec.rb
|
297
294
|
- spec/rack/oauth2/server/token/authorization_code_spec.rb
|
298
295
|
- spec/rack/oauth2/server/token/refresh_token_spec.rb
|
299
296
|
- spec/spec_helper.rb
|
300
297
|
homepage: https://github.com/nov/openid_connect
|
301
|
-
licenses:
|
298
|
+
licenses:
|
299
|
+
- MIT
|
302
300
|
metadata: {}
|
303
301
|
post_install_message:
|
304
302
|
rdoc_options: []
|
@@ -306,17 +304,17 @@ require_paths:
|
|
306
304
|
- lib
|
307
305
|
required_ruby_version: !ruby/object:Gem::Requirement
|
308
306
|
requirements:
|
309
|
-
- -
|
307
|
+
- - ">="
|
310
308
|
- !ruby/object:Gem::Version
|
311
309
|
version: '0'
|
312
310
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
313
311
|
requirements:
|
314
|
-
- -
|
312
|
+
- - ">="
|
315
313
|
- !ruby/object:Gem::Version
|
316
314
|
version: '0'
|
317
315
|
requirements: []
|
318
316
|
rubyforge_project:
|
319
|
-
rubygems_version: 2.0
|
317
|
+
rubygems_version: 2.2.0
|
320
318
|
signing_key:
|
321
319
|
specification_version: 4
|
322
320
|
summary: OpenID Connect Server & Client Library
|
@@ -353,14 +351,13 @@ test_files:
|
|
353
351
|
- spec/openid_connect/exception_spec.rb
|
354
352
|
- spec/openid_connect/request_object_spec.rb
|
355
353
|
- spec/openid_connect/response_object/id_token_spec.rb
|
356
|
-
- spec/openid_connect/response_object/user_info/
|
357
|
-
- spec/openid_connect/response_object/
|
354
|
+
- spec/openid_connect/response_object/user_info/address_spec.rb
|
355
|
+
- spec/openid_connect/response_object/user_info_spec.rb
|
358
356
|
- spec/openid_connect_spec.rb
|
359
357
|
- spec/rack/oauth2/server/authorize/extension/code_and_id_token_and_token_spec.rb
|
360
358
|
- spec/rack/oauth2/server/authorize/extension/code_and_id_token_spec.rb
|
361
359
|
- spec/rack/oauth2/server/authorize/extension/id_token_and_token_spec.rb
|
362
360
|
- spec/rack/oauth2/server/authorize/extension/id_token_spec.rb
|
363
|
-
- spec/rack/oauth2/server/resource/error_with_connect_ext_spec.rb
|
364
361
|
- spec/rack/oauth2/server/token/authorization_code_spec.rb
|
365
362
|
- spec/rack/oauth2/server/token/refresh_token_spec.rb
|
366
363
|
- spec/spec_helper.rb
|
@@ -1,65 +0,0 @@
|
|
1
|
-
module OpenIDConnect
|
2
|
-
class ResponseObject
|
3
|
-
module UserInfo
|
4
|
-
class OpenID < ConnectObject
|
5
|
-
attr_optional(
|
6
|
-
:sub,
|
7
|
-
:name,
|
8
|
-
:given_name,
|
9
|
-
:family_name,
|
10
|
-
:middle_name,
|
11
|
-
:nickname,
|
12
|
-
:preferred_username,
|
13
|
-
:profile,
|
14
|
-
:picture,
|
15
|
-
:website,
|
16
|
-
:email,
|
17
|
-
:email_verified,
|
18
|
-
:gender,
|
19
|
-
:birthdate,
|
20
|
-
:zoneinfo,
|
21
|
-
:locale,
|
22
|
-
:phone_number,
|
23
|
-
:phone_number_verified,
|
24
|
-
:address,
|
25
|
-
:updated_time
|
26
|
-
)
|
27
|
-
alias_method :subject, :sub
|
28
|
-
alias_method :subject=, :sub=
|
29
|
-
|
30
|
-
validates :email_verified, :phone_number_verified, allow_nil: true, inclusion: {in: [true, false]}
|
31
|
-
validates :gender, allow_nil: true, inclusion: {in: ['male', 'female']}
|
32
|
-
validates :zoneinfo, allow_nil: true, inclusion: {in: TZInfo::TimezoneProxy.all.collect(&:name)}
|
33
|
-
validates :profile, :picture, :website, allow_nil: true, url: true
|
34
|
-
validates :email, allow_nil: true, email: true
|
35
|
-
validate :validate_address
|
36
|
-
validate :require_at_least_one_attributes
|
37
|
-
# TODO: validate locale
|
38
|
-
|
39
|
-
def initialize(attributes = {})
|
40
|
-
super
|
41
|
-
(all_attributes - [:email_verified, :phone_number_verified, :address]).each do |key|
|
42
|
-
self.send "#{key}=", self.send(key).try(:to_s)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def validate_address
|
47
|
-
errors.add :address, address.errors.full_messages.join(', ') if address.present? && !address.valid?
|
48
|
-
end
|
49
|
-
|
50
|
-
def address=(hash_or_address)
|
51
|
-
@address = case hash_or_address
|
52
|
-
when Hash
|
53
|
-
Address.new hash_or_address
|
54
|
-
when Address
|
55
|
-
hash_or_address
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
Dir[File.dirname(__FILE__) + '/open_id/*.rb'].each do |file|
|
64
|
-
require file
|
65
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
module OpenIDConnect
|
2
|
-
class ResponseObject
|
3
|
-
module UserInfo
|
4
|
-
class OpenID
|
5
|
-
class Address < ConnectObject
|
6
|
-
attr_optional :formatted, :street_address, :locality, :region, :postal_code, :country
|
7
|
-
validate :require_at_least_one_attributes
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
module Rack
|
2
|
-
module OAuth2
|
3
|
-
module Server
|
4
|
-
class Resource
|
5
|
-
module ErrorWithConnectExt
|
6
|
-
def invalid_schema!(description = 'The requested schema is invalid or unsupported', options = {})
|
7
|
-
bad_request! :invalid_schema, description, options
|
8
|
-
end
|
9
|
-
end
|
10
|
-
Request.send :include, ErrorWithConnectExt
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
require 'spec_helper.rb'
|
2
|
-
|
3
|
-
describe Rack::OAuth2::Server::Resource::ErrorWithConnectExt do
|
4
|
-
let(:env) { Rack::MockRequest.env_for("/authorize?client_id=client_id") }
|
5
|
-
let(:request) { Rack::OAuth2::Server::Resource::Request.new env }
|
6
|
-
|
7
|
-
describe 'invalid_schema!' do
|
8
|
-
it do
|
9
|
-
expect { request.invalid_schema! }.to raise_error Rack::OAuth2::Server::Resource::BadRequest
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|