debian-mirror-gitlab/config/initializers/doorkeeper_openid_connect.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

75 lines
3 KiB
Ruby
Raw Normal View History

2021-03-11 19:13:27 +05:30
# frozen_string_literal: true
2017-08-17 22:00:37 +05:30
Doorkeeper::OpenidConnect.configure do
issuer Gitlab.config.gitlab.url
2018-03-17 18:26:18 +05:30
signing_key Rails.application.secrets.openid_connect_signing_key
2017-08-17 22:00:37 +05:30
resource_owner_from_access_token do |access_token|
User.active.find_by(id: access_token.resource_owner_id)
end
auth_time_from_resource_owner do |user|
user.current_sign_in_at
end
reauthenticate_resource_owner do |user, return_to|
store_location_for user, return_to
sign_out user
redirect_to new_user_session_url
end
subject do |user|
2018-11-08 19:23:39 +05:30
user.id
2017-08-17 22:00:37 +05:30
end
claims do
with_options scope: :openid do |o|
2018-11-08 19:23:39 +05:30
o.claim(:sub_legacy, response: [:id_token, :user_info]) do |user|
# provide the previously hashed 'sub' claim to allow third-party apps
# to migrate to the new unhashed value
Digest::SHA256.hexdigest "#{user.id}-#{Rails.application.secrets.secret_key_base}"
end
2023-04-23 21:23:45 +05:30
o.claim(:name, response: [:id_token, :user_info]) { |user| user.name }
o.claim(:nickname, response: [:id_token, :user_info]) { |user| user.username }
o.claim(:preferred_username, response: [:id_token, :user_info]) { |user| user.username }
2019-03-02 22:35:43 +05:30
# Check whether the application has access to the email scope, and grant
# access to the user's primary email address if so, otherwise their
# public email address (if present)
# This allows existing solutions built for GitLab's old behavior to keep
# working without modification.
2020-07-28 23:09:34 +05:30
o.claim(:email, response: [:id_token, :user_info]) do |user, scopes|
2019-03-02 22:35:43 +05:30
scopes.exists?(:email) ? user.email : user.public_email
end
2020-07-28 23:09:34 +05:30
o.claim(:email_verified, response: [:id_token, :user_info]) do |user, scopes|
2019-03-02 22:35:43 +05:30
if scopes.exists?(:email)
user.primary_email_verified?
elsif user.public_email?
user.verified_email?(user.public_email)
else
# If there is no public email set, tell doorkicker-openid-connect to
# exclude the email_verified claim by returning nil.
nil
end
end
2023-04-23 21:23:45 +05:30
o.claim(:website, response: [:id_token, :user_info]) { |user| user.full_website_url if user.website_url.present? }
o.claim(:profile, response: [:id_token, :user_info]) { |user| Gitlab::Routing.url_helpers.user_url user }
o.claim(:picture, response: [:id_token, :user_info]) { |user| user.avatar_url(only_path: false) }
o.claim(:groups) { |user| user.membership_groups.joins(:route).with_route.map(&:full_path) }
2021-11-11 11:23:49 +05:30
o.claim(:groups_direct, response: [:id_token]) { |user| user.groups.joins(:route).with_route.map(&:full_path) }
2022-01-26 12:08:38 +05:30
o.claim('https://gitlab.org/claims/groups/owner') do |user|
user.owned_groups.joins(:route).with_route.map(&:full_path).presence
end
o.claim('https://gitlab.org/claims/groups/maintainer') do |user|
user.maintainers_groups.joins(:route).with_route.map(&:full_path).presence
end
o.claim('https://gitlab.org/claims/groups/developer') do |user|
user.developer_groups.joins(:route).with_route.map(&:full_path).presence
end
2017-08-17 22:00:37 +05:30
end
end
end