Spaces:
Sleeping
Sleeping
processmaker-community / processmaker-files /vendor /symfony /http-kernel /HttpCache /AbstractSurrogate.php
| /* | |
| * This file is part of the Symfony package. | |
| * | |
| * (c) Fabien Potencier <fabien@symfony.com> | |
| * | |
| * For the full copyright and license information, please view the LICENSE | |
| * file that was distributed with this source code. | |
| */ | |
| namespace Symfony\Component\HttpKernel\HttpCache; | |
| use Symfony\Component\HttpFoundation\Request; | |
| use Symfony\Component\HttpFoundation\Response; | |
| use Symfony\Component\HttpKernel\HttpKernelInterface; | |
| /** | |
| * Abstract class implementing Surrogate capabilities to Request and Response instances. | |
| * | |
| * @author Fabien Potencier <fabien@symfony.com> | |
| * @author Robin Chalas <robin.chalas@gmail.com> | |
| */ | |
| abstract class AbstractSurrogate implements SurrogateInterface | |
| { | |
| protected $contentTypes; | |
| protected $phpEscapeMap = array( | |
| array('<?', '<%', '<s', '<S'), | |
| array('<?php echo "<?"; ?>', '<?php echo "<%"; ?>', '<?php echo "<s"; ?>', '<?php echo "<S"; ?>'), | |
| ); | |
| /** | |
| * Constructor. | |
| * | |
| * @param array $contentTypes An array of content-type that should be parsed for Surrogate information | |
| * (default: text/html, text/xml, application/xhtml+xml, and application/xml) | |
| */ | |
| public function __construct(array $contentTypes = array('text/html', 'text/xml', 'application/xhtml+xml', 'application/xml')) | |
| { | |
| $this->contentTypes = $contentTypes; | |
| } | |
| /** | |
| * Returns a new cache strategy instance. | |
| * | |
| * @return ResponseCacheStrategyInterface A ResponseCacheStrategyInterface instance | |
| */ | |
| public function createCacheStrategy() | |
| { | |
| return new ResponseCacheStrategy(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function hasSurrogateCapability(Request $request) | |
| { | |
| if (null === $value = $request->headers->get('Surrogate-Capability')) { | |
| return false; | |
| } | |
| return false !== strpos($value, sprintf('%s/1.0', strtoupper($this->getName()))); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function addSurrogateCapability(Request $request) | |
| { | |
| $current = $request->headers->get('Surrogate-Capability'); | |
| $new = sprintf('symfony="%s/1.0"', strtoupper($this->getName())); | |
| $request->headers->set('Surrogate-Capability', $current ? $current.', '.$new : $new); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function needsParsing(Response $response) | |
| { | |
| if (!$control = $response->headers->get('Surrogate-Control')) { | |
| return false; | |
| } | |
| $pattern = sprintf('#content="[^"]*%s/1.0[^"]*"#', strtoupper($this->getName())); | |
| return (bool) preg_match($pattern, $control); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function handle(HttpCache $cache, $uri, $alt, $ignoreErrors) | |
| { | |
| $subRequest = Request::create($uri, Request::METHOD_GET, array(), $cache->getRequest()->cookies->all(), array(), $cache->getRequest()->server->all()); | |
| try { | |
| $response = $cache->handle($subRequest, HttpKernelInterface::SUB_REQUEST, true); | |
| if (!$response->isSuccessful()) { | |
| throw new \RuntimeException(sprintf('Error when rendering "%s" (Status code is %s).', $subRequest->getUri(), $response->getStatusCode())); | |
| } | |
| return $response->getContent(); | |
| } catch (\Exception $e) { | |
| if ($alt) { | |
| return $this->handle($cache, $alt, '', $ignoreErrors); | |
| } | |
| if (!$ignoreErrors) { | |
| throw $e; | |
| } | |
| } | |
| } | |
| /** | |
| * Remove the Surrogate from the Surrogate-Control header. | |
| * | |
| * @param Response $response | |
| */ | |
| protected function removeFromControl(Response $response) | |
| { | |
| if (!$response->headers->has('Surrogate-Control')) { | |
| return; | |
| } | |
| $value = $response->headers->get('Surrogate-Control'); | |
| $upperName = strtoupper($this->getName()); | |
| if (sprintf('content="%s/1.0"', $upperName) == $value) { | |
| $response->headers->remove('Surrogate-Control'); | |
| } elseif (preg_match(sprintf('#,\s*content="%s/1.0"#', $upperName), $value)) { | |
| $response->headers->set('Surrogate-Control', preg_replace(sprintf('#,\s*content="%s/1.0"#', $upperName), '', $value)); | |
| } elseif (preg_match(sprintf('#content="%s/1.0",\s*#', $upperName), $value)) { | |
| $response->headers->set('Surrogate-Control', preg_replace(sprintf('#content="%s/1.0",\s*#', $upperName), '', $value)); | |
| } | |
| } | |
| } | |