doorkeeper-openid_connect 1.7.1 → 1.7.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +4 -0
- data/app/controllers/doorkeeper/authorizations_controller.rb +1 -1
- data/app/controllers/doorkeeper/openid_connect/discovery_controller.rb +16 -13
- data/app/controllers/doorkeeper/openid_connect/userinfo_controller.rb +2 -0
- data/lib/doorkeeper/oauth/id_token_request.rb +7 -1
- data/lib/doorkeeper/oauth/id_token_response.rb +2 -0
- data/lib/doorkeeper/oauth/id_token_token_request.rb +2 -0
- data/lib/doorkeeper/oauth/id_token_token_response.rb +2 -0
- data/lib/doorkeeper/openid_connect.rb +3 -1
- data/lib/doorkeeper/openid_connect/claims/aggregated_claim.rb +2 -0
- data/lib/doorkeeper/openid_connect/claims/claim.rb +6 -4
- data/lib/doorkeeper/openid_connect/claims/distributed_claim.rb +2 -0
- data/lib/doorkeeper/openid_connect/claims/normal_claim.rb +2 -0
- data/lib/doorkeeper/openid_connect/claims_builder.rb +3 -1
- data/lib/doorkeeper/openid_connect/config.rb +16 -10
- data/lib/doorkeeper/openid_connect/engine.rb +2 -0
- data/lib/doorkeeper/openid_connect/errors.rb +2 -0
- data/lib/doorkeeper/openid_connect/helpers/controller.rb +24 -15
- data/lib/doorkeeper/openid_connect/id_token.rb +3 -1
- data/lib/doorkeeper/openid_connect/id_token_token.rb +2 -0
- data/lib/doorkeeper/openid_connect/oauth/authorization/code.rb +25 -8
- data/lib/doorkeeper/openid_connect/oauth/authorization_code_request.rb +4 -2
- data/lib/doorkeeper/openid_connect/oauth/password_access_token_request.rb +3 -1
- data/lib/doorkeeper/openid_connect/oauth/pre_authorization.rb +11 -4
- data/lib/doorkeeper/openid_connect/oauth/token_response.rb +3 -1
- data/lib/doorkeeper/openid_connect/orm/active_record.rb +2 -0
- data/lib/doorkeeper/openid_connect/orm/active_record/access_grant.rb +3 -1
- data/lib/doorkeeper/openid_connect/orm/active_record/request.rb +5 -3
- data/lib/doorkeeper/openid_connect/rails/routes.rb +3 -1
- data/lib/doorkeeper/openid_connect/rails/routes/mapper.rb +2 -0
- data/lib/doorkeeper/openid_connect/rails/routes/mapping.rb +2 -0
- data/lib/doorkeeper/openid_connect/response_types_config.rb +3 -1
- data/lib/doorkeeper/openid_connect/user_info.rb +2 -0
- data/lib/doorkeeper/openid_connect/version.rb +3 -1
- data/lib/doorkeeper/request/id_token.rb +2 -0
- data/lib/doorkeeper/request/id_token_token.rb +2 -0
- data/lib/generators/doorkeeper/openid_connect/install_generator.rb +4 -2
- data/lib/generators/doorkeeper/openid_connect/migration_generator.rb +3 -1
- data/lib/generators/doorkeeper/openid_connect/templates/initializer.rb +7 -5
- metadata +21 -30
- data/.gitignore +0 -8
- data/.ruby-version +0 -1
- data/.travis.yml +0 -27
- data/CONTRIBUTING.md +0 -45
- data/Gemfile +0 -8
- data/Rakefile +0 -24
- data/bin/console +0 -9
- data/bin/setup +0 -8
- data/doorkeeper-openid_connect.gemspec +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd500337bf3593b1f15ab64da67dd2da940797271fd1a169e47f2542371d6930
|
4
|
+
data.tar.gz: 4c3fdae9aca104f74f2bcf2e2805d09fe784e75326e3fa2382de8ba74133987a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 887f767a61bd22be260dfb2b3d37de2e3334b25ff53aacbf9b6b41aecb88a287ae308d9fd65950e7c850ab023569d08cb1c31cceda4182cb667c3b61a984406e
|
7
|
+
data.tar.gz: 670454a6c3e5dbe69dcb511e68acbb63b2b558410a3ae0268400918dd11e3ae4d320fb1bd7d876cade2b7313132c925befcd51ad0bd023bfb826f36ee9d127b9
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -152,6 +152,10 @@ The following settings are optional:
|
|
152
152
|
- Note that the OIDC specification mandates HTTPS, so you shouldn't change this
|
153
153
|
for production environments unless you have a really good reason!
|
154
154
|
|
155
|
+
- `end_session_endpoint`
|
156
|
+
- The URL that the user is redirected to after ending the session on the client.
|
157
|
+
- Used by implementations like https://github.com/IdentityModel/oidc-client-js.
|
158
|
+
|
155
159
|
### Scopes
|
156
160
|
|
157
161
|
To perform authentication over OpenID Connect, an OAuth client needs to request the `openid` scope. This scope needs to be enabled using either `optional_scopes` in the global Doorkeeper configuration in `config/initializers/doorkeeper.rb`, or by adding it to any OAuth application's `scope` attribute.
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Doorkeeper
|
2
4
|
module OpenidConnect
|
3
5
|
class DiscoveryController < ::Doorkeeper::ApplicationController
|
4
6
|
include Doorkeeper::Helpers::Controller
|
5
7
|
|
6
|
-
WEBFINGER_RELATION = 'http://openid.net/specs/connect/1.0/issuer'
|
8
|
+
WEBFINGER_RELATION = 'http://openid.net/specs/connect/1.0/issuer'
|
7
9
|
|
8
10
|
def provider
|
9
11
|
render json: provider_response
|
@@ -30,20 +32,21 @@ module Doorkeeper
|
|
30
32
|
introspection_endpoint: oauth_introspect_url(protocol: protocol),
|
31
33
|
userinfo_endpoint: oauth_userinfo_url(protocol: protocol),
|
32
34
|
jwks_uri: oauth_discovery_keys_url(protocol: protocol),
|
35
|
+
end_session_endpoint: openid_connect.end_session_endpoint.call,
|
33
36
|
|
34
37
|
scopes_supported: doorkeeper.scopes,
|
35
38
|
|
36
39
|
# TODO: support id_token response type
|
37
40
|
response_types_supported: doorkeeper.authorization_response_types,
|
38
|
-
response_modes_supported: [
|
41
|
+
response_modes_supported: ['query', 'fragment'],
|
39
42
|
|
40
43
|
token_endpoint_auth_methods_supported: [
|
41
44
|
'client_secret_basic',
|
42
45
|
'client_secret_post',
|
43
46
|
|
44
47
|
# TODO: look into doorkeeper-jwt_assertion for these
|
45
|
-
#'client_secret_jwt',
|
46
|
-
#'private_key_jwt'
|
48
|
+
# 'client_secret_jwt',
|
49
|
+
# 'private_key_jwt'
|
47
50
|
],
|
48
51
|
|
49
52
|
subject_types_supported: openid_connect.subject_types_supported,
|
@@ -56,18 +59,18 @@ module Doorkeeper
|
|
56
59
|
'normal',
|
57
60
|
|
58
61
|
# TODO: support these
|
59
|
-
#'aggregated',
|
60
|
-
#'distributed',
|
62
|
+
# 'aggregated',
|
63
|
+
# 'distributed',
|
61
64
|
],
|
62
65
|
|
63
|
-
claims_supported: [
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
66
|
+
claims_supported: %w[
|
67
|
+
iss
|
68
|
+
sub
|
69
|
+
aud
|
70
|
+
exp
|
71
|
+
iat
|
69
72
|
] | openid_connect.claims.to_h.keys,
|
70
|
-
}
|
73
|
+
}.compact
|
71
74
|
end
|
72
75
|
|
73
76
|
def webfinger_response
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Doorkeeper
|
2
4
|
module OAuth
|
3
5
|
class IdTokenRequest
|
@@ -10,7 +12,11 @@ module Doorkeeper
|
|
10
12
|
|
11
13
|
def authorize
|
12
14
|
@auth = Authorization::Token.new(pre_auth, resource_owner)
|
13
|
-
@auth.issue_token
|
15
|
+
if @auth.respond_to?(:issue_token!)
|
16
|
+
@auth.issue_token!
|
17
|
+
else
|
18
|
+
@auth.issue_token
|
19
|
+
end
|
14
20
|
response
|
15
21
|
end
|
16
22
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'doorkeeper'
|
2
4
|
require 'active_model'
|
3
5
|
require 'json/jwt'
|
@@ -42,7 +44,7 @@ module Doorkeeper
|
|
42
44
|
|
43
45
|
def self.signing_key
|
44
46
|
key =
|
45
|
-
if [
|
47
|
+
if %i[HS256 HS384 HS512].include?(signing_algorithm)
|
46
48
|
configuration.signing_key
|
47
49
|
else
|
48
50
|
OpenSSL::PKey.read(configuration.signing_key)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Doorkeeper
|
2
4
|
module OpenidConnect
|
3
5
|
module Claims
|
@@ -11,10 +13,10 @@ module Doorkeeper
|
|
11
13
|
name family_name given_name middle_name nickname preferred_username
|
12
14
|
profile picture website gender birthdate zoneinfo locale updated_at
|
13
15
|
],
|
14
|
-
email: %i[
|
15
|
-
address: %i[
|
16
|
-
phone: %i[
|
17
|
-
}
|
16
|
+
email: %i[email email_verified],
|
17
|
+
address: %i[address],
|
18
|
+
phone: %i[phone_number phone_number_verified],
|
19
|
+
}.freeze
|
18
20
|
|
19
21
|
def initialize(options = {})
|
20
22
|
@name = options[:name].to_sym
|
@@ -1,15 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Doorkeeper
|
2
4
|
module OpenidConnect
|
3
5
|
def self.configure(&block)
|
4
6
|
if Doorkeeper.configuration.orm != :active_record
|
5
|
-
|
7
|
+
raise Errors::InvalidConfiguration, 'Doorkeeper OpenID Connect currently only supports the ActiveRecord ORM adapter'
|
6
8
|
end
|
7
9
|
|
8
10
|
@config = Config::Builder.new(&block).build
|
9
11
|
end
|
10
12
|
|
11
13
|
def self.configuration
|
12
|
-
@config || (
|
14
|
+
@config || (raise Errors::MissingConfiguration)
|
13
15
|
end
|
14
16
|
|
15
17
|
class Config
|
@@ -23,12 +25,12 @@ module Doorkeeper
|
|
23
25
|
@config
|
24
26
|
end
|
25
27
|
|
26
|
-
def jws_public_key(*
|
27
|
-
puts
|
28
|
+
def jws_public_key(*_args)
|
29
|
+
puts 'DEPRECATION WARNING: `jws_public_key` is not needed anymore and will be removed in a future version, please remove it from config/initializers/doorkeeper_openid_connect.rb'
|
28
30
|
end
|
29
31
|
|
30
32
|
def jws_private_key(*args)
|
31
|
-
puts
|
33
|
+
puts 'DEPRECATION WARNING: `jws_private_key` has been replaced by `signing_key` and will be removed in a future version, please remove it from config/initializers/doorkeeper_openid_connect.rb'
|
32
34
|
signing_key(*args)
|
33
35
|
end
|
34
36
|
end
|
@@ -71,7 +73,7 @@ module Doorkeeper
|
|
71
73
|
value = if attribute_builder
|
72
74
|
attribute_builder.new(&block).build
|
73
75
|
else
|
74
|
-
block
|
76
|
+
block || args.first
|
75
77
|
end
|
76
78
|
|
77
79
|
@config.instance_variable_set(:"@#{attribute}", value)
|
@@ -102,19 +104,19 @@ module Doorkeeper
|
|
102
104
|
option :subject_types_supported, default: [:public]
|
103
105
|
|
104
106
|
option :resource_owner_from_access_token, default: lambda { |*_|
|
105
|
-
|
107
|
+
raise Errors::InvalidConfiguration, I18n.translate('doorkeeper.openid_connect.errors.messages.resource_owner_from_access_token_not_configured')
|
106
108
|
}
|
107
109
|
|
108
110
|
option :auth_time_from_resource_owner, default: lambda { |*_|
|
109
|
-
|
111
|
+
raise Errors::InvalidConfiguration, I18n.translate('doorkeeper.openid_connect.errors.messages.auth_time_from_resource_owner_not_configured')
|
110
112
|
}
|
111
113
|
|
112
114
|
option :reauthenticate_resource_owner, default: lambda { |*_|
|
113
|
-
|
115
|
+
raise Errors::InvalidConfiguration, I18n.translate('doorkeeper.openid_connect.errors.messages.reauthenticate_resource_owner_not_configured')
|
114
116
|
}
|
115
117
|
|
116
118
|
option :subject, default: lambda { |*_|
|
117
|
-
|
119
|
+
raise Errors::InvalidConfiguration, I18n.translate('doorkeeper.openid_connect.errors.messages.subject_not_configured')
|
118
120
|
}
|
119
121
|
|
120
122
|
option :expiration, default: 120
|
@@ -124,6 +126,10 @@ module Doorkeeper
|
|
124
126
|
option :protocol, default: lambda { |*_|
|
125
127
|
::Rails.env.production? ? :https : :http
|
126
128
|
}
|
129
|
+
|
130
|
+
option :end_session_endpoint, default: lambda { |*_|
|
131
|
+
nil
|
132
|
+
}
|
127
133
|
end
|
128
134
|
end
|
129
135
|
end
|
@@ -1,9 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Doorkeeper
|
2
4
|
module OpenidConnect
|
3
5
|
module Helpers
|
4
6
|
module Controller
|
5
7
|
private
|
6
8
|
|
9
|
+
# FIXME: remove after Doorkeeper will merge it
|
10
|
+
def current_resource_owner
|
11
|
+
return @current_resource_owner if defined?(@current_resource_owner)
|
12
|
+
|
13
|
+
super
|
14
|
+
end
|
15
|
+
|
7
16
|
def authenticate_resource_owner!
|
8
17
|
super.tap do |owner|
|
9
18
|
next unless oidc_authorization_request?
|
@@ -11,8 +20,8 @@ module Doorkeeper
|
|
11
20
|
handle_oidc_prompt_param!(owner)
|
12
21
|
handle_oidc_max_age_param!(owner)
|
13
22
|
end
|
14
|
-
rescue Errors::OpenidConnectError =>
|
15
|
-
handle_oidc_error!(
|
23
|
+
rescue Errors::OpenidConnectError => e
|
24
|
+
handle_oidc_error!(e)
|
16
25
|
end
|
17
26
|
|
18
27
|
def oidc_authorization_request?
|
@@ -30,17 +39,17 @@ module Doorkeeper
|
|
30
39
|
@_response_body = nil
|
31
40
|
|
32
41
|
error_response = if exception.type == :invalid_request
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
42
|
+
::Doorkeeper::OAuth::InvalidRequestResponse.new(
|
43
|
+
name: exception.type,
|
44
|
+
state: params[:state],
|
45
|
+
redirect_uri: params[:redirect_uri],
|
46
|
+
)
|
47
|
+
else
|
48
|
+
::Doorkeeper::OAuth::ErrorResponse.new(
|
49
|
+
name: exception.type,
|
50
|
+
state: params[:state],
|
51
|
+
redirect_uri: params[:redirect_uri],
|
52
|
+
)
|
44
53
|
end
|
45
54
|
|
46
55
|
response.headers.merge!(error_response.headers)
|
@@ -58,7 +67,7 @@ module Doorkeeper
|
|
58
67
|
prompt_values.each do |prompt|
|
59
68
|
case prompt
|
60
69
|
when 'none'
|
61
|
-
raise Errors::InvalidRequest if (prompt_values - [
|
70
|
+
raise Errors::InvalidRequest if (prompt_values - ['none']).any?
|
62
71
|
raise Errors::LoginRequired unless owner
|
63
72
|
raise Errors::ConsentRequired if oidc_consent_required?
|
64
73
|
when 'login'
|
@@ -111,5 +120,5 @@ module Doorkeeper
|
|
111
120
|
end
|
112
121
|
end
|
113
122
|
|
114
|
-
Helpers::Controller.
|
123
|
+
Helpers::Controller.prepend OpenidConnect::Helpers::Controller
|
115
124
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Doorkeeper
|
2
4
|
module OpenidConnect
|
3
5
|
class IdToken
|
@@ -9,7 +11,7 @@ module Doorkeeper
|
|
9
11
|
@access_token = access_token
|
10
12
|
@nonce = nonce
|
11
13
|
@resource_owner = Doorkeeper::OpenidConnect.configuration.resource_owner_from_access_token.call(access_token)
|
12
|
-
@issued_at = Time.now
|
14
|
+
@issued_at = Time.zone.now
|
13
15
|
end
|
14
16
|
|
15
17
|
def claims
|
@@ -1,22 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Doorkeeper
|
2
4
|
module OpenidConnect
|
3
5
|
module OAuth
|
4
6
|
module Authorization
|
5
7
|
module Code
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
if Doorkeeper::OAuth::Authorization::Code.method_defined?(:issue_token!)
|
9
|
+
def issue_token!
|
10
|
+
super.tap do |access_grant|
|
11
|
+
create_openid_request(access_grant) if pre_auth.nonce.present?
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
alias issue_token issue_token!
|
16
|
+
else
|
17
|
+
# FIXME: drop this after dropping support of Doorkeeper < 5.4
|
18
|
+
def issue_token
|
19
|
+
super.tap do |access_grant|
|
20
|
+
create_openid_request(access_grant) if pre_auth.nonce.present?
|
13
21
|
end
|
14
22
|
end
|
15
23
|
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def create_openid_request(access_grant)
|
28
|
+
::Doorkeeper::OpenidConnect::Request.create!(
|
29
|
+
access_grant: access_grant,
|
30
|
+
nonce: pre_auth.nonce
|
31
|
+
)
|
32
|
+
end
|
16
33
|
end
|
17
34
|
end
|
18
35
|
end
|
19
36
|
end
|
20
37
|
|
21
|
-
OAuth::Authorization::Code.
|
38
|
+
OAuth::Authorization::Code.prepend OpenidConnect::OAuth::Authorization::Code
|
22
39
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Doorkeeper
|
2
4
|
module OpenidConnect
|
3
5
|
module OAuth
|
@@ -8,7 +10,7 @@ module Doorkeeper
|
|
8
10
|
super
|
9
11
|
|
10
12
|
nonce =
|
11
|
-
if openid_request = grant.openid_request
|
13
|
+
if (openid_request = grant.openid_request)
|
12
14
|
openid_request.destroy!
|
13
15
|
openid_request.nonce
|
14
16
|
end
|
@@ -20,5 +22,5 @@ module Doorkeeper
|
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
23
|
-
OAuth::AuthorizationCodeRequest.
|
25
|
+
OAuth::AuthorizationCodeRequest.prepend OpenidConnect::OAuth::AuthorizationCodeRequest
|
24
26
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Doorkeeper
|
2
4
|
module OpenidConnect
|
3
5
|
module OAuth
|
@@ -20,5 +22,5 @@ module Doorkeeper
|
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
23
|
-
OAuth::PasswordAccessTokenRequest.
|
25
|
+
OAuth::PasswordAccessTokenRequest.prepend OpenidConnect::OAuth::PasswordAccessTokenRequest
|
24
26
|
end
|
@@ -1,11 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Doorkeeper
|
2
4
|
module OpenidConnect
|
3
5
|
module OAuth
|
4
6
|
module PreAuthorization
|
5
7
|
attr_reader :nonce
|
6
8
|
|
7
|
-
def initialize(server, attrs = {})
|
8
|
-
|
9
|
+
def initialize(server, attrs = {}, resource_owner = nil)
|
10
|
+
if (Doorkeeper::VERSION::MAJOR >= 5 && Doorkeeper::VERSION::MINOR >= 4) ||
|
11
|
+
Doorkeeper::VERSION::MAJOR >= 6
|
12
|
+
super
|
13
|
+
else
|
14
|
+
super(server, attrs)
|
15
|
+
end
|
9
16
|
@nonce = attrs[:nonce]
|
10
17
|
end
|
11
18
|
|
@@ -22,11 +29,11 @@ module Doorkeeper
|
|
22
29
|
private
|
23
30
|
|
24
31
|
def response_on_fragment?
|
25
|
-
response_type ==
|
32
|
+
response_type == 'token' || response_type == 'id_token' || response_type == 'id_token token'
|
26
33
|
end
|
27
34
|
end
|
28
35
|
end
|
29
36
|
end
|
30
37
|
|
31
|
-
OAuth::PreAuthorization.
|
38
|
+
OAuth::PreAuthorization.prepend OpenidConnect::OAuth::PreAuthorization
|
32
39
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Doorkeeper
|
2
4
|
module OpenidConnect
|
3
5
|
module OAuth
|
@@ -19,5 +21,5 @@ module Doorkeeper
|
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
22
|
-
OAuth::TokenResponse.
|
24
|
+
OAuth::TokenResponse.prepend OpenidConnect::OAuth::TokenResponse
|
23
25
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Doorkeeper
|
2
4
|
module OpenidConnect
|
3
5
|
module AccessGrant
|
@@ -12,5 +14,5 @@ module Doorkeeper
|
|
12
14
|
end
|
13
15
|
end
|
14
16
|
|
15
|
-
AccessGrant.
|
17
|
+
AccessGrant.prepend OpenidConnect::AccessGrant
|
16
18
|
end
|
@@ -1,12 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Doorkeeper
|
2
4
|
module OpenidConnect
|
3
|
-
class Request <
|
5
|
+
class Request < ApplicationRecord
|
4
6
|
self.table_name = "#{table_name_prefix}oauth_openid_requests#{table_name_suffix}".to_sym
|
5
7
|
|
6
8
|
validates :access_grant_id, :nonce, presence: true
|
7
9
|
belongs_to :access_grant,
|
8
|
-
|
9
|
-
|
10
|
+
class_name: 'Doorkeeper::AccessGrant',
|
11
|
+
inverse_of: :openid_request
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'doorkeeper/openid_connect/rails/routes/mapping'
|
2
4
|
require 'doorkeeper/openid_connect/rails/routes/mapper'
|
3
5
|
|
@@ -12,7 +14,7 @@ module Doorkeeper
|
|
12
14
|
end
|
13
15
|
|
14
16
|
def self.install!
|
15
|
-
ActionDispatch::Routing::Mapper.
|
17
|
+
ActionDispatch::Routing::Mapper.include Doorkeeper::OpenidConnect::Rails::Routes::Helper
|
16
18
|
end
|
17
19
|
|
18
20
|
attr_accessor :routes
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Doorkeeper
|
2
4
|
module OpenidConnect
|
3
5
|
module ResponseTypeConfig
|
@@ -13,5 +15,5 @@ module Doorkeeper
|
|
13
15
|
end
|
14
16
|
end
|
15
17
|
|
16
|
-
Config.
|
18
|
+
Config.prepend OpenidConnect::ResponseTypeConfig
|
17
19
|
end
|
@@ -1,13 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Doorkeeper
|
2
4
|
module OpenidConnect
|
3
5
|
class InstallGenerator < ::Rails::Generators::Base
|
4
6
|
include ::Rails::Generators::Migration
|
5
|
-
source_root File.expand_path('
|
7
|
+
source_root File.expand_path('templates', __dir__)
|
6
8
|
desc 'Installs Doorkeeper OpenID Connect.'
|
7
9
|
|
8
10
|
def install
|
9
11
|
template 'initializer.rb', 'config/initializers/doorkeeper_openid_connect.rb'
|
10
|
-
copy_file File.expand_path('
|
12
|
+
copy_file File.expand_path('../../../../config/locales/en.yml', __dir__), 'config/locales/doorkeeper_openid_connect.en.yml'
|
11
13
|
route 'use_doorkeeper_openid_connect'
|
12
14
|
end
|
13
15
|
end
|
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rails/generators/active_record'
|
2
4
|
|
3
5
|
module Doorkeeper
|
4
6
|
module OpenidConnect
|
5
7
|
class MigrationGenerator < ::Rails::Generators::Base
|
6
8
|
include ::Rails::Generators::Migration
|
7
|
-
source_root File.expand_path('
|
9
|
+
source_root File.expand_path('templates', __dir__)
|
8
10
|
desc 'Installs Doorkeeper OpenID Connect migration file.'
|
9
11
|
|
10
12
|
def install
|
@@ -1,11 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
Doorkeeper::OpenidConnect.configure do
|
2
4
|
issuer 'issuer string'
|
3
5
|
|
4
|
-
signing_key
|
5
|
-
-----BEGIN RSA PRIVATE KEY-----
|
6
|
-
....
|
7
|
-
-----END RSA PRIVATE KEY-----
|
8
|
-
|
6
|
+
signing_key <<~KEY
|
7
|
+
-----BEGIN RSA PRIVATE KEY-----
|
8
|
+
....
|
9
|
+
-----END RSA PRIVATE KEY-----
|
10
|
+
KEY
|
9
11
|
|
10
12
|
subject_types_supported [:public]
|
11
13
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: doorkeeper-openid_connect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Dengler
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-05-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: doorkeeper
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
version: '5.2'
|
21
21
|
- - "<"
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '5.
|
23
|
+
version: '5.5'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
version: '5.2'
|
31
31
|
- - "<"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '5.
|
33
|
+
version: '5.5'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: json-jwt
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -46,19 +46,19 @@ dependencies:
|
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 1.11.0
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
|
-
name:
|
49
|
+
name: conventional-changelog
|
50
50
|
requirement: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '1.2'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '1.2'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: factory_bot
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -74,21 +74,21 @@ dependencies:
|
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
- !ruby/object:Gem::Dependency
|
77
|
-
name:
|
77
|
+
name: pry-byebug
|
78
78
|
requirement: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: '0'
|
83
83
|
type: :development
|
84
84
|
prerelease: false
|
85
85
|
version_requirements: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: '0'
|
90
90
|
- !ruby/object:Gem::Dependency
|
91
|
-
name:
|
91
|
+
name: rspec-rails
|
92
92
|
requirement: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - ">="
|
@@ -102,19 +102,19 @@ dependencies:
|
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
|
-
name:
|
105
|
+
name: sqlite3
|
106
106
|
requirement: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: 1.3.6
|
111
111
|
type: :development
|
112
112
|
prerelease: false
|
113
113
|
version_requirements: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
117
|
+
version: 1.3.6
|
118
118
|
description: OpenID Connect extension for Doorkeeper.
|
119
119
|
email:
|
120
120
|
- sam.dengler@playonsports.com
|
@@ -123,22 +123,13 @@ executables: []
|
|
123
123
|
extensions: []
|
124
124
|
extra_rdoc_files: []
|
125
125
|
files:
|
126
|
-
- ".gitignore"
|
127
|
-
- ".ruby-version"
|
128
|
-
- ".travis.yml"
|
129
126
|
- CHANGELOG.md
|
130
|
-
- CONTRIBUTING.md
|
131
|
-
- Gemfile
|
132
127
|
- LICENSE.txt
|
133
128
|
- README.md
|
134
|
-
- Rakefile
|
135
129
|
- app/controllers/doorkeeper/authorizations_controller.rb
|
136
130
|
- app/controllers/doorkeeper/openid_connect/discovery_controller.rb
|
137
131
|
- app/controllers/doorkeeper/openid_connect/userinfo_controller.rb
|
138
|
-
- bin/console
|
139
|
-
- bin/setup
|
140
132
|
- config/locales/en.yml
|
141
|
-
- doorkeeper-openid_connect.gemspec
|
142
133
|
- lib/doorkeeper/oauth/id_token_request.rb
|
143
134
|
- lib/doorkeeper/oauth/id_token_response.rb
|
144
135
|
- lib/doorkeeper/oauth/id_token_token_request.rb
|
@@ -194,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
194
185
|
- !ruby/object:Gem::Version
|
195
186
|
version: '0'
|
196
187
|
requirements: []
|
197
|
-
rubygems_version: 3.0.
|
188
|
+
rubygems_version: 3.0.2
|
198
189
|
signing_key:
|
199
190
|
specification_version: 4
|
200
191
|
summary: OpenID Connect extension for Doorkeeper.
|
data/.gitignore
DELETED
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.6.5
|
data/.travis.yml
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
cache: bundler
|
3
|
-
sudo: false
|
4
|
-
|
5
|
-
before_install:
|
6
|
-
- gem update --system
|
7
|
-
# Bundler 2.0 is not compatible with Rails 4.2
|
8
|
-
# https://docs.travis-ci.com/user/languages/ruby/#bundler-20
|
9
|
-
- "find /home/travis/.rvm/rubies -wholename '*default/bundler-*.gemspec' -delete"
|
10
|
-
- rvm @global do gem uninstall bundler -a -x -I || true
|
11
|
-
- gem install bundler -v '< 2'
|
12
|
-
|
13
|
-
before_script:
|
14
|
-
- bundle update
|
15
|
-
- bundle exec rake migrate
|
16
|
-
|
17
|
-
script:
|
18
|
-
- bundle exec rake spec
|
19
|
-
|
20
|
-
env:
|
21
|
-
- rails=5.0.0
|
22
|
-
- rails=5.2.0
|
23
|
-
|
24
|
-
rvm:
|
25
|
-
- 2.4
|
26
|
-
- 2.5
|
27
|
-
- 2.6
|
data/CONTRIBUTING.md
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
# Contributing
|
2
|
-
|
3
|
-
## Workflow
|
4
|
-
|
5
|
-
We are using the [Feature Branch Workflow (also known as GitHub Flow)](https://guides.github.com/introduction/flow/), and prefer delivery as pull requests.
|
6
|
-
|
7
|
-
Our first line of defense is the [Travis CI](https://travis-ci.org/doorkeeper-gem/doorkeeper-openid_connect) build defined within [.travis.yml](.travis.yml) and triggered for every pull request.
|
8
|
-
|
9
|
-
Create a feature branch:
|
10
|
-
|
11
|
-
```sh
|
12
|
-
git checkout -B feature/contributing
|
13
|
-
```
|
14
|
-
|
15
|
-
## Creating Good Commits
|
16
|
-
|
17
|
-
The cardinal rule for creating good commits is to ensure there is only one
|
18
|
-
"logical change" per commit. Why is this an important rule?
|
19
|
-
|
20
|
-
* The smaller the amount of code being changed, the quicker & easier it is to
|
21
|
-
review & identify potential flaws.
|
22
|
-
|
23
|
-
* If a change is found to be flawed later, it may be necessary to revert the
|
24
|
-
broken commit. This is much easier to do if there are not other unrelated
|
25
|
-
code changes entangled with the original commit.
|
26
|
-
|
27
|
-
* When troubleshooting problems using Git's bisect capability, small well
|
28
|
-
defined changes will aid in isolating exactly where the code problem was
|
29
|
-
introduced.
|
30
|
-
|
31
|
-
* When browsing history using Git annotate/blame, small well defined changes
|
32
|
-
also aid in isolating exactly where & why a piece of code came from.
|
33
|
-
|
34
|
-
Things to avoid when creating commits:
|
35
|
-
|
36
|
-
* Mixing whitespace changes with functional code changes.
|
37
|
-
* Mixing two unrelated functional changes.
|
38
|
-
* Sending large new features in a single giant commit.
|
39
|
-
|
40
|
-
## Release process
|
41
|
-
|
42
|
-
- Bump version in `lib/doorkeeper/openid_connect/version.rb`
|
43
|
-
- Update `CHANGELOG.md`
|
44
|
-
- Commit all changes
|
45
|
-
- Tag release and publish gem with `rake release`
|
data/Gemfile
DELETED
data/Rakefile
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
ENV['RAILS_ENV'] ||= 'test'
|
2
|
-
|
3
|
-
require "bundler/gem_tasks"
|
4
|
-
require "rspec/core/rake_task"
|
5
|
-
|
6
|
-
RSpec::Core::RakeTask.new
|
7
|
-
|
8
|
-
task default: :spec
|
9
|
-
task test: :spec
|
10
|
-
|
11
|
-
desc 'Generate and run migrations in the test application'
|
12
|
-
task :migrate do
|
13
|
-
Dir.chdir('spec/dummy') do
|
14
|
-
system('bin/rails generate doorkeeper:openid_connect:migration')
|
15
|
-
system('bin/rake db:migrate')
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
desc 'Run server in the test application'
|
20
|
-
task :server do
|
21
|
-
Dir.chdir('spec/dummy') do
|
22
|
-
system('bin/rails server')
|
23
|
-
end
|
24
|
-
end
|
data/bin/console
DELETED
data/bin/setup
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
$:.push File.expand_path('../lib', __FILE__)
|
2
|
-
require 'doorkeeper/openid_connect/version'
|
3
|
-
|
4
|
-
Gem::Specification.new do |spec|
|
5
|
-
spec.name = 'doorkeeper-openid_connect'
|
6
|
-
spec.version = Doorkeeper::OpenidConnect::VERSION
|
7
|
-
spec.authors = ['Sam Dengler', 'Markus Koller']
|
8
|
-
spec.email = ['sam.dengler@playonsports.com', 'markus-koller@gmx.ch']
|
9
|
-
spec.homepage = 'https://github.com/doorkeeper-gem/doorkeeper-openid_connect'
|
10
|
-
spec.summary = %q{OpenID Connect extension for Doorkeeper.}
|
11
|
-
spec.description = %q{OpenID Connect extension for Doorkeeper.}
|
12
|
-
spec.license = %q{MIT}
|
13
|
-
|
14
|
-
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
15
|
-
f.match(%r{^(test|spec|features)/})
|
16
|
-
end
|
17
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
|
-
spec.require_paths = ['lib']
|
19
|
-
|
20
|
-
spec.required_ruby_version = ">= 2.4"
|
21
|
-
|
22
|
-
spec.add_runtime_dependency 'doorkeeper', '>= 5.2', '< 5.4'
|
23
|
-
spec.add_runtime_dependency 'json-jwt', '>= 1.11.0'
|
24
|
-
|
25
|
-
spec.add_development_dependency 'rspec-rails'
|
26
|
-
spec.add_development_dependency 'factory_bot'
|
27
|
-
# We need to stick to this sqlite3 version for Rails 5.0
|
28
|
-
# https://github.com/rails/rails/pull/35154
|
29
|
-
spec.add_development_dependency 'sqlite3', '~> 1.3.6'
|
30
|
-
spec.add_development_dependency 'pry-byebug'
|
31
|
-
spec.add_development_dependency 'conventional-changelog', '~> 1.2'
|
32
|
-
end
|