diff --git a/app/models/auth_provider.rb b/app/models/auth_provider.rb index b21f319bb..0c0899a2a 100644 --- a/app/models/auth_provider.rb +++ b/app/models/auth_provider.rb @@ -23,6 +23,7 @@ class AuthProvider < ApplicationRecord validates :providable_type, inclusion: { in: PROVIDABLE_TYPES } validates :name, presence: true, uniqueness: true + validates_with OAuth2ProviderValidator, if: -> { providable_type == 'OAuth2Provider' } before_create :set_initial_state diff --git a/app/models/o_auth2_provider.rb b/app/models/o_auth2_provider.rb index d562a520c..a91647b85 100644 --- a/app/models/o_auth2_provider.rb +++ b/app/models/o_auth2_provider.rb @@ -5,8 +5,6 @@ class OAuth2Provider < ApplicationRecord has_one :auth_provider, as: :providable - validates_with OAuth2ProviderValidator - def domain URI(base_url).scheme + '://' + URI(base_url).host end diff --git a/app/validators/o_auth2_provider_validator.rb b/app/validators/o_auth2_provider_validator.rb index c12419588..8b857bca2 100644 --- a/app/validators/o_auth2_provider_validator.rb +++ b/app/validators/o_auth2_provider_validator.rb @@ -3,7 +3,9 @@ # Validates the presence of the User.uid mapping class OAuth2ProviderValidator < ActiveModel::Validator def validate(record) - return if record.auth_provider.auth_provider_mappings.any? do |mapping| + return unless record.providable_type == 'OAuth2Provider' + + return if record.auth_provider_mappings.any? do |mapping| mapping.local_model == 'user' && mapping.local_field == 'uid' end