PageRenderTime 26ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php

https://gitlab.com/daniruizcamacho/pfcascensores
PHP | 326 lines | 241 code | 45 blank | 40 comment | 21 complexity | 6331bb9218f46832e73986ca4ad45a30 MD5 | raw file
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Component\HttpKernel\DataCollector;
  11. use Symfony\Component\HttpFoundation\ParameterBag;
  12. use Symfony\Component\HttpFoundation\HeaderBag;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  16. use Symfony\Component\HttpKernel\KernelEvents;
  17. use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  18. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  19. /**
  20. * RequestDataCollector.
  21. *
  22. * @author Fabien Potencier <fabien@symfony.com>
  23. */
  24. class RequestDataCollector extends DataCollector implements EventSubscriberInterface
  25. {
  26. protected $controllers;
  27. public function __construct()
  28. {
  29. $this->controllers = new \SplObjectStorage();
  30. }
  31. /**
  32. * {@inheritdoc}
  33. */
  34. public function collect(Request $request, Response $response, \Exception $exception = null)
  35. {
  36. $responseHeaders = $response->headers->all();
  37. $cookies = array();
  38. foreach ($response->headers->getCookies() as $cookie) {
  39. $cookies[] = $this->getCookieHeader($cookie->getName(), $cookie->getValue(), $cookie->getExpiresTime(), $cookie->getPath(), $cookie->getDomain(), $cookie->isSecure(), $cookie->isHttpOnly());
  40. }
  41. if (count($cookies) > 0) {
  42. $responseHeaders['Set-Cookie'] = $cookies;
  43. }
  44. $attributes = array();
  45. foreach ($request->attributes->all() as $key => $value) {
  46. if ('_route' === $key && is_object($value)) {
  47. $attributes['_route'] = $this->varToString($value->getPath());
  48. } elseif ('_route_params' === $key) {
  49. foreach ($value as $key => $v) {
  50. $attributes['_route_params'][$key] = $this->varToString($v);
  51. }
  52. } else {
  53. $attributes[$key] = $this->varToString($value);
  54. }
  55. }
  56. $content = null;
  57. try {
  58. $content = $request->getContent();
  59. } catch (\LogicException $e) {
  60. // the user already got the request content as a resource
  61. $content = false;
  62. }
  63. $sessionMetadata = array();
  64. $sessionAttributes = array();
  65. $flashes = array();
  66. if ($request->hasSession()) {
  67. $session = $request->getSession();
  68. if ($session->isStarted()) {
  69. $sessionMetadata['Created'] = date(DATE_RFC822, $session->getMetadataBag()->getCreated());
  70. $sessionMetadata['Last used'] = date(DATE_RFC822, $session->getMetadataBag()->getLastUsed());
  71. $sessionMetadata['Lifetime'] = $session->getMetadataBag()->getLifetime();
  72. $sessionAttributes = $session->all();
  73. $flashes = $session->getFlashBag()->peekAll();
  74. }
  75. }
  76. $statusCode = $response->getStatusCode();
  77. $this->data = array(
  78. 'format' => $request->getRequestFormat(),
  79. 'content' => $content,
  80. 'content_type' => $response->headers->get('Content-Type') ? $response->headers->get('Content-Type') : 'text/html',
  81. 'status_text' => isset(Response::$statusTexts[$statusCode]) ? Response::$statusTexts[$statusCode] : '',
  82. 'status_code' => $statusCode,
  83. 'request_query' => $request->query->all(),
  84. 'request_request' => $request->request->all(),
  85. 'request_headers' => $request->headers->all(),
  86. 'request_server' => $request->server->all(),
  87. 'request_cookies' => $request->cookies->all(),
  88. 'request_attributes' => $attributes,
  89. 'response_headers' => $responseHeaders,
  90. 'session_metadata' => $sessionMetadata,
  91. 'session_attributes' => $sessionAttributes,
  92. 'flashes' => $flashes,
  93. 'path_info' => $request->getPathInfo(),
  94. 'controller' => 'n/a',
  95. 'locale' => $request->getLocale(),
  96. );
  97. if (isset($this->data['request_headers']['php-auth-pw'])) {
  98. $this->data['request_headers']['php-auth-pw'] = '******';
  99. }
  100. if (isset($this->data['request_server']['PHP_AUTH_PW'])) {
  101. $this->data['request_server']['PHP_AUTH_PW'] = '******';
  102. }
  103. if (isset($this->controllers[$request])) {
  104. $controller = $this->controllers[$request];
  105. if (is_array($controller)) {
  106. try {
  107. $r = new \ReflectionMethod($controller[0], $controller[1]);
  108. $this->data['controller'] = array(
  109. 'class' => is_object($controller[0]) ? get_class($controller[0]) : $controller[0],
  110. 'method' => $controller[1],
  111. 'file' => $r->getFilename(),
  112. 'line' => $r->getStartLine(),
  113. );
  114. } catch (\ReflectionException $re) {
  115. if (is_callable($controller)) {
  116. // using __call or __callStatic
  117. $this->data['controller'] = array(
  118. 'class' => is_object($controller[0]) ? get_class($controller[0]) : $controller[0],
  119. 'method' => $controller[1],
  120. 'file' => 'n/a',
  121. 'line' => 'n/a',
  122. );
  123. }
  124. }
  125. } elseif ($controller instanceof \Closure) {
  126. $r = new \ReflectionFunction($controller);
  127. $this->data['controller'] = array(
  128. 'class' => $r->getName(),
  129. 'method' => null,
  130. 'file' => $r->getFilename(),
  131. 'line' => $r->getStartLine(),
  132. );
  133. } else {
  134. $this->data['controller'] = (string) $controller ?: 'n/a';
  135. }
  136. unset($this->controllers[$request]);
  137. }
  138. }
  139. public function getPathInfo()
  140. {
  141. return $this->data['path_info'];
  142. }
  143. public function getRequestRequest()
  144. {
  145. return new ParameterBag($this->data['request_request']);
  146. }
  147. public function getRequestQuery()
  148. {
  149. return new ParameterBag($this->data['request_query']);
  150. }
  151. public function getRequestHeaders()
  152. {
  153. return new HeaderBag($this->data['request_headers']);
  154. }
  155. public function getRequestServer()
  156. {
  157. return new ParameterBag($this->data['request_server']);
  158. }
  159. public function getRequestCookies()
  160. {
  161. return new ParameterBag($this->data['request_cookies']);
  162. }
  163. public function getRequestAttributes()
  164. {
  165. return new ParameterBag($this->data['request_attributes']);
  166. }
  167. public function getResponseHeaders()
  168. {
  169. return new ResponseHeaderBag($this->data['response_headers']);
  170. }
  171. public function getSessionMetadata()
  172. {
  173. return $this->data['session_metadata'];
  174. }
  175. public function getSessionAttributes()
  176. {
  177. return $this->data['session_attributes'];
  178. }
  179. public function getFlashes()
  180. {
  181. return $this->data['flashes'];
  182. }
  183. public function getContent()
  184. {
  185. return $this->data['content'];
  186. }
  187. public function getContentType()
  188. {
  189. return $this->data['content_type'];
  190. }
  191. public function getStatusText()
  192. {
  193. return $this->data['status_text'];
  194. }
  195. public function getStatusCode()
  196. {
  197. return $this->data['status_code'];
  198. }
  199. public function getFormat()
  200. {
  201. return $this->data['format'];
  202. }
  203. public function getLocale()
  204. {
  205. return $this->data['locale'];
  206. }
  207. /**
  208. * Gets the route name.
  209. *
  210. * The _route request attributes is automatically set by the Router Matcher.
  211. *
  212. * @return string The route
  213. */
  214. public function getRoute()
  215. {
  216. return isset($this->data['request_attributes']['_route']) ? $this->data['request_attributes']['_route'] : '';
  217. }
  218. /**
  219. * Gets the route parameters.
  220. *
  221. * The _route_params request attributes is automatically set by the RouterListener.
  222. *
  223. * @return array The parameters
  224. */
  225. public function getRouteParams()
  226. {
  227. return isset($this->data['request_attributes']['_route_params']) ? $this->data['request_attributes']['_route_params'] : array();
  228. }
  229. /**
  230. * Gets the controller.
  231. *
  232. * @return string The controller as a string
  233. */
  234. public function getController()
  235. {
  236. return $this->data['controller'];
  237. }
  238. public function onKernelController(FilterControllerEvent $event)
  239. {
  240. $this->controllers[$event->getRequest()] = $event->getController();
  241. }
  242. public static function getSubscribedEvents()
  243. {
  244. return array(KernelEvents::CONTROLLER => 'onKernelController');
  245. }
  246. /**
  247. * {@inheritdoc}
  248. */
  249. public function getName()
  250. {
  251. return 'request';
  252. }
  253. private function getCookieHeader($name, $value, $expires, $path, $domain, $secure, $httponly)
  254. {
  255. $cookie = sprintf('%s=%s', $name, urlencode($value));
  256. if (0 !== $expires) {
  257. if (is_numeric($expires)) {
  258. $expires = (int) $expires;
  259. } elseif ($expires instanceof \DateTime) {
  260. $expires = $expires->getTimestamp();
  261. } else {
  262. $expires = strtotime($expires);
  263. if (false === $expires || -1 == $expires) {
  264. throw new \InvalidArgumentException(sprintf('The "expires" cookie parameter is not valid.', $expires));
  265. }
  266. }
  267. $cookie .= '; expires='.str_replace('+0000', '', \DateTime::createFromFormat('U', $expires, new \DateTimeZone('GMT'))->format('D, d-M-Y H:i:s T'));
  268. }
  269. if ($domain) {
  270. $cookie .= '; domain='.$domain;
  271. }
  272. $cookie .= '; path='.$path;
  273. if ($secure) {
  274. $cookie .= '; secure';
  275. }
  276. if ($httponly) {
  277. $cookie .= '; httponly';
  278. }
  279. return $cookie;
  280. }
  281. }