improve webfinger failure handling
* do not raise if profile xrd isn't found * error out on a ssl error rather than on the unexpected nil value later * be more verbose about failed xrd fetches
This commit is contained in:
parent
0f15c3e0b0
commit
9cb803831f
3 changed files with 29 additions and 6 deletions
|
|
@ -29,7 +29,12 @@ class Webfinger
|
||||||
def get(url)
|
def get(url)
|
||||||
Rails.logger.info("Getting: #{url} for #{account}")
|
Rails.logger.info("Getting: #{url} for #{account}")
|
||||||
begin
|
begin
|
||||||
Faraday.get(url).body
|
res = Faraday.get(url)
|
||||||
|
return false if res.status == 404
|
||||||
|
res.body
|
||||||
|
rescue OpenSSL::SSL::SSLError => e
|
||||||
|
Rails.logger.info "Failed to fetch #{url}: SSL setup invalid"
|
||||||
|
raise e
|
||||||
rescue => e
|
rescue => e
|
||||||
Rails.logger.info("Failed to fetch: #{url} for #{account}; #{e.message}")
|
Rails.logger.info("Failed to fetch: #{url} for #{account}; #{e.message}")
|
||||||
raise e
|
raise e
|
||||||
|
|
@ -51,7 +56,7 @@ class Webfinger
|
||||||
else
|
else
|
||||||
person = make_person_from_webfinger
|
person = make_person_from_webfinger
|
||||||
end
|
end
|
||||||
FEDERATION_LOGGER.info("successfully webfingered#{@account}")
|
FEDERATION_LOGGER.info("successfully webfingered#{@account}") if person
|
||||||
person
|
person
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -64,7 +69,7 @@ class Webfinger
|
||||||
self.ssl = false
|
self.ssl = false
|
||||||
retry
|
retry
|
||||||
else
|
else
|
||||||
raise I18n.t('webfinger.xrd_fetch_failed', :account => account)
|
raise "there was an error getting the xrd from account #{@account}: #{e.message}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -90,6 +95,8 @@ class Webfinger
|
||||||
|
|
||||||
def webfinger_profile_xrd
|
def webfinger_profile_xrd
|
||||||
@webfinger_profile_xrd ||= get(webfinger_profile_url)
|
@webfinger_profile_xrd ||= get(webfinger_profile_url)
|
||||||
|
FEDERATION_LOGGER.info "#{@account} doesn't exists anymore" if @webfinger_profile_xrd == false
|
||||||
|
@webfinger_profile_xrd
|
||||||
end
|
end
|
||||||
|
|
||||||
def hcard_xrd
|
def hcard_xrd
|
||||||
|
|
@ -97,7 +104,7 @@ class Webfinger
|
||||||
end
|
end
|
||||||
|
|
||||||
def make_person_from_webfinger
|
def make_person_from_webfinger
|
||||||
Person.create_from_webfinger(webfinger_profile, hcard)
|
Person.create_from_webfinger(webfinger_profile, hcard) unless webfinger_profile_xrd == false
|
||||||
end
|
end
|
||||||
|
|
||||||
def host_meta_url
|
def host_meta_url
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,15 @@ describe Webfinger do
|
||||||
|
|
||||||
a_request(:get, redirect_url).should have_been_made
|
a_request(:get, redirect_url).should have_been_made
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'returns false on 404' do
|
||||||
|
url ="https://bar.com/.well-known/host-meta"
|
||||||
|
stub_request(:get, url).
|
||||||
|
to_return(:status => 404, :body => nil)
|
||||||
|
|
||||||
|
finger.get(url).should_not == nil
|
||||||
|
finger.get(url).should == false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'existing_person_with_profile?' do
|
describe 'existing_person_with_profile?' do
|
||||||
|
|
@ -176,10 +185,17 @@ describe Webfinger do
|
||||||
describe '#make_person_from_webfinger' do
|
describe '#make_person_from_webfinger' do
|
||||||
it 'with an hcard and a webfinger_profile, it calls Person.create_from_webfinger' do
|
it 'with an hcard and a webfinger_profile, it calls Person.create_from_webfinger' do
|
||||||
finger.stub(:hcard).and_return("hcard")
|
finger.stub(:hcard).and_return("hcard")
|
||||||
|
finger.stub(:webfinger_profile_xrd).and_return("webfinger_profile_xrd")
|
||||||
finger.stub(:webfinger_profile).and_return("webfinger_profile")
|
finger.stub(:webfinger_profile).and_return("webfinger_profile")
|
||||||
Person.should_receive(:create_from_webfinger).with("webfinger_profile", "hcard")
|
Person.should_receive(:create_from_webfinger).with("webfinger_profile", "hcard")
|
||||||
finger.make_person_from_webfinger
|
finger.make_person_from_webfinger
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'with an false xrd it does not call Person.create_from_webfinger' do
|
||||||
|
finger.stub(:webfinger_profile_xrd).and_return(false)
|
||||||
|
Person.should_not_receive(:create_from_webfinger)
|
||||||
|
finger.make_person_from_webfinger
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue