Module: Panda::Core::Engine::OmniauthConfig

Extended by:
ActiveSupport::Concern
Included in:
Panda::Core::Engine
Defined in:
lib/panda/core/engine/omniauth_config.rb

Constant Summary collapse

PROVIDER_REGISTRY =
{
  # Microsoft
  "microsoft" => :microsoft_graph,
  "microsoft_graph" => :microsoft_graph,

  # Google
  "google" => :google_oauth2,
  "google_oauth2" => :google_oauth2,
  "gmail" => :google_oauth2,

  # GitHub
  "github" => :github,
  "gh" => :github,

  # Developer
  "developer" => :developer
}.freeze

Instance Method Summary collapse

Instance Method Details

#configure_provider(builder, name, settings) ⇒ Object

Configure a single provider on the OmniAuth builder

Parameters:

  • builder (OmniAuth::Builder)

    the OmniAuth builder instance

  • name (String)

    the provider name (may be an alias)

  • settings (Hash)

    provider configuration



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/panda/core/engine/omniauth_config.rb', line 80

def configure_provider(builder, name, settings)
  symbol = PROVIDER_REGISTRY[name.to_s]

  unless symbol
    Rails.logger.warn("[panda-core] Unknown OmniAuth provider: #{name.inspect}") if defined?(Rails.logger)
    return
  end

  return if symbol == :developer && !Rails.env.development?

  # Skip providers without credentials (except developer which doesn't need them)
  has_credentials = settings[:client_id].present? && settings[:client_secret].present?
  if symbol != :developer && !has_credentials
    Rails.logger.info("[panda-core] Skipping OmniAuth provider #{name.inspect}: missing client_id or client_secret") if defined?(Rails.logger)
    return
  end

  options = (settings[:options] || {}).dup
  options[:name] = settings[:path_name] if settings[:path_name].present?

  if settings[:client_id] && settings[:client_secret]
    builder.provider symbol, settings[:client_id], settings[:client_secret], options
  else
    builder.provider symbol, options
  end
end

#load_yaml_provider_overrides!Object

Deprecated.

Use class method load_yaml_provider_overrides_early! instead

Instance method for loading YAML provider overrides (for testing)



65
66
67
68
69
70
71
72
73
74
# File 'lib/panda/core/engine/omniauth_config.rb', line 65

def load_yaml_provider_overrides!
  path = Panda::Core::Engine.root.join("config/providers.yml")
  return unless File.exist?(path)

  yaml = YAML.load_file(path) || {}
  (yaml["providers"] || {}).each do |name, settings|
    Panda::Core.config.authentication_providers[name.to_s] ||= {}
    Panda::Core.config.authentication_providers[name.to_s].deep_merge!(settings)
  end
end