Path: blob/master/src/applications/console/controller/DarkConsoleDataController.php
13402 views
<?php12final class DarkConsoleDataController extends PhabricatorController {34public function shouldRequireLogin() {5return !PhabricatorEnv::getEnvConfig('darkconsole.always-on');6}78public function shouldRequireEnabledUser() {9return !PhabricatorEnv::getEnvConfig('darkconsole.always-on');10}1112public function shouldAllowPartialSessions() {13return true;14}1516public function handleRequest(AphrontRequest $request) {17$viewer = $request->getViewer();18$key = $request->getURIData('key');1920$cache = new PhabricatorKeyValueDatabaseCache();21$cache = new PhutilKeyValueCacheProfiler($cache);22$cache->setProfiler(PhutilServiceProfiler::getInstance());2324$result = $cache->getKey('darkconsole:'.$key);25if (!$result) {26return new Aphront400Response();27}2829try {30$result = phutil_json_decode($result);31} catch (PhutilJSONParserException $ex) {32return new Aphront400Response();33}3435if ($result['vers'] != DarkConsoleCore::STORAGE_VERSION) {36return new Aphront400Response();37}3839if ($result['user'] != $viewer->getPHID()) {40return new Aphront400Response();41}4243$output = array();44$output['tabs'] = $result['tabs'];45$output['panel'] = array();4647foreach ($result['data'] as $class => $data) {48try {49$obj = newv($class, array());50$obj->setData($data);51$obj->setRequest($request);5253$panel = $obj->renderPanel();5455// Because cookie names can now be prefixed, wipe out any cookie value56// with the session cookie name anywhere in its name.57$pattern = '('.preg_quote(PhabricatorCookies::COOKIE_SESSION).')';58foreach ($_COOKIE as $cookie_name => $cookie_value) {59if (preg_match($pattern, $cookie_name)) {60$panel = PhutilSafeHTML::applyFunction(61'str_replace',62$cookie_value,63'(session-key)',64$panel);65}66}6768$output['panel'][$class] = $panel;69} catch (Exception $ex) {70$output['panel'][$class] = 'error';71}72}7374return id(new AphrontAjaxResponse())->setContent($output);75}7677}787980