]> git.openstreetmap.org Git - rails.git/commitdiff
Make allow_account_creation work the same as other ACLs
authorTom Hughes <tom@compton.nu>
Tue, 19 Dec 2023 11:58:30 +0000 (11:58 +0000)
committerTom Hughes <tom@compton.nu>
Tue, 19 Dec 2023 12:03:08 +0000 (12:03 +0000)
app/models/acl.rb
test/models/acl_test.rb

index 26285cef38ac0825ab237a7ba955a6118761d137..aa503f40c539647dfb9d66aea990b57e6f8c76c6 100644 (file)
@@ -42,12 +42,7 @@ class Acl < ApplicationRecord
   end
 
   def self.allow_account_creation(address, options = {})
-    acls = Acl.where("address >>= ?", address)
-              .and(Acl.where(:k => "allow_account_creation"))
-    acls = acls.and(Acl.where(:domain => options[:domain])) if options[:domain]
-    acls = acls.and(Acl.where(:mx => options[:mx])) if options[:mx]
-
-    !acls.empty?
+    match(address, options).exists?(:k => "allow_account_creation")
   end
 
   def self.no_note_comment(address, domain = nil)
index 33601df2b60fbce8d36c521b30727cc2f47536ee..ecf150c6d2e329d217017c09da93ec085919a7b1 100644 (file)
@@ -28,16 +28,23 @@ class AclTest < ActiveSupport::TestCase
     assert Acl.no_account_creation("192.168.1.1", :mx => "mail.example.com")
   end
 
-  def test_allowed_account_creation
-    assert_not Acl.allow_account_creation("192.168.1.1", :domain => "example.com", :mx => "mail.example.com")
-    create(:acl, :address => "192.168.1.1", :domain => "example.com", :mx => "mail.example.com", :k => "allow_account_creation")
-
-    assert_not Acl.allow_account_creation("192.168.1.2")
+  def test_allow_account_creation_by_subnet
+    assert_not Acl.allow_account_creation("192.168.1.1")
+    create(:acl, :address => "192.168.0.0/16", :k => "allow_account_creation")
     assert Acl.allow_account_creation("192.168.1.1")
+  end
+
+  def test_allow_account_creation_by_domain
+    assert_not Acl.allow_account_creation("192.168.1.1", :domain => "example.com")
+    assert_not Acl.allow_account_creation("192.168.1.1", :domain => "test.example.com")
+    create(:acl, :domain => "example.com", :k => "allow_account_creation")
+    assert Acl.allow_account_creation("192.168.1.1", :domain => "example.com")
+    assert Acl.allow_account_creation("192.168.1.1", :domain => "test.example.com")
+  end
 
-    assert_not Acl.allow_account_creation("192.168.1.2", :domain => "example.com", :mx => "mail.example.com")
-    assert_not Acl.allow_account_creation("192.168.1.1", :domain => "example1.com", :mx => "mail.example.com")
-    assert_not Acl.allow_account_creation("192.168.1.1", :domain => "example.com", :mx => "mail1.example.com")
-    assert Acl.allow_account_creation("192.168.1.1", :domain => "example.com", :mx => "mail.example.com")
+  def test_allow_account_creation_by_mx
+    assert_not Acl.allow_account_creation("192.168.1.1", :mx => "mail.example.com")
+    create(:acl, :mx => "mail.example.com", :k => "allow_account_creation")
+    assert Acl.allow_account_creation("192.168.1.1", :mx => "mail.example.com")
   end
 end