# frozen_string_literal: true # Provides methods for the configuration of authentication providers. class AuthProviderService class << self def auto_configure(provider) auto_configure_open_id_connect(provider) if provider.providable_type == OpenIdConnectProvider.name end private def auto_configure_open_id_connect(provider) raise NoMethodError unless provider.providable require 'uri' provider.providable.post_logout_redirect_uri = "#{ENV.fetch('DEFAULT_PROTOCOL')}://#{ENV.fetch('DEFAULT_HOST')}/sessions/sign_out" provider.providable.client__redirect_uri = "#{ENV.fetch('DEFAULT_PROTOCOL')}://#{ENV.fetch('DEFAULT_HOST')}/users/auth/#{provider.strategy_name}/callback" provider.providable.display = 'page' provider.providable.response_mode = 'query' provider.providable.response_type = 'code' provider.providable.uid_field = provider.auth_provider_mappings .find { |m| m.local_model == 'user' && m.local_field == 'uid' } &.api_field URI.parse(provider.providable.issuer).tap do |uri| provider.providable.client__scheme = uri.scheme provider.providable.client__host = uri.host provider.providable.client__port = uri.port end end end end