From b26549b5fab16b55badd10b09d0c2649b833cddb Mon Sep 17 00:00:00 2001 From: Gareth Evans Date: Mon, 24 Jun 2013 08:21:42 -0700 Subject: [PATCH] Implement PhutilRequest parser #2 Summary: D6278 kind of got closed and commited, this is the actual direction. Ref T3432 Depends on D6277 Test Plan: Keep using the site Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin, mbishopim3 Maniphest Tasks: T3432 Differential Revision: https://secure.phabricator.com/D6283 --- ...AphrontDefaultApplicationConfiguration.php | 19 ++++++++++++++++++- .../PhabricatorFileDropUploadController.php | 5 ++++- support/PhabricatorStartup.php | 10 ++++++++++ webroot/index.php | 7 ------- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php b/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php index 0fc133d8b6..c64d92ba6a 100644 --- a/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php +++ b/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php @@ -81,10 +81,27 @@ class AphrontDefaultApplicationConfiguration ); } + /** + * @phutil-external-symbol class PhabricatorStartup + */ public function buildRequest() { + $parser = new PhutilQueryStringParser(); + $data = array(); + + $raw_input = PhabricatorStartup::getRawInput(); + if (strlen($raw_input)) { + $data += $parser->parseQueryString($raw_input); + } else if ($_POST) { + $data += $_POST; + } + + $data += $parser->parseQueryString( + isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : ""); + $request = new AphrontRequest($this->getHost(), $this->getPath()); - $request->setRequestData($_POST + $_GET); + $request->setRequestData($data); $request->setApplicationConfiguration($this); + return $request; } diff --git a/src/applications/files/controller/PhabricatorFileDropUploadController.php b/src/applications/files/controller/PhabricatorFileDropUploadController.php index d628e8ab8f..97e948936a 100644 --- a/src/applications/files/controller/PhabricatorFileDropUploadController.php +++ b/src/applications/files/controller/PhabricatorFileDropUploadController.php @@ -3,6 +3,9 @@ final class PhabricatorFileDropUploadController extends PhabricatorFileController { + /** + * @phutil-external-symbol class PhabricatorStartup + */ public function processRequest() { $request = $this->getRequest(); $user = $request->getUser(); @@ -10,7 +13,7 @@ final class PhabricatorFileDropUploadController // NOTE: Throws if valid CSRF token is not present in the request. $request->validateCSRF(); - $data = file_get_contents('php://input'); + $data = PhabricatorStartup::getRawInput(); $name = $request->getStr('name'); $file = PhabricatorFile::newFromXHRUpload( diff --git a/support/PhabricatorStartup.php b/support/PhabricatorStartup.php index 374228570e..a4d241198d 100644 --- a/support/PhabricatorStartup.php +++ b/support/PhabricatorStartup.php @@ -18,6 +18,7 @@ final class PhabricatorStartup { private static $startTime; private static $globals = array(); private static $capturingOutput; + private static $rawInput; /* -( Accessing Request Information )-------------------------------------- */ @@ -61,6 +62,13 @@ final class PhabricatorStartup { return self::$globals[$key]; } + /** + * @task info + */ + public static function getRawInput() { + return self::$rawInput; + } + /* -( Startup Hooks )------------------------------------------------------ */ @@ -89,6 +97,8 @@ final class PhabricatorStartup { self::detectPostMaxSizeTriggered(); self::beginOutputCapture(); + + self::$rawInput = (string)file_get_contents('php://input'); } diff --git a/webroot/index.php b/webroot/index.php index 5db2067175..7ee22338cc 100644 --- a/webroot/index.php +++ b/webroot/index.php @@ -34,13 +34,6 @@ try { $host = AphrontRequest::getHTTPHeader('Host'); $path = $_REQUEST['__path__']; - $parser = new PhutilQueryStringParser(); - $_GET = $parser->parseQueryString( - isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : ""); - $_POST = $parser->parseQueryString( - (string)file_get_contents('php://input')); - $_REQUEST = $_POST + $_GET; - switch ($host) { default: $config_key = 'aphront.default-application-configuration-class';