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
345dd93310
commit
51eb111503
|
@ -54,7 +54,7 @@ class DomainBlock < ApplicationRecord
|
||||||
segments = uri.normalized_host.split('.')
|
segments = uri.normalized_host.split('.')
|
||||||
variants = segments.map.with_index { |_, i| segments[i..-1].join('.') }
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,16 @@ RSpec.describe DomainBlock, type: :model do
|
||||||
block = Fabricate(:domain_block, domain: 'sub.example.com')
|
block = Fabricate(:domain_block, domain: 'sub.example.com')
|
||||||
expect(DomainBlock.rule_for('sub.example.com')).to eq block
|
expect(DomainBlock.rule_for('sub.example.com')).to eq block
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
describe '#stricter_than?' do
|
describe '#stricter_than?' do
|
||||||
|
|
Loading…
Reference in New Issue