public static function createFromEnvironment()
 {
     $request = new self();
     $request->setProtocol(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on');
     $request->setMethod($_SERVER['REQUEST_METHOD']);
     $request->setHttpProtocol($_SERVER['SERVER_PROTOCOL']);
     $request->setHostName($_SERVER['HTTP_HOST']);
     $queryStart = strpos($_SERVER['REQUEST_URI'], '?');
     if ($queryStart !== false) {
         $request->setUri(substr($_SERVER['REQUEST_URI'], 0, $queryStart));
     } else {
         $request->setUri($_SERVER['REQUEST_URI']);
     }
     $request->setQueryString($_SERVER['QUERY_STRING']);
     $request->_setPostParameters($_POST);
     $headers = array();
     foreach ($_SERVER as $name => $value) {
         if (substr($name, 0, 5) !== 'HTTP_') {
             continue;
         }
         $headerName = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))));
         $headers[$headerName] = $value;
     }
     $request->setHeaders($headers);
     return $request;
 }
Example #2
0
 public static function fromRaw($body, $headers)
 {
     $out = new self();
     $out->setBody($body);
     $out->setHeaders($headers);
     $out->parseData();
     return $out;
 }
Example #3
0
 /**
  * @param string $name
  * @param array  $headers
  *
  * @return static
  */
 public static function create($name, array $headers = [])
 {
     $container = new self($name);
     $container->setHeaders($headers);
     // set visibility
     if (strstr($container->getMetadata()->get('Read'), '.r:*') !== false) {
         $container->setPublic();
     } else {
         $container->setPrivate();
     }
     // set object count
     if (null !== ($count = $container->headers->get('X-Container-Object-Count'))) {
         $container->setObjectCount($count);
     }
     // set bytes
     if (null !== ($bytes = $container->headers->get('X-Container-Bytes-Used'))) {
         $container->setBytesUsed($bytes);
     }
     return $container;
 }
Example #4
0
 /**
  * @return Request
  */
 public static function fromInput()
 {
     global $module;
     $model = new self();
     $model->setMethod(self::getMethodFromInput());
     if (isset($module)) {
         $model->setPath($module);
         $input = explode('/', $module);
         $model->setSegments($input);
     }
     $model->setBody(InputStream::getInput());
     $model->setHeaders(self::getHeadersFromInput());
     $model->setParameters($_GET);
     $model->setCookies($_COOKIE);
     $model->setPost($_POST);
     $model->setEnvironment($_SERVER);
     $model->setStatus(http_response_code());
     $model->setUrl(self::getCurrentUri());
     $model->parseData();
     return $model;
 }
