From ed49b41e915db91f3ed8cc0f34f545e68c3b7cba Mon Sep 17 00:00:00 2001 From: epriestley Date: Sun, 1 Mar 2015 12:12:45 -0800 Subject: [PATCH] When redirecting to acquire file access tokens, retain 'download' parameter Summary: Fixes T7398. Previously, we would redirect to get a token and then redirect back to make use of it, but lose "download" in the process, and thus not get the correct "Content-Disposition" header. Test Plan: Clicked "Download" on a lightboxed file. Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Maniphest Tasks: T7398 Differential Revision: https://secure.phabricator.com/D11915 --- .../PhabricatorFileDataController.php | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/applications/files/controller/PhabricatorFileDataController.php b/src/applications/files/controller/PhabricatorFileDataController.php index 8f9647e6fe..9049a45c4c 100644 --- a/src/applications/files/controller/PhabricatorFileDataController.php +++ b/src/applications/files/controller/PhabricatorFileDataController.php @@ -73,9 +73,13 @@ final class PhabricatorFileDataController extends PhabricatorFileController { // if the user can see the file, generate a token; // redirect to the alt domain with the token; + $token_uri = $file->getCDNURIWithToken(); + $token_uri = new PhutilURI($token_uri); + $token_uri = $this->addURIParameters($token_uri); + return id(new AphrontRedirectResponse()) ->setIsExternal(true) - ->setURI($file->getCDNURIWithToken()); + ->setURI($token_uri); } else { // We are using the alternate domain @@ -93,7 +97,7 @@ final class PhabricatorFileDataController extends PhabricatorFileController { $acquire_token_uri = id(new PhutilURI($file->getViewURI())) ->setDomain($main_domain); - + $acquire_token_uri = $this->addURIParameters($acquire_token_uri); if ($this->token) { // validate the token, if it is valid, continue @@ -186,4 +190,19 @@ final class PhabricatorFileDataController extends PhabricatorFileController { return $response; } + + /** + * Add passthrough parameters to the URI so they aren't lost when we + * redirect to acquire tokens. + */ + private function addURIParameters(PhutilURI $uri) { + $request = $this->getRequest(); + + if ($request->getBool('download')) { + $uri->setQueryParam('download', 1); + } + + return $uri; + } + }