Goldfinger aborts if webfinger response mime type is an unexpected value it can't parse

This commit is contained in:
Eugen Rochko 2016-03-07 12:23:48 +01:00
parent b2b1b5c252
commit f0a7a9baf3
4 changed files with 11 additions and 9 deletions

View File

@ -1,7 +1,7 @@
PATH PATH
remote: . remote: .
specs: specs:
goldfinger (1.0.0) goldfinger (1.0.2)
addressable (~> 2.4) addressable (~> 2.4)
http (~> 1.0) http (~> 1.0)
nokogiri (~> 1.6) nokogiri (~> 1.6)

View File

@ -1,6 +1,6 @@
Gem::Specification.new do |s| Gem::Specification.new do |s|
s.name = 'goldfinger' s.name = 'goldfinger'
s.version = '1.0.1' s.version = '1.0.2'
s.platform = Gem::Platform::RUBY s.platform = Gem::Platform::RUBY
s.required_ruby_version = '>= 2.0.0' s.required_ruby_version = '>= 2.0.0'
s.date = '2016-02-17' s.date = '2016-02-17'

View File

@ -13,7 +13,7 @@ module Goldfinger
ssl = true ssl = true
begin begin
_, template = perform_get(url(ssl)) _, template = perform_get(url(ssl))
rescue HTTP::Error rescue HTTP::Error
if ssl if ssl
ssl = false ssl = false
@ -24,6 +24,9 @@ module Goldfinger
end end
headers, body = perform_get(url_from_template(template)) headers, body = perform_get(url_from_template(template))
raise Goldfinger::Error, "Invalid response mime type: #{headers.get(HTTP::Headers::CONTENT_TYPE).first}" unless ['application/jrd+json', 'application/xrd+xml'].include?(headers.get(HTTP::Headers::CONTENT_TYPE).first)
Goldfinger::Result.new(headers, body) Goldfinger::Result.new(headers, body)
rescue HTTP::Error rescue HTTP::Error
raise Goldfinger::NotFoundError raise Goldfinger::NotFoundError
@ -43,8 +46,7 @@ module Goldfinger
raise Goldfinger::NotFoundError if links.empty? raise Goldfinger::NotFoundError if links.empty?
url = Addressable::Template.new(links.first.attribute('template').value) links.first.attribute('template').value.gsub('{uri}', @uri)
url.expand({ uri: @uri }).to_s
end end
def domain def domain

View File

@ -2,8 +2,8 @@ describe Goldfinger::Client do
context 'with HTTPS available' do context 'with HTTPS available' do
describe '#finger' do describe '#finger' do
before do before do
stub_request(:get, 'https://quitter.no/.well-known/host-meta').to_return(body: fixture('quitter.no_.well-known_host-meta')) stub_request(:get, 'https://quitter.no/.well-known/host-meta').to_return(body: fixture('quitter.no_.well-known_host-meta'), headers: { content_type: 'application/xrd+xml' })
stub_request(:get, 'https://quitter.no/.well-known/webfinger?resource=acct:gargron@quitter.no').to_return(body: fixture('quitter.no_.well-known_webfinger.json')) stub_request(:get, 'https://quitter.no/.well-known/webfinger?resource=acct:gargron@quitter.no').to_return(body: fixture('quitter.no_.well-known_webfinger.json'), headers: { content_type: 'application/jrd+json' })
end end
subject { Goldfinger::Client.new('acct:gargron@quitter.no') } subject { Goldfinger::Client.new('acct:gargron@quitter.no') }
@ -18,8 +18,8 @@ describe Goldfinger::Client do
describe '#finger' do describe '#finger' do
before do before do
stub_request(:get, 'https://quitter.no/.well-known/host-meta').to_raise(HTTP::Error) stub_request(:get, 'https://quitter.no/.well-known/host-meta').to_raise(HTTP::Error)
stub_request(:get, 'http://quitter.no/.well-known/host-meta').to_return(body: fixture('quitter.no_.well-known_host-meta')) stub_request(:get, 'http://quitter.no/.well-known/host-meta').to_return(body: fixture('quitter.no_.well-known_host-meta'), headers: { content_type: 'application/xrd+xml' })
stub_request(:get, 'https://quitter.no/.well-known/webfinger?resource=acct:gargron@quitter.no').to_return(body: fixture('quitter.no_.well-known_webfinger.json')) stub_request(:get, 'https://quitter.no/.well-known/webfinger?resource=acct:gargron@quitter.no').to_return(body: fixture('quitter.no_.well-known_webfinger.json'), headers: { content_type: 'application/jrd+json' })
end end
subject { Goldfinger::Client.new('acct:gargron@quitter.no') } subject { Goldfinger::Client.new('acct:gargron@quitter.no') }