diff --git a/Gemfile.lock b/Gemfile.lock index 79bc089..67f1c9e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - goldfinger (1.0.0) + goldfinger (1.0.2) addressable (~> 2.4) http (~> 1.0) nokogiri (~> 1.6) diff --git a/goldfinger.gemspec b/goldfinger.gemspec index a18bce5..2c71062 100644 --- a/goldfinger.gemspec +++ b/goldfinger.gemspec @@ -1,6 +1,6 @@ Gem::Specification.new do |s| s.name = 'goldfinger' - s.version = '1.0.1' + s.version = '1.0.2' s.platform = Gem::Platform::RUBY s.required_ruby_version = '>= 2.0.0' s.date = '2016-02-17' diff --git a/lib/goldfinger/client.rb b/lib/goldfinger/client.rb index b434f63..7a69d96 100644 --- a/lib/goldfinger/client.rb +++ b/lib/goldfinger/client.rb @@ -13,7 +13,7 @@ module Goldfinger ssl = true begin - _, template = perform_get(url(ssl)) + _, template = perform_get(url(ssl)) rescue HTTP::Error if ssl ssl = false @@ -24,6 +24,9 @@ module Goldfinger end 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) rescue HTTP::Error raise Goldfinger::NotFoundError @@ -43,8 +46,7 @@ module Goldfinger raise Goldfinger::NotFoundError if links.empty? - url = Addressable::Template.new(links.first.attribute('template').value) - url.expand({ uri: @uri }).to_s + links.first.attribute('template').value.gsub('{uri}', @uri) end def domain diff --git a/spec/goldfinger/client_spec.rb b/spec/goldfinger/client_spec.rb index 69dd92a..375db38 100644 --- a/spec/goldfinger/client_spec.rb +++ b/spec/goldfinger/client_spec.rb @@ -2,8 +2,8 @@ describe Goldfinger::Client do context 'with HTTPS available' do describe '#finger' 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/webfinger?resource=acct:gargron@quitter.no').to_return(body: fixture('quitter.no_.well-known_webfinger.json')) + 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'), headers: { content_type: 'application/jrd+json' }) end subject { Goldfinger::Client.new('acct:gargron@quitter.no') } @@ -18,8 +18,8 @@ describe Goldfinger::Client do describe '#finger' do before do 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, 'https://quitter.no/.well-known/webfinger?resource=acct:gargron@quitter.no').to_return(body: fixture('quitter.no_.well-known_webfinger.json')) + 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'), headers: { content_type: 'application/jrd+json' }) end subject { Goldfinger::Client.new('acct:gargron@quitter.no') }