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, # Apple (Sign in with Apple) "apple" => :apple, # Developer "developer" => :developer }.freeze
Class Method Summary collapse
- .apple_credentials_configured?(settings) ⇒ Boolean
-
.credentials_configured?(symbol, settings) ⇒ Boolean
Whether a provider has enough credentials to register / show on login.
-
.register_provider(builder, symbol, settings, options) ⇒ Object
Register a provider on an OmniAuth::Builder.
Instance Method Summary collapse
-
#configure_provider(builder, name, settings) ⇒ Object
Configure a single provider on the OmniAuth builder.
-
#load_yaml_provider_overrides! ⇒ Object
deprecated
Deprecated.
Use class method load_yaml_provider_overrides_early! instead
Class Method Details
.apple_credentials_configured?(settings) ⇒ Boolean
46 47 48 49 50 51 |
# File 'lib/panda/core/engine/omniauth_config.rb', line 46 def self.apple_credentials_configured?(settings) settings[:client_id].present? && settings.dig(:options, :team_id).present? && settings.dig(:options, :key_id).present? && settings.dig(:options, :pem).present? end |
.credentials_configured?(symbol, settings) ⇒ Boolean
Whether a provider has enough credentials to register / show on login. Apple uses a JWT client secret derived from team_id / key_id / pem (no static client_secret).
35 36 37 38 39 40 41 42 43 44 |
# File 'lib/panda/core/engine/omniauth_config.rb', line 35 def self.credentials_configured?(symbol, settings) case symbol.to_sym when :developer true when :apple apple_credentials_configured?(settings) else settings[:client_id].present? && settings[:client_secret].present? end end |
.register_provider(builder, symbol, settings, options) ⇒ Object
Register a provider on an OmniAuth::Builder. Apple's strategy ignores the static secret and signs a JWT from options.
55 56 57 58 59 60 61 62 63 64 |
# File 'lib/panda/core/engine/omniauth_config.rb', line 55 def self.register_provider(builder, symbol, settings, ) case symbol.to_sym when :apple builder.provider :apple, settings[:client_id], "", when :developer builder.provider :developer, else builder.provider symbol, settings[:client_id], settings[:client_secret], end end |
Instance Method Details
#configure_provider(builder, name, settings) ⇒ Object
Configure a single provider on the OmniAuth builder
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/panda/core/engine/omniauth_config.rb', line 117 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? unless OmniauthConfig.credentials_configured?(symbol, settings) Rails.logger.info("[panda-core] Skipping OmniAuth provider #{name.inspect}: missing credentials") if defined?(Rails.logger) return end = (settings[:options] || {}).dup [:name] = settings[:path_name] if settings[:path_name].present? OmniauthConfig.register_provider(builder, symbol, settings, ) 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)
102 103 104 105 106 107 108 109 110 111 |
# File 'lib/panda/core/engine/omniauth_config.rb', line 102 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 |