From 91aae4d755504518258c9b4c9aae8baa4eabc2dc Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 28 Apr 2019 11:33:56 +0200 Subject: [PATCH] Fix 500er when calling protocol handler with invalid URL --- app/services/diaspora_link_service.rb | 10 ++++++---- spec/services/diaspora_link_service_spec.rb | 12 ++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/services/diaspora_link_service.rb b/app/services/diaspora_link_service.rb index 1923aa01d..a8ab51420 100644 --- a/app/services/diaspora_link_service.rb +++ b/app/services/diaspora_link_service.rb @@ -10,7 +10,9 @@ class DiasporaLinkService end def find_or_fetch_entity - entity_finder.find || fetch_entity + if type && guid + entity_finder.find || fetch_entity + end end private @@ -38,8 +40,8 @@ class DiasporaLinkService def parse normalize match = DiasporaFederation::Federation::DiasporaUrlParser::DIASPORA_URL_REGEX.match(link) - @author = match[1] - @type = match[2] - @guid = match[3] + if match + @author, @type, @guid = match.captures + end end end diff --git a/spec/services/diaspora_link_service_spec.rb b/spec/services/diaspora_link_service_spec.rb index bde411a27..fd3f6e6b3 100644 --- a/spec/services/diaspora_link_service_spec.rb +++ b/spec/services/diaspora_link_service_spec.rb @@ -40,5 +40,17 @@ describe DiasporaLinkService do expect(service.find_or_fetch_entity).to be_nil end end + + context "with invalid links" do + it "returns nil when the link is invalid" do + service = described_class.new("web+diaspora://something_invalid") + expect(service.find_or_fetch_entity).to be_nil + end + + it "returns nil when the author is valid, but rest of the link is invalid" do + service = described_class.new("web+diaspora://#{alice.diaspora_handle}/foo/bar") + expect(service.find_or_fetch_entity).to be_nil + end + end end end