]> cat aescling's git repositories - mastodon.git/commitdiff
Fix FetchAtomService not finding alternatives if there's a Link header (#6170)
authorEugen Rochko <eugen@zeonfederated.com>
Thu, 4 Jan 2018 03:56:04 +0000 (04:56 +0100)
committerGitHub <noreply@github.com>
Thu, 4 Jan 2018 03:56:04 +0000 (04:56 +0100)
without them, such as is the case with GNU social

Fixes the ability to find GNU social accounts via URL in search and
when using remote follow function

app/services/fetch_atom_service.rb

index 1c47a22da4ab068464bf9283bb38a1b467b7c6f6..c01e8d071e95e1d1d8dd1b3ca203c05a8026cb6b 100644 (file)
@@ -50,7 +50,7 @@ class FetchAtomService < BaseService
         @unsupported_activity = true
         nil
       end
-    elsif @response['Link'] && !terminal
+    elsif @response['Link'] && !terminal && link_header.find_link(%w(rel alternate))
       process_headers
     elsif @response.mime_type == 'text/html' && !terminal
       process_html
@@ -70,8 +70,6 @@ class FetchAtomService < BaseService
   end
 
   def process_headers
-    link_header = LinkHeader.parse(@response['Link'].is_a?(Array) ? @response['Link'].first : @response['Link'])
-
     json_link = link_header.find_link(%w(rel alternate), %w(type application/activity+json)) || link_header.find_link(%w(rel alternate), ['type', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'])
     atom_link = link_header.find_link(%w(rel alternate), %w(type application/atom+xml))
 
@@ -80,4 +78,8 @@ class FetchAtomService < BaseService
 
     result
   end
+
+  def link_header
+    @link_header ||= LinkHeader.parse(@response['Link'].is_a?(Array) ? @response['Link'].first : @response['Link'])
+  end
 end