From 8640ab5fc3e450efdbca4adb3601c7e60f048e36 Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 20 Dec 2016 05:39:09 -0800 Subject: [PATCH] Redirect `/source/x` (no slash) to `/source/x/` (canonical) when viewer is logged out and "x" is public Summary: Fixes T12035. Normally, the "abc" -> "abc/" redirect is handled automatically when "abc" hits a 404. However, in this case, "source/x" does not 404. We route this to a valid controller because some VCS requests omit the slashes, then manually perform the redirect if we aren't serving a VCS request. Allow this controller to serve public resources so we can serve the redirect to logged-out users instead of prompting them to login so they can be redirected. Test Plan: Visited `/source/x` as a logged-out user, where `x` is a public repository. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12035 Differential Revision: https://secure.phabricator.com/D17097 --- .../controller/DiffusionRepositoryDefaultController.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/applications/diffusion/controller/DiffusionRepositoryDefaultController.php b/src/applications/diffusion/controller/DiffusionRepositoryDefaultController.php index efebd12c6f..a83829ccc4 100644 --- a/src/applications/diffusion/controller/DiffusionRepositoryDefaultController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryDefaultController.php @@ -2,6 +2,15 @@ final class DiffusionRepositoryDefaultController extends DiffusionController { + public function shouldAllowPublic() { + // NOTE: We allow public access to this controller because it handles + // redirecting paths that are missing a trailing "/". We need to manually + // redirect these instead of relying on the automatic redirect because + // some VCS requests may omit the slashes. See T12035, and below, for some + // discussion. + return true; + } + public function handleRequest(AphrontRequest $request) { $response = $this->loadDiffusionContext(); if ($response) {