FIX: follow redirects for inline/mini onebox (#13512)

This commit is contained in:
Arpit Jalan 2021-06-24 19:53:39 +05:30 committed by GitHub
parent a2b744ae25
commit 0adeddde61
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 14 deletions

View File

@ -57,24 +57,26 @@ module RetrieveTitle
encoding = nil encoding = nil
fd.get do |_response, chunk, uri| fd.get do |_response, chunk, uri|
unless Net::HTTPRedirection === _response
if current
current << chunk
else
current = chunk
end
if current if !encoding && content_type = _response['content-type']&.strip&.downcase
current << chunk if content_type =~ /charset="?([a-z0-9_-]+)"?/
else encoding = Regexp.last_match(1)
current = chunk if !Encoding.list.map(&:name).map(&:downcase).include?(encoding)
end encoding = nil
if !encoding && content_type = _response['content-type']&.strip&.downcase end
if content_type =~ /charset="?([a-z0-9_-]+)"?/
encoding = Regexp.last_match(1)
if !Encoding.list.map(&:name).map(&:downcase).include?(encoding)
encoding = nil
end end
end end
end
max_size = max_chunk_size(uri) * 1024 max_size = max_chunk_size(uri) * 1024
title = extract_title(current, encoding) title = extract_title(current, encoding)
throw :done if title || max_size < current.length throw :done if title || max_size < current.length
end
end end
title title
end end

View File

@ -89,5 +89,16 @@ describe RetrieveTitle do
IPSocket.stubs(:getaddress).returns('100.2.3.4') IPSocket.stubs(:getaddress).returns('100.2.3.4')
expect(RetrieveTitle.crawl("https://brelksdjflaskfj.com/amazing")).to eq("japanese こんにちは website") expect(RetrieveTitle.crawl("https://brelksdjflaskfj.com/amazing")).to eq("japanese こんにちは website")
end end
it "can follow redirect" do
stub_request(:get, "http://foobar.com/amazing").
to_return(status: 301, body: "", headers: { "location" => "https://wikipedia.com/amazing" })
stub_request(:get, "https://wikipedia.com/amazing").
to_return(status: 200, body: "<html><title>very amazing</title>", headers: {})
IPSocket.stubs(:getaddress).returns('100.2.3.4')
expect(RetrieveTitle.crawl("http://foobar.com/amazing")).to eq("very amazing")
end
end end
end end