aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/sabre/http/lib/Request.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/sabre/http/lib/Request.php')
-rw-r--r--vendor/sabre/http/lib/Request.php316
1 files changed, 316 insertions, 0 deletions
diff --git a/vendor/sabre/http/lib/Request.php b/vendor/sabre/http/lib/Request.php
new file mode 100644
index 000000000..8bcaf32a6
--- /dev/null
+++ b/vendor/sabre/http/lib/Request.php
@@ -0,0 +1,316 @@
+<?php
+
+namespace Sabre\HTTP;
+
+use InvalidArgumentException;
+use Sabre\Uri;
+
+/**
+ * The Request class represents a single HTTP request.
+ *
+ * You can either simply construct the object from scratch, or if you need
+ * access to the current HTTP request, use Sapi::getRequest.
+ *
+ * @copyright Copyright (C) fruux GmbH (https://fruux.com/)
+ * @author Evert Pot (http://evertpot.com/)
+ * @license http://sabre.io/license/ Modified BSD License
+ */
+class Request extends Message implements RequestInterface {
+
+ /**
+ * HTTP Method
+ *
+ * @var string
+ */
+ protected $method;
+
+ /**
+ * Request Url
+ *
+ * @var string
+ */
+ protected $url;
+
+ /**
+ * Creates the request object
+ *
+ * @param string $method
+ * @param string $url
+ * @param array $headers
+ * @param resource $body
+ */
+ function __construct($method = null, $url = null, array $headers = null, $body = null) {
+
+ if (is_array($method)) {
+ throw new InvalidArgumentException('The first argument for this constructor should be a string or null, not an array. Did you upgrade from sabre/http 1.0 to 2.0?');
+ }
+ if (!is_null($method)) $this->setMethod($method);
+ if (!is_null($url)) $this->setUrl($url);
+ if (!is_null($headers)) $this->setHeaders($headers);
+ if (!is_null($body)) $this->setBody($body);
+
+ }
+
+ /**
+ * Returns the current HTTP method
+ *
+ * @return string
+ */
+ function getMethod() {
+
+ return $this->method;
+
+ }
+
+ /**
+ * Sets the HTTP method
+ *
+ * @param string $method
+ * @return void
+ */
+ function setMethod($method) {
+
+ $this->method = $method;
+
+ }
+
+ /**
+ * Returns the request url.
+ *
+ * @return string
+ */
+ function getUrl() {
+
+ return $this->url;
+
+ }
+
+ /**
+ * Sets the request url.
+ *
+ * @param string $url
+ * @return void
+ */
+ function setUrl($url) {
+
+ $this->url = $url;
+
+ }
+
+ /**
+ * Returns the list of query parameters.
+ *
+ * This is equivalent to PHP's $_GET superglobal.
+ *
+ * @return array
+ */
+ function getQueryParameters() {
+
+ $url = $this->getUrl();
+ if (($index = strpos($url, '?')) === false) {
+ return [];
+ } else {
+ parse_str(substr($url, $index + 1), $queryParams);
+ return $queryParams;
+ }
+
+ }
+
+ /**
+ * Sets the absolute url.
+ *
+ * @param string $url
+ * @return void
+ */
+ function setAbsoluteUrl($url) {
+
+ $this->absoluteUrl = $url;
+
+ }
+
+ /**
+ * Returns the absolute url.
+ *
+ * @return string
+ */
+ function getAbsoluteUrl() {
+
+ return $this->absoluteUrl;
+
+ }
+
+ /**
+ * Base url
+ *
+ * @var string
+ */
+ protected $baseUrl = '/';
+
+ /**
+ * Sets a base url.
+ *
+ * This url is used for relative path calculations.
+ *
+ * @param string $url
+ * @return void
+ */
+ function setBaseUrl($url) {
+
+ $this->baseUrl = $url;
+
+ }
+
+ /**
+ * Returns the current base url.
+ *
+ * @return string
+ */
+ function getBaseUrl() {
+
+ return $this->baseUrl;
+
+ }
+
+ /**
+ * Returns the relative path.
+ *
+ * This is being calculated using the base url. This path will not start
+ * with a slash, so it will always return something like
+ * 'example/path.html'.
+ *
+ * If the full path is equal to the base url, this method will return an
+ * empty string.
+ *
+ * This method will also urldecode the path, and if the url was incoded as
+ * ISO-8859-1, it will convert it to UTF-8.
+ *
+ * If the path is outside of the base url, a LogicException will be thrown.
+ *
+ * @return string
+ */
+ function getPath() {
+
+ // Removing duplicated slashes.
+ $uri = str_replace('//', '/', $this->getUrl());
+
+ $uri = Uri\normalize($uri);
+ $baseUri = Uri\normalize($this->getBaseUrl());
+
+ if (strpos($uri, $baseUri) === 0) {
+
+ // We're not interested in the query part (everything after the ?).
+ list($uri) = explode('?', $uri);
+ return trim(URLUtil::decodePath(substr($uri, strlen($baseUri))), '/');
+
+ }
+ // A special case, if the baseUri was accessed without a trailing
+ // slash, we'll accept it as well.
+ elseif ($uri . '/' === $baseUri) {
+
+ return '';
+
+ }
+
+ throw new \LogicException('Requested uri (' . $this->getUrl() . ') is out of base uri (' . $this->getBaseUrl() . ')');
+ }
+
+ /**
+ * Equivalent of PHP's $_POST.
+ *
+ * @var array
+ */
+ protected $postData = [];
+
+ /**
+ * Sets the post data.
+ *
+ * This is equivalent to PHP's $_POST superglobal.
+ *
+ * This would not have been needed, if POST data was accessible as
+ * php://input, but unfortunately we need to special case it.
+ *
+ * @param array $postData
+ * @return void
+ */
+ function setPostData(array $postData) {
+
+ $this->postData = $postData;
+
+ }
+
+ /**
+ * Returns the POST data.
+ *
+ * This is equivalent to PHP's $_POST superglobal.
+ *
+ * @return array
+ */
+ function getPostData() {
+
+ return $this->postData;
+
+ }
+
+ /**
+ * An array containing the raw _SERVER array.
+ *
+ * @var array
+ */
+ protected $rawServerData;
+
+ /**
+ * Returns an item from the _SERVER array.
+ *
+ * If the value does not exist in the array, null is returned.
+ *
+ * @param string $valueName
+ * @return string|null
+ */
+ function getRawServerValue($valueName) {
+
+ if (isset($this->rawServerData[$valueName])) {
+ return $this->rawServerData[$valueName];
+ }
+
+ }
+
+ /**
+ * Sets the _SERVER array.
+ *
+ * @param array $data
+ * @return void
+ */
+ function setRawServerData(array $data) {
+
+ $this->rawServerData = $data;
+
+ }
+
+ /**
+ * Serializes the request object as a string.
+ *
+ * This is useful for debugging purposes.
+ *
+ * @return string
+ */
+ function __toString() {
+
+ $out = $this->getMethod() . ' ' . $this->getUrl() . ' HTTP/' . $this->getHTTPVersion() . "\r\n";
+
+ foreach ($this->getHeaders() as $key => $value) {
+ foreach ($value as $v) {
+ if ($key === 'Authorization') {
+ list($v) = explode(' ', $v, 2);
+ $v .= ' REDACTED';
+ }
+ $out .= $key . ": " . $v . "\r\n";
+ }
+ }
+ $out .= "\r\n";
+ $out .= $this->getBodyAsString();
+
+ return $out;
+
+ }
+
+}