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:
ThibG 2020-01-08 22:42:05 +01:00 committed by Eugen Rochko
parent 345dd93310
commit 51eb111503
2 changed files with 11 additions and 1 deletions

View file

@ -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

View file

@ -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