Add whitelist mode (#11291)
This commit is contained in:
33
app/models/domain_allow.rb
Normal file
33
app/models/domain_allow.rb
Normal file
@@ -0,0 +1,33 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# == Schema Information
|
||||
#
|
||||
# Table name: domain_allows
|
||||
#
|
||||
# id :bigint(8) not null, primary key
|
||||
# domain :string default(""), not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
#
|
||||
|
||||
class DomainAllow < ApplicationRecord
|
||||
include DomainNormalizable
|
||||
|
||||
validates :domain, presence: true, uniqueness: true
|
||||
|
||||
scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) }
|
||||
|
||||
class << self
|
||||
def allowed?(domain)
|
||||
!rule_for(domain).nil?
|
||||
end
|
||||
|
||||
def rule_for(domain)
|
||||
return if domain.blank?
|
||||
|
||||
uri = Addressable::URI.new.tap { |u| u.host = domain.gsub(/[\/]/, '') }
|
||||
|
||||
find_by(domain: uri.normalized_host)
|
||||
end
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user