commit: 1764c32b9e295157b1900b9c66d3cdd76e2d3e0d
parent: b21ab498f84b75288f20a7eb2c6e0ee223481674
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Wed, 12 Jul 2017 00:39:15 +0200
Fix #4067 - Do not make HTTP round-trip when resolving local URL (#4160)
Diffstat:
1 file changed, 28 insertions(+), 0 deletions(-)
diff --git a/app/services/fetch_remote_resource_service.rb b/app/services/fetch_remote_resource_service.rb
@@ -5,6 +5,9 @@ class FetchRemoteResourceService < BaseService
def call(url)
@url = url
+
+ return process_local_url if local_url?
+
process_url unless fetched_atom_feed.nil?
end
@@ -38,4 +41,29 @@ class FetchRemoteResourceService < BaseService
def xml_data
@_xml_data ||= Nokogiri::XML(body, nil, 'utf-8')
end
+
+ def local_url?
+ TagManager.instance.local_url?(@url)
+ end
+
+ def process_local_url
+ recognized_params = Rails.application.routes.recognize_path(@url)
+
+ return unless recognized_params[:action] == 'show'
+
+ if recognized_params[:controller] == 'stream_entries'
+ status = StreamEntry.find_by(id: recognized_params[:id])&.status
+ check_local_status(status)
+ elsif recognized_params[:controller] == 'statuses'
+ status = Status.find_by(id: recognized_params[:id])
+ check_local_status(status)
+ elsif recognized_params[:controller] == 'accounts'
+ Account.find_local(recognized_params[:username])
+ end
+ end
+
+ def check_local_status(status)
+ return if status.nil?
+ status if status.public_visibility? || status.unlisted_visibility?
+ end
end