FIX: Support multiple embeddable host records with the same host

This commit is contained in:
Robin Ward 2017-02-17 12:39:33 -05:00
parent 1935f624b8
commit e62c0a42fa
2 changed files with 16 additions and 10 deletions

View File

@ -17,20 +17,19 @@ class EmbeddableHost < ActiveRecord::Base
host = uri.host host = uri.host
return false unless host.present? return false unless host.present?
where("lower(host) = ?", host).first path = uri.path
path << "?" << uri.query if uri.query.present?
where("lower(host) = ?", host).each do |eh|
return eh if eh.path_whitelist.blank? || !Regexp.new(eh.path_whitelist).match(path).nil?
end
nil
end end
def self.url_allowed?(url) def self.url_allowed?(url)
uri = URI(url) rescue nil uri = URI(url) rescue nil
return false unless uri.present? uri.present? && record_for_url(uri).present?
path = uri.path
path << "?" << uri.query if uri.query.present?
host = record_for_url(uri)
return host.present? &&
(host.path_whitelist.blank? || !Regexp.new(host.path_whitelist).match(path).nil?)
end end
private private

View File

@ -77,6 +77,13 @@ describe EmbeddableHost do
expect(EmbeddableHost.url_allowed?('http://eviltrout.com/fp?test=1')).to eq(false) expect(EmbeddableHost.url_allowed?('http://eviltrout.com/fp?test=1')).to eq(false)
expect(EmbeddableHost.url_allowed?('http://eviltrout.com/fp')).to eq(true) expect(EmbeddableHost.url_allowed?('http://eviltrout.com/fp')).to eq(true)
end end
it "allows multiple records with different paths" do
Fabricate(:embeddable_host, path_whitelist: '/rick/.*')
Fabricate(:embeddable_host, path_whitelist: '/morty/.*')
expect(EmbeddableHost.url_allowed?('http://eviltrout.com/rick/smith')).to eq(true)
expect(EmbeddableHost.url_allowed?('http://eviltrout.com/morty/sanchez')).to eq(true)
end
end end
end end