示例#1
0
 /**
  * 
  * @return Scalr_UI_Response
  */
 public static function getInstance()
 {
     if (self::$_instance === null) {
         self::$_instance = new Scalr_UI_Response();
     }
     return self::$_instance;
 }
示例#2
0
            $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();
}
示例#3
0
 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();
 }
示例#4
0
 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);
 }
示例#5
0
 /**
  * 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']);
 }
示例#6
0
文件: Response.php 项目: mheydt/scalr
 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;
     }
 }
示例#7
0
 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;
     }
 }
示例#8
0
 /**
  * @param \Scalr_UI_Response $response
  */
 public function markResponseInvalid(\Scalr_UI_Response $response)
 {
     $response->failure();
     $response->data($this->getErrors());
 }
示例#9
0
 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);
 }