diff --git a/app/controllers/topics_controller.rb b/app/controllers/topics_controller.rb index 211e94ce8d..ddb750f912 100644 --- a/app/controllers/topics_controller.rb +++ b/app/controllers/topics_controller.rb @@ -945,6 +945,16 @@ class TopicsController < ApplicationController end def redirect_to_correct_topic(topic, post_number = nil) + begin + guardian.ensure_can_see!(topic) + rescue Discourse::InvalidAccess => ex + if !SiteSetting.detailed_404 + raise Discourse::NotFound + else + raise ex + end + end + url = topic.relative_url url << "/#{post_number}" if post_number.to_i > 0 url << ".json" if request.format.json? diff --git a/spec/requests/topics_controller_spec.rb b/spec/requests/topics_controller_spec.rb index 9649f57f5b..c542f23810 100644 --- a/spec/requests/topics_controller_spec.rb +++ b/spec/requests/topics_controller_spec.rb @@ -1,3 +1,4 @@ +# coding: utf-8 # frozen_string_literal: true require 'rails_helper' @@ -1452,6 +1453,12 @@ RSpec.describe TopicsController do expect(response.status).to eq(value) end end + + expected_slug_response = expected[:secure_topic] == 200 ? 301 : expected[:secure_topic] + it "will return a #{expected_slug_response} when requesting a secure topic by slug" do + get "/t/#{secure_topic.slug}" + expect(response.status).to eq(expected_slug_response) + end end context 'without detailed error pages' do