@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator

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

+9
+9
src/applications/diffusion/controller/DiffusionRepositoryDefaultController.php
··· 2 2 3 3 final class DiffusionRepositoryDefaultController extends DiffusionController { 4 4 5 + public function shouldAllowPublic() { 6 + // NOTE: We allow public access to this controller because it handles 7 + // redirecting paths that are missing a trailing "/". We need to manually 8 + // redirect these instead of relying on the automatic redirect because 9 + // some VCS requests may omit the slashes. See T12035, and below, for some 10 + // discussion. 11 + return true; 12 + } 13 + 5 14 public function handleRequest(AphrontRequest $request) { 6 15 $response = $this->loadDiffusionContext(); 7 16 if ($response) {