Allow acls to match on parent domains

This commit is contained in:
Tom Hughes 2021-07-06 10:12:51 +01:00
parent 09b4997e8b
commit da546af22e
2 changed files with 11 additions and 1 deletions

View file

@ -23,7 +23,15 @@ class Acl < ApplicationRecord
def self.match(address, options = {})
acls = Acl.where("address >>= ?", address)
acls = acls.or(Acl.where(:domain => options[:domain])) if options[:domain]
if options[:domain]
labels = options[:domain].split(".")
until labels.empty?
acls = acls.or(Acl.where(:domain => labels.join(".")))
labels.shift
end
end
acls = acls.or(Acl.where(:mx => options[:mx])) if options[:mx]
acls

View file

@ -16,8 +16,10 @@ class AclTest < ActiveSupport::TestCase
def test_no_account_creation_by_domain
assert_not Acl.no_account_creation("192.168.1.1", :domain => "example.com")
assert_not Acl.no_account_creation("192.168.1.1", :domain => "test.example.com")
create(:acl, :domain => "example.com", :k => "no_account_creation")
assert Acl.no_account_creation("192.168.1.1", :domain => "example.com")
assert Acl.no_account_creation("192.168.1.1", :domain => "test.example.com")
end
def test_no_account_creation_by_mx