From 814fa135b03606f44f8bc9036f5eaae1b355d083 Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 7 Jun 2016 06:52:56 -0700 Subject: [PATCH] Centralize "this is the current user for the request" code Summary: Ref T11098. This primarily fixes Conduit calls to `*.edit` methods failing when trying to access user preferences. (The actual access is a little weird, since it seems like we're building some UI stuff inside a policy query, but that's an issue for another time.) To fix this, consolidate the "we're about to run some kind of request with this user" code and run it consistently for web, conduit, and SSH sessions. Additionally, make sure we swap things to the user's translation. Test Plan: - Ran `maniphest.edit` via `arc call-conduit`, no more settings exception. - Set translation to ALL CAPS, got all caps output from `ssh` and Conduit. Reviewers: avivey, chad Reviewed By: chad Maniphest Tasks: T11098 Differential Revision: https://secure.phabricator.com/D16066 --- scripts/ssh/ssh-exec.php | 3 +++ .../auth/engine/PhabricatorAuthSessionEngine.php | 9 ++++++++- .../base/controller/PhabricatorController.php | 3 ++- .../controller/PhabricatorConduitAPIController.php | 4 ++++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/scripts/ssh/ssh-exec.php b/scripts/ssh/ssh-exec.php index 5d8ede2913..56b13ff142 100755 --- a/scripts/ssh/ssh-exec.php +++ b/scripts/ssh/ssh-exec.php @@ -103,6 +103,9 @@ try { 'Invalid username ("%s"). There is no user with this username.', $user_name)); } + + id(new PhabricatorAuthSessionEngine()) + ->willServeRequestForUser($user); } else if (strlen($device_name)) { if (!$remote_address) { throw new Exception( diff --git a/src/applications/auth/engine/PhabricatorAuthSessionEngine.php b/src/applications/auth/engine/PhabricatorAuthSessionEngine.php index a7f5513056..e7d5c94146 100644 --- a/src/applications/auth/engine/PhabricatorAuthSessionEngine.php +++ b/src/applications/auth/engine/PhabricatorAuthSessionEngine.php @@ -164,7 +164,6 @@ final class PhabricatorAuthSessionEngine extends Phobject { $cache_raw = $this->filterRawCacheData($user, $types_map, $cache_raw); $user->attachRawCacheData($cache_raw); - $user->setAllowInlineCacheGeneration(true); switch ($session_type) { case PhabricatorAuthSession::TYPE_WEB: @@ -832,4 +831,12 @@ final class PhabricatorAuthSessionEngine extends Phobject { return $cache_raw; } + public function willServeRequestForUser(PhabricatorUser $user) { + // We allow the login user to generate any missing cache data inline. + $user->setAllowInlineCacheGeneration(true); + + // Switch to the user's translation. + PhabricatorEnv::setLocaleCode($user->getTranslation()); + } + } diff --git a/src/applications/base/controller/PhabricatorController.php b/src/applications/base/controller/PhabricatorController.php index 83e223d195..08966f29a5 100644 --- a/src/applications/base/controller/PhabricatorController.php +++ b/src/applications/base/controller/PhabricatorController.php @@ -104,7 +104,8 @@ abstract class PhabricatorController extends AphrontController { $request->setUser($user); } - PhabricatorEnv::setLocaleCode($user->getTranslation()); + id(new PhabricatorAuthSessionEngine()) + ->willServeRequestForUser($user); if (PhabricatorEnv::getEnvConfig('darkconsole.enabled')) { $dark_console = PhabricatorDarkConsoleSetting::SETTINGKEY; diff --git a/src/applications/conduit/controller/PhabricatorConduitAPIController.php b/src/applications/conduit/controller/PhabricatorConduitAPIController.php index 690f6cc1da..b9e8b1b15e 100644 --- a/src/applications/conduit/controller/PhabricatorConduitAPIController.php +++ b/src/applications/conduit/controller/PhabricatorConduitAPIController.php @@ -487,6 +487,10 @@ final class PhabricatorConduitAPIController } $request->setUser($user); + + id(new PhabricatorAuthSessionEngine()) + ->willServeRequestForUser($user); + return null; }