FIX: always store topic links using the upload url

This commit is contained in:
Régis Hanol 2018-08-04 01:29:32 +02:00
parent 47bed23a5f
commit bf4d98e89d
3 changed files with 10 additions and 20 deletions

View File

@ -136,7 +136,8 @@ SQL
topic_id = nil
post_number = nil
if Discourse.store.has_been_uploaded?(url)
if upload = Upload.get_from_url(url)
url = upload.url
internal = Discourse.store.internal?
elsif route = Discourse.route_for(parsed)
internal = true

View File

@ -77,28 +77,17 @@ class Upload < ActiveRecord::Base
def self.get_from_url(url)
return if url.blank?
# we store relative urls, so we need to remove any host/cdn
url = url.sub(Discourse.asset_host, "") if Discourse.asset_host.present? && Discourse.asset_host != SiteSetting.Upload.s3_cdn_url
# when using s3 without CDN
url = url.sub(/^https?\:/, "") if url.include?(Discourse.store.absolute_base_url) && Discourse.store.external?
# when using s3, we need to replace with the absolute base url
if SiteSetting.Upload.s3_cdn_url.present?
url = url.sub(
SiteSetting.Upload.s3_cdn_url,
SiteSetting.Upload.s3_base_url
)
end
# always try to get the path
uri = begin
URI(URI.unescape(url))
rescue URI::InvalidURIError, URI::InvalidComponentError
end
url = uri.path if uri.try(:scheme)
return if uri&.path.blank?
Upload.find_by(url: url)
path = uri.path[/(\/original\/\dX\/[\/\.\w]+)/, 1]
Upload.find_by("url LIKE ?", "%#{path}")
end
def self.migrate_to_new_scheme(limit = nil)

View File

@ -41,10 +41,10 @@ describe CookedPostProcessor do
end
context ".keep_reverse_index_up_to_date" do
let(:video_upload) { Fabricate(:upload, url: '/uploads/default/1/1234567890123456.mp4') }
let(:image_upload) { Fabricate(:upload, url: '/uploads/default/1/1234567890123456.jpg') }
let(:audio_upload) { Fabricate(:upload, url: '/uploads/default/1/1234567890123456.ogg') }
let(:attachment_upload) { Fabricate(:upload, url: '/uploads/default/1/1234567890123456.csv') }
let(:video_upload) { Fabricate(:upload, url: '/uploads/default/original/1X/1/1234567890123456.mp4') }
let(:image_upload) { Fabricate(:upload, url: '/uploads/default/original/1X/1/1234567890123456.jpg') }
let(:audio_upload) { Fabricate(:upload, url: '/uploads/default/original/1X/1/1234567890123456.ogg') }
let(:attachment_upload) { Fabricate(:upload, url: '/uploads/default/original/1X/1/1234567890123456.csv') }
let(:raw) do
<<~RAW