Allow blocking TLDs, and fix TLD blocks not being editable (#12805)
Fixes #12795 It was already possible to create domain blocks for TLDs, but those weren't enforced, nor editable. This commit changes it so that they are enforced and editable.
This commit is contained in:
		
							parent
							
								
									b5426b4e9a
								
							
						
					
					
						commit
						f52ef9b007
					
				
					 2 changed files with 11 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -54,7 +54,7 @@ class DomainBlock < ApplicationRecord
 | 
			
		|||
      segments = uri.normalized_host.split('.')
 | 
			
		||||
      variants = segments.map.with_index { |_, i| segments[i..-1].join('.') }
 | 
			
		||||
 | 
			
		||||
      where(domain: variants[0..-2]).order(Arel.sql('char_length(domain) desc')).first
 | 
			
		||||
      where(domain: variants).order(Arel.sql('char_length(domain) desc')).first
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,6 +52,16 @@ RSpec.describe DomainBlock, type: :model do
 | 
			
		|||
      block = Fabricate(:domain_block, domain: 'sub.example.com')
 | 
			
		||||
      expect(DomainBlock.rule_for('sub.example.com')).to eq block
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'returns a rule matching a blocked TLD' do
 | 
			
		||||
      block = Fabricate(:domain_block, domain: 'google')
 | 
			
		||||
      expect(DomainBlock.rule_for('google')).to eq block
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'returns a rule matching a subdomain of a blocked TLD' do
 | 
			
		||||
      block = Fabricate(:domain_block, domain: 'google')
 | 
			
		||||
      expect(DomainBlock.rule_for('maps.google')).to eq block
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#stricter_than?' do
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue