/** * * @return Scalr_UI_Response */ public static function getInstance() { if (self::$_instance === null) { self::$_instance = new Scalr_UI_Response(); } return self::$_instance; }
$response->sendResponse(); } else { $initTime = microtime(true); $response->setHeader("X-Scalr-PrependTime", $prependTime - $startTime); $response->setHeader("X-Scalr-InitTime", $initTime - $prependTime); $response->setHeader("X-Scalr-InitTime1", $time1 - $prependTime); $response->setHeader("X-Scalr-InitTime2", $time2 - $prependTime); $response->setHeader("X-Scalr-InitTime3", $time3 - $prependTime); $response->setHeader("X-Scalr-InitTime4", $time4 - $prependTime); $response->setHeader("X-Scalr-InitTime5", $time5 - $prependTime); Scalr_UI_Controller::handleRequest(explode('/', $path)); Scalr_UI_Response::getInstance()->sendResponse(); } } else { Scalr_UI_Response::getInstance()->setHeader("X-Scalr-Forbiden", "3: {$_SERVER['HTTP_HOST']}"); Scalr_UI_Response::getInstance()->setHttpResponseCode(403); Scalr_UI_Response::getInstance()->sendResponse(); } } catch (ADODB_Exception $e) { $logMysqlExcepton($e); } catch (\Scalr\Exception\MysqlConnectionException $e) { $logMysqlExcepton($e); } catch (\Scalr\Exception\FileNotFoundException $e) { Scalr_UI_Response::getInstance()->failure(sprintf("File '%s' not found", $e->getPath())); Scalr_UI_Response::getInstance()->setHttpResponseCode(404); Scalr_UI_Response::getInstance()->sendResponse(); } catch (Exception $e) { Scalr_UI_Response::getInstance()->failure($e->getMessage()); Scalr_UI_Response::getInstance()->debugException($e); Scalr_UI_Response::getInstance()->sendResponse(); }
public static function handleRequest($pathChunks, $params) { if ($pathChunks[0] == '') { $pathChunks = array('guest'); } try { Scalr_UI_Request::getInstance()->setParams($params); $user = Scalr_UI_Request::getInstance()->getUser(); $controller = self::loadController(array_shift($pathChunks), 'Scalr_UI_Controller', true); if (!$user && get_class($controller) != 'Scalr_UI_Controller_Guest') { throw new Scalr_Exception_InsufficientPermissions(); } else { $controller->uiCacheKeyPattern = ''; if ($user && $user->getAccountId() && $user->getAccount()->status != Scalr_Account::STATUS_ACTIVE && $user->getType() == Scalr_Account_User::TYPE_ACCOUNT_OWNER && get_class($controller) != 'Scalr_UI_Controller_Billing' && get_class($controller) != 'Scalr_UI_Controller_Core' && get_class($controller) != 'Scalr_UI_Controller_Guest' && get_class($controller) != 'Scalr_UI_Controller_Environments') { // suspended account, user = owner, replace controller with billing or allow billing action/guest action $controller = self::loadController('Billing', 'Scalr_UI_Controller', true); $controller->addUiCacheKeyPatternChunk(strtolower(array_pop(explode('_', get_class($controller))))); $controller->call(); } else { $controller->addUiCacheKeyPatternChunk(strtolower(array_pop(explode('_', get_class($controller))))); $controller->call($pathChunks); } } } catch (Scalr_UI_Exception_AccessDenied $e) { Scalr_UI_Response::getInstance()->setHttpResponseCode(403); } catch (Scalr_Exception_InsufficientPermissions $e) { if (is_object($user)) { Scalr_UI_Response::getInstance()->failure($e->getMessage()); } else { Scalr_UI_Response::getInstance()->setHttpResponseCode(403); } } catch (Scalr_UI_Exception_NotFound $e) { Scalr_UI_Response::getInstance()->setHttpResponseCode(404); } catch (Exception $e) { Scalr_UI_Response::getInstance()->failure($e->getMessage()); } Scalr_UI_Response::getInstance()->sendResponse(); }
public static function handleRequest($pathChunks) { $startTime = microtime(true); if ($pathChunks[0] == '') { $pathChunks = array('guest'); } try { $user = Scalr_UI_Request::getInstance()->getUser(); $controller = self::loadController(array_shift($pathChunks), 'Scalr_UI_Controller', true); $class = get_class($controller); if (!$user && $class != 'Scalr_UI_Controller_Guest') { throw new Scalr_Exception_InsufficientPermissions(); } else { $controller->uiCacheKeyPattern = ''; if ($user && $user->getAccountId() && $user->getAccount()->status != Scalr_Account::STATUS_ACTIVE && $user->getType() == Scalr_Account_User::TYPE_ACCOUNT_OWNER && $class != 'Scalr_UI_Controller_Billing' && $class != 'Scalr_UI_Controller_Core' && $class != 'Scalr_UI_Controller_Guest' && $class != 'Scalr_UI_Controller_Environments') { // suspended account, user = owner, replace controller with billing or allow billing action/guest action $controller = self::loadController('Billing', 'Scalr_UI_Controller', true); $r = explode('_', get_class($controller)); $controller->addUiCacheKeyPatternChunk(strtolower(array_pop($r))); $controller->call(); } else { $r = explode('_', $class); $controller->addUiCacheKeyPatternChunk(strtolower(array_pop($r))); $controller->call($pathChunks); } } } catch (Scalr_UI_Exception_AccessDenied $e) { Scalr_UI_Response::getInstance()->setHttpResponseCode(403); } catch (Scalr_Exception_InsufficientPermissions $e) { if (is_object($user)) { Scalr_UI_Response::getInstance()->failure($e->getMessage()); } else { Scalr_UI_Response::getInstance()->setHttpResponseCode(403); } } catch (Scalr_UI_Exception_NotFound $e) { Scalr_UI_Response::getInstance()->setHttpResponseCode(404); } catch (ADODB_Exception $e) { try { $db = Scalr::getDb(); $user = Scalr_UI_Request::getInstance()->getUser(); $db->Execute('INSERT INTO ui_errors (tm, file, lineno, url, short, message, browser, account_id, user_id) VALUES (NOW(), ?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE cnt = cnt + 1', array($e->getFile(), $e->getLine(), $_SERVER['REQUEST_URI'], substr($e->getMessage(), 0, 255), $e->getMessage() . "\n" . $e->getTraceAsString(), $_SERVER['HTTP_USER_AGENT'], $user ? $user->getAccountId() : '', $user ? $user->getId() : '')); Scalr_UI_Response::getInstance()->failure('Database error (1)'); } catch (Exception $e) { Scalr_UI_Response::getInstance()->failure('Database error (2)'); } } catch (Exception $e) { Scalr_UI_Response::getInstance()->failure($e->getMessage()); } Scalr_UI_Response::getInstance()->setHeader("X-Scalr-ActionTime", microtime(true) - $startTime); }
/** * Describes api spec * * @param \Scalr_UI_Response $response Response object */ public function describe(\Scalr_UI_Response $response) { $cacheChanged = is_readable($this->cacheFile) ? filemtime($this->cacheFile) : null; $specChanged = filemtime($this->specFile); $configChanged = filemtime($this->config->getPath()); if ($cacheChanged < $configChanged || $cacheChanged < $specChanged) { $this->spec = yaml_parse_file($this->specFile); foreach ($this->mutators as $mutator) { $mutator->apply($this->config, $this->version); } $data = yaml_emit($this->spec, YAML_UTF8_ENCODING); if (!file_put_contents($this->cacheFile, $data)) { $response->sendFile($this->specFile, ['Content-Type' => 'text/plain;charset=utf-8'], null, $data); return; } } $response->sendFile($this->cacheFile, ['Content-Type' => 'text/plain;charset=utf-8']); }
public function debugMysql($enabled = true) { global $ADODB_OUTP; if ($enabled) { $ADODB_OUTP = function ($msg, $newline) { static $i = 1; $msg = str_replace('<br>', '', $msg); $msg = str_replace('(mysqli): ', '', $msg); $backtrace = []; $b = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); while ($item = array_shift($b)) { if ($item['class'] == 'Scalr\\Db\\ConnectionPool') { $item = array_shift($b); $item['file'] = strstr($item['file'], '/app/'); if ($item['file'] == '/app/src/Scalr/Model/AbstractEntity.php') { while ($item = array_shift($b)) { if ($item['class'] && $item['class'] != 'Scalr\\Model\\AbstractEntity') { break; } } } $item['file'] = strstr($item['file'], '/app/') ?: $item['file']; $backtrace[] = "File: {$item['file']} [{$item['line']}]"; $backtrace[] = "Class: {$item['class']}::{$item['function']}"; //$backtrace[] = str_replace("\n", "<br>", print_r($item['args'], true)); break; } } Scalr_UI_Response::getInstance()->serverDebugLog[] = array('name' => 'sql', 'value' => $msg, 'backtrace' => join("<br>", $backtrace)); }; Scalr::getDb()->debug = -1; if (Scalr::getContainer()->analytics->enabled) { Scalr::getContainer()->cadb->debug = -1; } } else { if (Scalr::getContainer()->analytics->enabled) { Scalr::getContainer()->cadb->debug = false; } Scalr::getDb()->debug = false; } }
public function debugMysql($enabled = true) { global $ADODB_OUTP; if ($enabled) { $ADODB_OUTP = function ($msg, $newline) { static $i = 1; $msg = str_replace('<br>', '', $msg); $msg = str_replace('(mysqli): ', '', $msg); Scalr_UI_Response::getInstance()->serverDebugSql[] = array('sql' => $msg); }; Scalr::getDb()->debug = -1; if (Scalr::getContainer()->analytics->enabled) { Scalr::getContainer()->cadb->debug = -1; } } else { if (Scalr::getContainer()->analytics->enabled) { Scalr::getContainer()->cadb->debug = false; } Scalr::getDb()->debug = false; } }
/** * @param \Scalr_UI_Response $response */ public function markResponseInvalid(\Scalr_UI_Response $response) { $response->failure(); $response->data($this->getErrors()); }
public static function handleRequest($pathChunks) { $startTime = microtime(true); if ($pathChunks[0] == '') { $pathChunks = array('guest'); } try { $user = Scalr_UI_Request::getInstance()->getUser(); if (!$user && !($pathChunks[0] == 'guest' || $pathChunks[0] == 'public')) { throw new Scalr_Exception_InsufficientPermissions(); } $controller = self::loadController(array_shift($pathChunks), 'Scalr_UI_Controller', true); $class = get_class($controller); $controller->uiCacheKeyPattern = ''; if ($user && $user->getAccountId() && $user->getAccount()->status != Scalr_Account::STATUS_ACTIVE && $user->getType() == Scalr_Account_User::TYPE_ACCOUNT_OWNER && $class != 'Scalr_UI_Controller_Account2' && $class != 'Scalr_UI_Controller_Core' && $class != 'Scalr_UI_Controller_Dashboard' && $class != 'Scalr_UI_Controller_Guest' && $class != 'Scalr_UI_Controller_Public') { // suspended account, user = owner, replace controller with billing or allow billing action/guest action throw new Exception('Your account has been suspended.'); } else { $r = explode('_', $class); $controller->addUiCacheKeyPatternChunk(strtolower(array_pop($r))); $controller->call($pathChunks); } } catch (Scalr_UI_Exception_AccessDenied $e) { Scalr_UI_Response::getInstance()->setHttpResponseCode(403); } catch (Scalr_Exception_InsufficientPermissions $e) { if (is_object($user)) { Scalr_UI_Response::getInstance()->failure($e->getMessage()); } else { Scalr_UI_Response::getInstance()->setHttpResponseCode(403); } } catch (Scalr_UI_Exception_NotFound $e) { Scalr_UI_Response::getInstance()->setHttpResponseCode(404); } catch (ADODB_Exception $e) { \Scalr::logException($e); Scalr_UI_Response::getInstance()->debugException($e); Scalr_UI_Response::getInstance()->failure('Database error'); } catch (FileNotFoundException $e) { Scalr_UI_Response::getInstance()->failure(sprintf("File '%s' not found", $e->getPath())); Scalr_UI_Response::getInstance()->setHttpResponseCode(404); } catch (Exception $e) { $rawHtml = get_class($e) == 'Scalr_Exception_LimitExceeded'; Scalr_UI_Response::getInstance()->debugException($e); Scalr_UI_Response::getInstance()->failure($e->getMessage(), $rawHtml); } Scalr_UI_Response::getInstance()->setHeader("X-Scalr-ActionTime", microtime(true) - $startTime); }