Cheetah
Request.php
Go to the documentation of this file.
1 <?php
2 
3 namespace OAuth2;
4 
10 class Request implements RequestInterface
11 {
12  public $attributes;
13  public $request;
14  public $query;
15  public $server;
16  public $files;
17  public $cookies;
18  public $headers;
19  public $content;
20 
34  public function __construct(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null, array $headers = null)
35  {
36  $this->initialize($query, $request, $attributes, $cookies, $files, $server, $content, $headers);
37  }
38 
54  public function initialize(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null, array $headers = null)
55  {
56  $this->request = $request;
57  $this->query = $query;
58  $this->attributes = $attributes;
59  $this->cookies = $cookies;
60  $this->files = $files;
61  $this->server = $server;
62  $this->content = $content;
63  $this->headers = is_null($headers) ? $this->getHeadersFromServer($this->server) : $headers;
64  }
65 
66  public function query($name, $default = null)
67  {
68  return isset($this->query[$name]) ? $this->query[$name] : $default;
69  }
70 
71  public function request($name, $default = null)
72  {
73  return isset($this->request[$name]) ? $this->request[$name] : $default;
74  }
75 
76  public function server($name, $default = null)
77  {
78  return isset($this->server[$name]) ? $this->server[$name] : $default;
79  }
80 
81  public function headers($name, $default = null)
82  {
83  $headers = array_change_key_case($this->headers);
84  $name = strtolower($name);
85 
86  return isset($headers[$name]) ? $headers[$name] : $default;
87  }
88 
89  public function getAllQueryParameters()
90  {
91  return $this->query;
92  }
93 
101  public function getContent($asResource = false)
102  {
103  if (false === $this->content || (true === $asResource && null !== $this->content)) {
104  throw new \LogicException('getContent() can only be called once when using the resource return type.');
105  }
106 
107  if (true === $asResource) {
108  $this->content = false;
109 
110  return fopen('php://input', 'rb');
111  }
112 
113  if (null === $this->content) {
114  $this->content = file_get_contents('php://input');
115  }
116 
117  return $this->content;
118  }
119 
120  private function getHeadersFromServer($server)
121  {
122  $headers = array();
123  foreach ($server as $key => $value) {
124  if (0 === strpos($key, 'HTTP_')) {
125  $headers[substr($key, 5)] = $value;
126  }
127  // CONTENT_* are not prefixed with HTTP_
128  elseif (in_array($key, array('CONTENT_LENGTH', 'CONTENT_MD5', 'CONTENT_TYPE'))) {
129  $headers[$key] = $value;
130  }
131  }
132 
133  if (isset($server['PHP_AUTH_USER'])) {
134  $headers['PHP_AUTH_USER'] = $server['PHP_AUTH_USER'];
135  $headers['PHP_AUTH_PW'] = isset($server['PHP_AUTH_PW']) ? $server['PHP_AUTH_PW'] : '';
136  } else {
137  /*
138  * php-cgi under Apache does not pass HTTP Basic user/pass to PHP by default
139  * For this workaround to work, add this line to your .htaccess file:
140  * RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
141  *
142  * A sample .htaccess file:
143  * RewriteEngine On
144  * RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
145  * RewriteCond %{REQUEST_FILENAME} !-f
146  * RewriteRule ^(.*)$ app.php [QSA,L]
147  */
148 
149  $authorizationHeader = null;
150  if (isset($server['HTTP_AUTHORIZATION'])) {
151  $authorizationHeader = $server['HTTP_AUTHORIZATION'];
152  } elseif (isset($server['REDIRECT_HTTP_AUTHORIZATION'])) {
153  $authorizationHeader = $server['REDIRECT_HTTP_AUTHORIZATION'];
154  } elseif (function_exists('apache_request_headers')) {
155  $requestHeaders = (array) apache_request_headers();
156 
157  // Server-side fix for bug in old Android versions (a nice side-effect of this fix means we don't care about capitalization for Authorization)
158  $requestHeaders = array_combine(array_map('ucwords', array_keys($requestHeaders)), array_values($requestHeaders));
159 
160  if (isset($requestHeaders['Authorization'])) {
161  $authorizationHeader = trim($requestHeaders['Authorization']);
162  }
163  }
164 
165  if (null !== $authorizationHeader) {
166  $headers['AUTHORIZATION'] = $authorizationHeader;
167  // Decode AUTHORIZATION header into PHP_AUTH_USER and PHP_AUTH_PW when authorization header is basic
168  if (0 === stripos($authorizationHeader, 'basic')) {
169  $exploded = explode(':', base64_decode(substr($authorizationHeader, 6)));
170  if (count($exploded) == 2) {
171  list($headers['PHP_AUTH_USER'], $headers['PHP_AUTH_PW']) = $exploded;
172  }
173  }
174  }
175  }
176 
177  // PHP_AUTH_USER/PHP_AUTH_PW
178  if (isset($headers['PHP_AUTH_USER'])) {
179  $headers['AUTHORIZATION'] = 'Basic '.base64_encode($headers['PHP_AUTH_USER'].':'.$headers['PHP_AUTH_PW']);
180  }
181 
182  return $headers;
183  }
184 
192  public static function createFromGlobals()
193  {
194  $class = get_called_class();
195  $request = new $class($_GET, $_POST, array(), $_COOKIE, $_FILES, $_SERVER);
196 
197  $contentType = $request->server('CONTENT_TYPE', '');
198  $requestMethod = $request->server('REQUEST_METHOD', 'GET');
199  if (0 === strpos($contentType, 'application/x-www-form-urlencoded')
200  && in_array(strtoupper($requestMethod), array('PUT', 'DELETE'))
201  ) {
202  parse_str($request->getContent(), $data);
203  $request->request = $data;
204  } elseif (0 === strpos($contentType, 'application/json')
205  && in_array(strtoupper($requestMethod), array('POST', 'PUT', 'DELETE'))
206  ) {
207  $data = json_decode($request->getContent(), true);
208  $request->request = $data;
209  }
210 
211  return $request;
212  }
213 }
OAuth2\Request
Definition: Request.php:11
OAuth2\Request\$server
$server
Definition: Request.php:15
OAuth2\Request\$query
$query
Definition: Request.php:14
OAuth2\Request\__construct
__construct(array $query=array(), array $request=array(), array $attributes=array(), array $cookies=array(), array $files=array(), array $server=array(), $content=null, array $headers=null)
Definition: Request.php:34
OAuth2\Request\headers
headers($name, $default=null)
Definition: Request.php:81
OAuth2\Request\$headers
$headers
Definition: Request.php:18
php
OAuth2\Request\createFromGlobals
static createFromGlobals()
Definition: Request.php:192
OAuth2\Request\request
request($name, $default=null)
Definition: Request.php:71
OAuth2\Request\server
server($name, $default=null)
Definition: Request.php:76
OAuth2\Request\$content
$content
Definition: Request.php:19
$_GET
$_GET['debug']
Definition: index.php:67
content
AutoFormat RemoveEmpty HTML Purifier will attempt to remove empty elements that contribute no semantic information to the document The following types of nodes will be and that are not empty and</li >< li > Tags with no content
Definition: AutoFormat.RemoveEmpty.txt:17
OAuth2\Request\$cookies
$cookies
Definition: Request.php:17
OAuth2\Request\initialize
initialize(array $query=array(), array $request=array(), array $attributes=array(), array $cookies=array(), array $files=array(), array $server=array(), $content=null, array $headers=null)
Definition: Request.php:54
OAuth2\RequestInterface
Definition: RequestInterface.php:6
OAuth2\Request\$attributes
$attributes
Definition: Request.php:12
OAuth2\Request\getContent
getContent($asResource=false)
Definition: Request.php:101
OAuth2\Request\$request
$request
Definition: Request.php:13
OAuth2
Definition: Autoloader.php:3
as
as
Definition: Filter.ExtractStyleBlocks.Escaping.txt:10
OAuth2\Request\$files
$files
Definition: Request.php:16
OAuth2\Request\query
query($name, $default=null)
Definition: Request.php:66
OAuth2\Request\getAllQueryParameters
getAllQueryParameters()
Definition: Request.php:89