forked from External/greenlight
108 lines
4.2 KiB
Ruby
108 lines
4.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'office365'
|
|
require 'omniauth_options'
|
|
|
|
include OmniauthOptions
|
|
|
|
# List of supported Omniauth providers.
|
|
Rails.application.config.providers = []
|
|
|
|
# Set which providers are configured.
|
|
Rails.application.config.omniauth_bn_launcher = Rails.configuration.loadbalanced_configuration
|
|
Rails.application.config.omniauth_ldap = ENV['LDAP_SERVER'].present? && ENV['LDAP_UID'].present? &&
|
|
ENV['LDAP_BASE'].present?
|
|
Rails.application.config.omniauth_twitter = ENV['TWITTER_ID'].present? && ENV['TWITTER_SECRET'].present?
|
|
Rails.application.config.omniauth_google = ENV['GOOGLE_OAUTH2_ID'].present? && ENV['GOOGLE_OAUTH2_SECRET'].present?
|
|
Rails.application.config.omniauth_office365 = ENV['OFFICE365_KEY'].present? &&
|
|
ENV['OFFICE365_SECRET'].present?
|
|
Rails.application.config.omniauth_openid_connect = ENV['OPENID_CONNECT_CLIENT_ID'].present? &&
|
|
ENV['OPENID_CONNECT_CLIENT_SECRET'].present? &&
|
|
ENV['OPENID_CONNECT_ISSUER'].present?
|
|
|
|
SETUP_PROC = lambda do |env|
|
|
OmniauthOptions.omniauth_options env
|
|
end
|
|
|
|
OmniAuth.config.logger = Rails.logger
|
|
|
|
# Setup the Omniauth middleware.
|
|
Rails.application.config.middleware.use OmniAuth::Builder do
|
|
if Rails.configuration.omniauth_bn_launcher
|
|
provider :bn_launcher, client_id: ENV['CLIENT_ID'],
|
|
client_secret: ENV['CLIENT_SECRET'],
|
|
client_options: { site: ENV['BN_LAUNCHER_URI'] || ENV['BN_LAUNCHER_REDIRECT_URI'] },
|
|
setup: SETUP_PROC
|
|
else
|
|
Rails.application.config.providers << :ldap if Rails.configuration.omniauth_ldap
|
|
|
|
if Rails.configuration.omniauth_twitter
|
|
Rails.application.config.providers << :twitter
|
|
|
|
provider :twitter, ENV['TWITTER_ID'], ENV['TWITTER_SECRET']
|
|
end
|
|
if Rails.configuration.omniauth_google
|
|
Rails.application.config.providers << :google
|
|
|
|
redirect = ENV['OAUTH2_REDIRECT'].present? ? File.join(ENV['OAUTH2_REDIRECT'], "auth", "google", "callback") : nil
|
|
|
|
provider :google_oauth2, ENV['GOOGLE_OAUTH2_ID'], ENV['GOOGLE_OAUTH2_SECRET'],
|
|
scope: %w(profile email),
|
|
access_type: 'online',
|
|
name: 'google',
|
|
redirect_uri: redirect,
|
|
setup: SETUP_PROC
|
|
end
|
|
if Rails.configuration.omniauth_office365
|
|
Rails.application.config.providers << :office365
|
|
|
|
redirect = ENV['OAUTH2_REDIRECT'].present? ? File.join(ENV['OAUTH2_REDIRECT'], "auth", "office365", "callback") : nil
|
|
|
|
provider :office365, ENV['OFFICE365_KEY'], ENV['OFFICE365_SECRET'],
|
|
redirect_uri: redirect,
|
|
setup: SETUP_PROC
|
|
end
|
|
if Rails.configuration.omniauth_openid_connect
|
|
Rails.application.config.providers << :openid_connect
|
|
|
|
redirect = ENV['OAUTH2_REDIRECT'].present? ? File.join(ENV['OAUTH2_REDIRECT'], "auth", "openid_connect", "callback") : nil
|
|
|
|
provider :openid_connect,
|
|
issuer: ENV["OPENID_CONNECT_ISSUER"],
|
|
discovery: true,
|
|
scope: [:email, :profile],
|
|
response_type: :code,
|
|
uid_field: ENV["OPENID_CONNECT_UID_FIELD"] || "preferred_username",
|
|
client_options: {
|
|
identifier: ENV['OPENID_CONNECT_CLIENT_ID'],
|
|
secret: ENV['OPENID_CONNECT_CLIENT_SECRET'],
|
|
redirect_uri: redirect
|
|
},
|
|
setup: SETUP_PROC
|
|
end
|
|
if Rails.configuration.omniauth_openid_connect
|
|
Rails.application.config.providers << :openid_connect
|
|
|
|
redirect = ENV['OAUTH2_REDIRECT'].present? ? File.join(ENV['OAUTH2_REDIRECT'], "auth", "openid_connect", "callback") : nil
|
|
|
|
provider :openid_connect,
|
|
issuer: ENV["OPENID_CONNECT_ISSUER"],
|
|
discovery: true,
|
|
scope: [:email, :profile],
|
|
response_type: :code,
|
|
uid_field: ENV["OPENID_CONNECT_UID_FIELD"] || "preferred_username",
|
|
client_options: {
|
|
identifier: ENV['OPENID_CONNECT_CLIENT_ID'],
|
|
secret: ENV['OPENID_CONNECT_CLIENT_SECRET'],
|
|
redirect_uri: redirect
|
|
},
|
|
setup: SETUP_PROC
|
|
end
|
|
end
|
|
end
|
|
|
|
# Redirect back to login in development mode.
|
|
OmniAuth.config.on_failure = proc { |env|
|
|
OmniAuth::FailureEndpoint.new(env).redirect_to_failure
|
|
}
|