FIX: Don’t raise an error on permalinks with external URL

Currently redirecting to an external URL through a permalink doesn’t
work because Rails raises a
`ActionController::Redirecting::UnsafeRedirectError` error.

This wasn’t the case before we upgraded to Rails 7.0.

This patch fixes the issue by using `allow_other_host: true` on the
redirect.
This commit is contained in:
Loïc Guitaut 2024-06-27 15:09:16 +02:00 committed by Loïc Guitaut
parent b9ade92856
commit a442eeb0f4
2 changed files with 10 additions and 1 deletions

View File

@ -11,7 +11,7 @@ class PermalinksController < ApplicationController
raise Discourse::NotFound unless permalink
if permalink.target_url
redirect_to permalink.target_url, status: :moved_permanently
redirect_to permalink.target_url, status: :moved_permanently, allow_other_host: true
else
raise Discourse::NotFound
end

View File

@ -44,5 +44,14 @@ RSpec.describe PermalinksController do
get "/not/a/valid/url"
expect(response.status).to eq(404)
end
context "when permalink's target_url is an external URL" do
before { permalink.update!(external_url: "https://github.com/discourse/discourse") }
it "redirects to it properly" do
get "/#{permalink.url}"
expect(response).to redirect_to(permalink.external_url)
end
end
end
end