Example #5
0
 /**
  * @param wfWAFRequest|null $request
  * @return wfWAFRequest
  */
 public static function createFromGlobals($request = null)
 {
     if ($request === null) {
         if (version_compare(phpversion(), '5.3.0') > 0) {
             $class = get_called_class();
             $request = new $class();
         } else {
             $request = new self();
         }
     }
     $request->setAuth(array());
     $request->setCookies(array());
     $request->setFileNames(array());
     $request->setFiles(array());
     $request->setHeaders(array());
     $request->setHost('');
     $request->setIP('');
     $request->setMethod('');
     $request->setPath('');
     $request->setProtocol('');
     $request->setTimestamp('');
     $request->setURI('');
     $request->setBody(wfWAFUtils::stripMagicQuotes($_POST));
     $request->setQueryString(wfWAFUtils::stripMagicQuotes($_GET));
     $request->setCookies(wfWAFUtils::stripMagicQuotes($_COOKIE));
     $request->setFiles(wfWAFUtils::stripMagicQuotes($_FILES));
     if (!empty($_FILES)) {
         $fileNames = array();
         foreach ($_FILES as $input => $file) {
             $fileNames[$input] = wfWAFUtils::stripMagicQuotes($file['name']);
         }
         $request->setFileNames($fileNames);
     }
     if (is_array($_SERVER)) {
         //All of these depend on $_SERVER being non-null and an array
         $auth = array();
         if (array_key_exists('PHP_AUTH_USER', $_SERVER)) {
             $auth['user'] = wfWAFUtils::stripMagicQuotes($_SERVER['PHP_AUTH_USER']);
         }
         if (array_key_exists('PHP_AUTH_PW', $_SERVER)) {
             $auth['password'] = wfWAFUtils::stripMagicQuotes($_SERVER['PHP_AUTH_PW']);
         }
         $request->setAuth($auth);
         if (array_key_exists('REQUEST_TIME_FLOAT', $_SERVER)) {
             $timestamp = $_SERVER['REQUEST_TIME_FLOAT'];
         } else {
             if (array_key_exists('REQUEST_TIME', $_SERVER)) {
                 $timestamp = $_SERVER['REQUEST_TIME'];
             } else {
                 $timestamp = time();
             }
         }
         $request->setTimestamp($timestamp);
         $headers = array();
         foreach ($_SERVER as $key => $value) {
             if (wfWAFUtils::strpos($key, 'HTTP_') === 0) {
                 $header = wfWAFUtils::substr($key, 5);
                 $header = str_replace(array(' ', '_'), array('', ' '), $header);
                 $header = ucwords(wfWAFUtils::strtolower($header));
                 $header = str_replace(' ', '-', $header);
                 $headers[$header] = wfWAFUtils::stripMagicQuotes($value);
             }
         }
         if (array_key_exists('CONTENT_TYPE', $_SERVER)) {
             $headers['Content-Type'] = wfWAFUtils::stripMagicQuotes($_SERVER['CONTENT_TYPE']);
         }
         if (array_key_exists('CONTENT_LENGTH', $_SERVER)) {
             $headers['Content-Length'] = wfWAFUtils::stripMagicQuotes($_SERVER['CONTENT_LENGTH']);
         }
         $request->setHeaders($headers);
         $host = '';
         if (array_key_exists('Host', $headers)) {
             $host = $headers['Host'];
         } else {
             if (array_key_exists('SERVER_NAME', $_SERVER)) {
                 $host = wfWAFUtils::stripMagicQuotes($_SERVER['SERVER_NAME']);
             }
         }
         $request->setHost($host);
         $request->setMethod(array_key_exists('REQUEST_METHOD', $_SERVER) ? wfWAFUtils::stripMagicQuotes($_SERVER['REQUEST_METHOD']) : 'GET');
         $request->setProtocol(array_key_exists('HTTPS', $_SERVER) && $_SERVER['HTTPS'] && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http');
         $request->setUri(array_key_exists('REQUEST_URI', $_SERVER) ? wfWAFUtils::stripMagicQuotes($_SERVER['REQUEST_URI']) : '');
         $uri = parse_url($request->getURI());
         if (is_array($uri) && array_key_exists('path', $uri)) {
             $path = $uri['path'];
         } else {
             $path = $request->getURI();
         }
         $request->setPath($path);
     }
     return $request;
 }
Example #6
0
 public static function create(\Exception $exception, $statusCode = null, array $headers = array())
 {
     $e = new self();
     $e->setMessage($exception->getMessage());
     $e->setCode($exception->getCode());
     if (null === $statusCode) {
         $statusCode = 500;
     }
     $e->setStatusCode($statusCode);
     $e->setHeaders($headers);
     $e->setTraceFromException($exception);
     $e->setClass(get_class($exception));
     $e->setFile($exception->getFile());
     $e->setLine($exception->getLine());
     if ($exception->getPrevious()) {
         $e->setPrevious(self::create($exception->getPrevious()));
     }
     return $e;
 }
Example #7
0
 /**
  * Factory method for <i>HttpRequest</i> creation from server
  *
  * This method uses superglobal array <code>$_SERVER</code> to build single
  * Request-Line consisting of <i>METHOD</i>, <i>URI</i> and <i>PROTOCOL</i>.
  * Headers and content is created via functions <code>getallheaders()</code>
  * and <code>file_get_contents()</code>.
  *
  * @return HttpRequest request object
  */
 public static function createFromServer()
 {
     $request = new self();
     $request->setMethod($_SERVER['REQUEST_METHOD']);
     $request->setUri($_SERVER['REQUEST_URI']);
     $request->setVersion($_SERVER['SERVER_PROTOCOL']);
     $request->setHeaders(getallheaders());
     $request->setContent(file_get_contents('php://input'));
     return $request;
 }