Backport InternalRedirect#sanitize_redirect

This commit is contained in:
James Edwards-Jones 2018-06-14 09:02:32 +10:00
parent adb069881a
commit 202bd2da16
2 changed files with 29 additions and 0 deletions

View File

@ -23,6 +23,10 @@ module InternalRedirect
nil
end
def sanitize_redirect(url_or_path)
safe_redirect_path(url_or_path) || safe_redirect_path_for_url(url_or_path)
end
def host_allowed?(uri)
uri.host == request.host &&
uri.port == request.port

View File

@ -54,6 +54,31 @@ describe InternalRedirect do
end
end
describe '#sanitize_redirect' do
let(:valid_path) { '/hello/world?hello=world' }
let(:valid_url) { "http://test.host#{valid_path}" }
it 'returns `nil` for invalid paths' do
invalid_path = '//not/valid'
expect(controller.sanitize_redirect(invalid_path)).to eq nil
end
it 'returns `nil` for invalid urls' do
input = 'http://test.host:3000/invalid'
expect(controller.sanitize_redirect(input)).to eq nil
end
it 'returns input for valid paths' do
expect(controller.sanitize_redirect(valid_path)).to eq valid_path
end
it 'returns path for valid urls' do
expect(controller.sanitize_redirect(valid_url)).to eq valid_path
end
end
describe '#host_allowed?' do
it 'allows uris with the same host and port' do
expect(controller.host_allowed?(URI('http://test.host/test'))).to be(true)