2011-01-16 22:51:39 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Copyright 2011 Facebook, Inc.
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
|
|
|
|
2011-02-03 07:38:42 +01:00
|
|
|
error_reporting(E_ALL | E_STRICT);
|
|
|
|
|
2011-01-31 20:55:26 +01:00
|
|
|
$env = getenv('PHABRICATOR_ENV');
|
|
|
|
if (!$env) {
|
|
|
|
header('Content-Type: text/plain');
|
|
|
|
die(
|
|
|
|
"CONFIG ERROR: ".
|
|
|
|
"The 'PHABRICATOR_ENV' environmental variable is not defined. Modify ".
|
|
|
|
"your httpd.conf to include 'SetEnv PHABRICATOR_ENV <env>', where '<env>' ".
|
|
|
|
"is one of 'development', 'production', or a custom environment.");
|
|
|
|
}
|
|
|
|
|
|
|
|
$conf = phabricator_read_config_file($env);
|
|
|
|
$conf['phabricator.env'] = $env;
|
|
|
|
|
2011-01-16 22:51:39 +01:00
|
|
|
setup_aphront_basics();
|
|
|
|
|
2011-01-31 20:55:26 +01:00
|
|
|
phutil_require_module('phabricator', 'infrastructure/env');
|
|
|
|
PhabricatorEnv::setEnvConfig($conf);
|
|
|
|
|
2011-02-02 22:48:52 +01:00
|
|
|
phutil_require_module('phabricator', 'aphront/console/plugin/xhprof/api');
|
2011-02-03 01:14:23 +01:00
|
|
|
DarkConsoleXHProfPluginAPI::hookProfiler();
|
2011-02-02 22:48:52 +01:00
|
|
|
|
2011-02-03 07:38:42 +01:00
|
|
|
phutil_require_module('phabricator', 'aphront/console/plugin/errorlog/api');
|
|
|
|
set_error_handler(array('DarkConsoleErrorLogPluginAPI', 'handleError'));
|
|
|
|
set_exception_handler(array('DarkConsoleErrorLogPluginAPI', 'handleException'));
|
|
|
|
|
2011-01-16 22:51:39 +01:00
|
|
|
$host = $_SERVER['HTTP_HOST'];
|
|
|
|
$path = $_REQUEST['__path__'];
|
|
|
|
|
|
|
|
// Based on the host and path, choose which application should serve the
|
|
|
|
// request. The default is the Aphront demo, but you'll want to replace this
|
|
|
|
// with whichever other applications you're running.
|
|
|
|
|
|
|
|
switch ($host) {
|
|
|
|
default:
|
|
|
|
phutil_require_module('phutil', 'autoload');
|
|
|
|
phutil_autoload_class('AphrontDefaultApplicationConfiguration');
|
|
|
|
$application = new AphrontDefaultApplicationConfiguration();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
$application->setHost($host);
|
|
|
|
$application->setPath($path);
|
2011-02-02 22:48:52 +01:00
|
|
|
$application->willBuildRequest();
|
2011-01-16 22:51:39 +01:00
|
|
|
$request = $application->buildRequest();
|
|
|
|
$application->setRequest($request);
|
|
|
|
list($controller, $uri_data) = $application->buildController();
|
|
|
|
try {
|
2011-01-26 22:21:12 +01:00
|
|
|
$controller->willBeginExecution();
|
|
|
|
|
|
|
|
$controller->willProcessRequest($uri_data);
|
2011-01-16 22:51:39 +01:00
|
|
|
$response = $controller->processRequest();
|
2011-01-26 22:21:12 +01:00
|
|
|
} catch (AphrontRedirectException $ex) {
|
|
|
|
$response = id(new AphrontRedirectResponse())
|
|
|
|
->setURI($ex->getURI());
|
2011-01-16 22:51:39 +01:00
|
|
|
} catch (Exception $ex) {
|
|
|
|
$response = $application->handleException($ex);
|
|
|
|
}
|
|
|
|
|
|
|
|
$response = $application->willSendResponse($response);
|
|
|
|
|
|
|
|
$response->setRequest($request);
|
|
|
|
|
|
|
|
$response_string = $response->buildResponseString();
|
2011-01-30 17:44:28 +01:00
|
|
|
|
|
|
|
$code = $response->getHTTPResponseCode();
|
|
|
|
if ($code != 200) {
|
|
|
|
header("HTTP/1.0 {$code}");
|
|
|
|
}
|
|
|
|
|
2011-01-16 22:51:39 +01:00
|
|
|
$headers = $response->getCacheHeaders();
|
|
|
|
$headers = array_merge($headers, $response->getHeaders());
|
|
|
|
foreach ($headers as $header) {
|
|
|
|
list($header, $value) = $header;
|
|
|
|
header("{$header}: {$value}");
|
|
|
|
}
|
2011-02-02 22:48:52 +01:00
|
|
|
|
|
|
|
if (isset($_REQUEST['__profile__']) &&
|
|
|
|
($_REQUEST['__profile__'] == 'all')) {
|
|
|
|
$profile = DarkConsoleXHProfPluginAPI::stopProfiler();
|
2011-02-03 07:38:42 +01:00
|
|
|
$profile =
|
2011-02-03 01:14:23 +01:00
|
|
|
'<div style="text-align: center; background: #ff00ff; padding: 1em;
|
|
|
|
font-size: 24px; font-weight: bold;">'.
|
|
|
|
'<a href="/xhprof/profile/'.$profile.'/">'.
|
|
|
|
'>>> View Profile <<<'.
|
|
|
|
'</a>'.
|
|
|
|
'</div>';
|
2011-02-02 22:48:52 +01:00
|
|
|
if (strpos($response_string, '<body>') !== false) {
|
|
|
|
$response_string = str_replace(
|
|
|
|
'<body>',
|
|
|
|
'<body>'.$profile,
|
|
|
|
$response_string);
|
2011-02-03 01:14:23 +01:00
|
|
|
} else {
|
|
|
|
echo $profile;
|
2011-02-02 22:48:52 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-01-16 22:51:39 +01:00
|
|
|
echo $response_string;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @group aphront
|
|
|
|
*/
|
|
|
|
function setup_aphront_basics() {
|
|
|
|
$aphront_root = dirname(dirname(__FILE__));
|
|
|
|
$libraries_root = dirname($aphront_root);
|
|
|
|
|
|
|
|
ini_set('include_path', ini_get('include_path').':'.$libraries_root.'/');
|
|
|
|
@include_once 'libphutil/src/__phutil_library_init__.php';
|
|
|
|
if (!@constant('__LIBPHUTIL__')) {
|
|
|
|
echo "ERROR: Unable to load libphutil. Update your PHP 'include_path' to ".
|
|
|
|
"include the parent directory of libphutil/.\n";
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!ini_get('date.timezone')) {
|
|
|
|
date_default_timezone_set('America/Los_Angeles');
|
|
|
|
}
|
|
|
|
|
2011-01-24 20:01:53 +01:00
|
|
|
phutil_load_library($libraries_root.'/arcanist/src');
|
2011-01-16 22:51:39 +01:00
|
|
|
phutil_load_library($aphront_root.'/src');
|
|
|
|
}
|
|
|
|
|
|
|
|
function __autoload($class_name) {
|
|
|
|
PhutilSymbolLoader::loadClass($class_name);
|
|
|
|
}
|
2011-01-31 20:55:26 +01:00
|
|
|
|
|
|
|
|
|
|
|
function phabricator_read_config_file($config) {
|
|
|
|
$root = dirname(dirname(__FILE__));
|
|
|
|
$conf = include $root.'/conf/'.$config.'.conf.php';
|
|
|
|
if ($conf === false) {
|
|
|
|
throw new Exception("Failed to read config file '{$config}'.");
|
|
|
|
}
|
|
|
|
return $conf;
|
|
|
|
}
|
|
|
|
|