PageRenderTime 34ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/myCore/lib/laravel/symfony/http-kernel/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php

https://gitlab.com/fabian.morales/marlon_becerra
PHP | 330 lines | 243 code | 45 blank | 42 comment | 21 complexity | 67eb637bf0153cbbfcf95bd4b79b2217 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 are serialized and as they can be anything, they need to be converted to strings.
  45. $attributes = array();
  46. foreach ($request->attributes->all() as $key => $value) {
  47. if ('_route' === $key && is_object($value)) {
  48. $attributes[$key] = $this->varToString($value->getPath());
  49. } elseif ('_route_params' === $key) {
  50. // we need to keep route params as an array (see getRouteParams())
  51. foreach ($value as $k => $v) {
  52. $value[$k] = $this->varToString($v);
  53. }
  54. $attributes[$key] = $value;
  55. } else {
  56. $attributes[$key] = $this->varToString($value);
  57. }
  58. }
  59. $content = null;
  60. try {
  61. $content = $request->getContent();
  62. } catch (\LogicException $e) {
  63. // the user already got the request content as a resource
  64. $content = false;
  65. }
  66. $sessionMetadata = array();
  67. $sessionAttributes = array();
  68. $flashes = array();
  69. if ($request->hasSession()) {
  70. $session = $request->getSession();
  71. if ($session->isStarted()) {
  72. $sessionMetadata['Created'] = date(DATE_RFC822, $session->getMetadataBag()->getCreated());
  73. $sessionMetadata['Last used'] = date(DATE_RFC822, $session->getMetadataBag()->getLastUsed());
  74. $sessionMetadata['Lifetime'] = $session->getMetadataBag()->getLifetime();
  75. $sessionAttributes = $session->all();
  76. $flashes = $session->getFlashBag()->peekAll();
  77. }
  78. }
  79. $statusCode = $response->getStatusCode();
  80. $this->data = array(
  81. 'format' => $request->getRequestFormat(),
  82. 'content' => $content,
  83. 'content_type' => $response->headers->get('Content-Type') ? $response->headers->get('Content-Type') : 'text/html',
  84. 'status_text' => isset(Response::$statusTexts[$statusCode]) ? Response::$statusTexts[$statusCode] : '',
  85. 'status_code' => $statusCode,
  86. 'request_query' => $request->query->all(),
  87. 'request_request' => $request->request->all(),
  88. 'request_headers' => $request->headers->all(),
  89. 'request_server' => $request->server->all(),
  90. 'request_cookies' => $request->cookies->all(),
  91. 'request_attributes' => $attributes,
  92. 'response_headers' => $responseHeaders,
  93. 'session_metadata' => $sessionMetadata,
  94. 'session_attributes' => $sessionAttributes,
  95. 'flashes' => $flashes,
  96. 'path_info' => $request->getPathInfo(),
  97. 'controller' => 'n/a',
  98. 'locale' => $request->getLocale(),
  99. );
  100. if (isset($this->data['request_headers']['php-auth-pw'])) {
  101. $this->data['request_headers']['php-auth-pw'] = '******';
  102. }
  103. if (isset($this->data['request_server']['PHP_AUTH_PW'])) {
  104. $this->data['request_server']['PHP_AUTH_PW'] = '******';
  105. }
  106. if (isset($this->controllers[$request])) {
  107. $controller = $this->controllers[$request];
  108. if (is_array($controller)) {
  109. try {
  110. $r = new \ReflectionMethod($controller[0], $controller[1]);
  111. $this->data['controller'] = array(
  112. 'class' => is_object($controller[0]) ? get_class($controller[0]) : $controller[0],
  113. 'method' => $controller[1],
  114. 'file' => $r->getFilename(),
  115. 'line' => $r->getStartLine(),
  116. );
  117. } catch (\ReflectionException $re) {
  118. if (is_callable($controller)) {
  119. // using __call or __callStatic
  120. $this->data['controller'] = array(
  121. 'class' => is_object($controller[0]) ? get_class($controller[0]) : $controller[0],
  122. 'method' => $controller[1],
  123. 'file' => 'n/a',
  124. 'line' => 'n/a',
  125. );
  126. }
  127. }
  128. } elseif ($controller instanceof \Closure) {
  129. $r = new \ReflectionFunction($controller);
  130. $this->data['controller'] = array(
  131. 'class' => $r->getName(),
  132. 'method' => null,
  133. 'file' => $r->getFilename(),
  134. 'line' => $r->getStartLine(),
  135. );
  136. } else {
  137. $this->data['controller'] = (string) $controller ?: 'n/a';
  138. }
  139. unset($this->controllers[$request]);
  140. }
  141. }
  142. public function getPathInfo()
  143. {
  144. return $this->data['path_info'];
  145. }
  146. public function getRequestRequest()
  147. {
  148. return new ParameterBag($this->data['request_request']);
  149. }
  150. public function getRequestQuery()
  151. {
  152. return new ParameterBag($this->data['request_query']);
  153. }
  154. public function getRequestHeaders()
  155. {
  156. return new HeaderBag($this->data['request_headers']);
  157. }
  158. public function getRequestServer()
  159. {
  160. return new ParameterBag($this->data['request_server']);
  161. }
  162. public function getRequestCookies()
  163. {
  164. return new ParameterBag($this->data['request_cookies']);
  165. }
  166. public function getRequestAttributes()
  167. {
  168. return new ParameterBag($this->data['request_attributes']);
  169. }
  170. public function getResponseHeaders()
  171. {
  172. return new ResponseHeaderBag($this->data['response_headers']);
  173. }
  174. public function getSessionMetadata()
  175. {
  176. return $this->data['session_metadata'];
  177. }
  178. public function getSessionAttributes()
  179. {
  180. return $this->data['session_attributes'];
  181. }
  182. public function getFlashes()
  183. {
  184. return $this->data['flashes'];
  185. }
  186. public function getContent()
  187. {
  188. return $this->data['content'];
  189. }
  190. public function getContentType()
  191. {
  192. return $this->data['content_type'];
  193. }
  194. public function getStatusText()
  195. {
  196. return $this->data['status_text'];
  197. }
  198. public function getStatusCode()
  199. {
  200. return $this->data['status_code'];
  201. }
  202. public function getFormat()
  203. {
  204. return $this->data['format'];
  205. }
  206. public function getLocale()
  207. {
  208. return $this->data['locale'];
  209. }
  210. /**
  211. * Gets the route name.
  212. *
  213. * The _route request attributes is automatically set by the Router Matcher.
  214. *
  215. * @return string The route
  216. */
  217. public function getRoute()
  218. {
  219. return isset($this->data['request_attributes']['_route']) ? $this->data['request_attributes']['_route'] : '';
  220. }
  221. /**
  222. * Gets the route parameters.
  223. *
  224. * The _route_params request attributes is automatically set by the RouterListener.
  225. *
  226. * @return array The parameters
  227. */
  228. public function getRouteParams()
  229. {
  230. return isset($this->data['request_attributes']['_route_params']) ? $this->data['request_attributes']['_route_params'] : array();
  231. }
  232. /**
  233. * Gets the controller.
  234. *
  235. * @return string The controller as a string
  236. */
  237. public function getController()
  238. {
  239. return $this->data['controller'];
  240. }
  241. public function onKernelController(FilterControllerEvent $event)
  242. {
  243. $this->controllers[$event->getRequest()] = $event->getController();
  244. }
  245. public static function getSubscribedEvents()
  246. {
  247. return array(KernelEvents::CONTROLLER => 'onKernelController');
  248. }
  249. /**
  250. * {@inheritdoc}
  251. */
  252. public function getName()
  253. {
  254. return 'request';
  255. }
  256. private function getCookieHeader($name, $value, $expires, $path, $domain, $secure, $httponly)
  257. {
  258. $cookie = sprintf('%s=%s', $name, urlencode($value));
  259. if (0 !== $expires) {
  260. if (is_numeric($expires)) {
  261. $expires = (int) $expires;
  262. } elseif ($expires instanceof \DateTime) {
  263. $expires = $expires->getTimestamp();
  264. } else {
  265. $tmp = strtotime($expires);
  266. if (false === $tmp || -1 == $tmp) {
  267. throw new \InvalidArgumentException(sprintf('The "expires" cookie parameter is not valid (%s).', $expires));
  268. }
  269. $expires = $tmp;
  270. }
  271. $cookie .= '; expires='.str_replace('+0000', '', \DateTime::createFromFormat('U', $expires, new \DateTimeZone('GMT'))->format('D, d-M-Y H:i:s T'));
  272. }
  273. if ($domain) {
  274. $cookie .= '; domain='.$domain;
  275. }
  276. $cookie .= '; path='.$path;
  277. if ($secure) {
  278. $cookie .= '; secure';
  279. }
  280. if ($httponly) {
  281. $cookie .= '; httponly';
  282. }
  283. return $cookie;
  284. }
  285. }