* Split Settings::Authentication from SiteConfig * Move specs * Sort fields * Update settings usages * Update recaptcha usages * Add data update script * Update spec * Rename SiteConfigParams concern * Fixes, new route, new controller * Controller and service refactoring * More controller and service updates * Spec updates * More spec fixes * Move file * Fix FeedbackMessagesController * Update admin/configs_spec * Fix remaining specs in admin/configs_spec * Fix configs API * Formatting * Clean up old service object * Various fixes * Update DUS * Add model argument to admin_config_label * Fix key name * Fix specs * Add distinct request caches for settings classes * Fix e2e tests * Fix remaining system spec * Make DUS idempotent * Move routes block * Cleanup * Switch to ActiveSupport::CurrentAttributes * Pinned rails-settings-cached * Update e2e test * Update lib/data_update_scripts/20210316091354_move_authentication_settings.rb Co-authored-by: rhymes <rhymes@hey.com> * Add guard to DUS * Temporarily re-add two SiteConfig fields * Fix config show view Co-authored-by: rhymes <rhymes@hey.com>
69 lines
1.9 KiB
Ruby
69 lines
1.9 KiB
Ruby
# We require all authentication modules to make sure providers
|
|
# are correctly preloaded and ready to be used at this point as the loading
|
|
# order is important
|
|
require_dependency Rails.root.join("app/services/authentication/providers/provider.rb")
|
|
|
|
Dir[Rails.root.join("app/services/authentication/**/*.rb")].each do |f|
|
|
require_dependency(f)
|
|
end
|
|
|
|
module Authentication
|
|
module Providers
|
|
# Retrieves a provider that is both available and enabled
|
|
def self.get!(provider_name)
|
|
name = provider_name.to_s.titleize
|
|
|
|
unless available?(provider_name)
|
|
raise(
|
|
::Authentication::Errors::ProviderNotFound,
|
|
"Provider #{name} is not available!",
|
|
)
|
|
end
|
|
|
|
unless enabled?(provider_name)
|
|
raise(
|
|
::Authentication::Errors::ProviderNotEnabled,
|
|
"Provider #{name} is not enabled!",
|
|
)
|
|
end
|
|
|
|
Authentication::Providers.const_get(name)
|
|
end
|
|
|
|
def self.available
|
|
Authentication::Providers::Provider.subclasses.map do |subclass|
|
|
subclass.name.demodulize.downcase.to_sym
|
|
end.sort
|
|
end
|
|
|
|
def self.available?(provider_name)
|
|
Authentication::Providers.const_defined?(provider_name.to_s.titleize)
|
|
end
|
|
|
|
# Returns enabled providers
|
|
# TODO: [@forem/oss] ideally this should be "available - disabled"
|
|
# we can get there once we have feature flags
|
|
def self.enabled
|
|
return [] if Settings::Authentication.invite_only_mode
|
|
|
|
Settings::Authentication.providers.map(&:to_sym).sort
|
|
end
|
|
|
|
def self.enabled_for_user(user)
|
|
return [] unless user
|
|
|
|
providers = enabled & user.identities.pluck(:provider).map(&:to_sym)
|
|
providers.sort.map do |provider_name|
|
|
get!(provider_name)
|
|
end
|
|
end
|
|
|
|
def self.enabled?(provider_name)
|
|
enabled.include?(provider_name.to_sym)
|
|
end
|
|
|
|
def self.username_fields
|
|
Authentication::Providers::Provider.subclasses.map(&:user_username_field).sort
|
|
end
|
|
end
|
|
end
|