logo

mastofe

My custom branche(s) on git.pleroma.social/pleroma/mastofe
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:

Mapp/services/fetch_remote_resource_service.rb28++++++++++++++++++++++++++++
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