FIX: if we have not target available do not redirect

This commit is contained in:
Sam 2018-08-20 13:10:49 +10:00
parent 6d588e43cc
commit ce4b12ae59
3 changed files with 12 additions and 4 deletions

View File

@ -222,7 +222,9 @@ class ApplicationController < ActionController::Base
url = opts[:original_path] || request.fullpath
permalink = Permalink.find_by_url(url)
if permalink.present?
# there are some cases where we have a permalink but no url
# cause category / topic was deleted
if permalink.present? && permalink.target_url
# permalink present, redirect to that URL
redirect_with_client_support permalink.target_url, status: :moved_permanently
return

View File

@ -8,9 +8,7 @@ class PermalinksController < ApplicationController
raise Discourse::NotFound unless permalink
if permalink.external_url
redirect_to permalink.external_url, status: :moved_permanently
elsif permalink.target_url
if permalink.target_url
redirect_to permalink.target_url, status: :moved_permanently
else
raise Discourse::NotFound

View File

@ -18,6 +18,14 @@ RSpec.describe ApplicationController do
describe 'build_not_found_page' do
describe 'topic not found' do
it 'should not redirect to permalink if topic/category does not exist' do
topic = create_post.topic
Permalink.create!(url: topic.relative_url, topic_id: topic.id + 1)
topic.trash!
get topic.relative_url
expect(response.status).to eq(410)
end
it 'should return permalink for deleted topics' do
topic = create_post.topic
external_url = 'https://somewhere.over.rainbow'