public getReferringRequest ( ) : |
||
return | the referring request, or NULL if no referrer found |
public function getReferringRequest()
{
if ($this->referringRequest !== null) {
return $this->referringRequest;
}
if (!isset($this->internalArguments['__referrer'])) {
return null;
}
if (is_array($this->internalArguments['__referrer'])) {
$referrerArray = $this->internalArguments['__referrer'];
$referringRequest = new ActionRequest($this->getHttpRequest());
$arguments = [];
if (isset($referrerArray['arguments'])) {
$serializedArgumentsWithHmac = $referrerArray['arguments'];
$serializedArguments = $this->hashService->validateAndStripHmac($serializedArgumentsWithHmac);
$arguments = unserialize(base64_decode($serializedArguments));
unset($referrerArray['arguments']);
}
$referringRequest->setArguments(Arrays::arrayMergeRecursiveOverrule($arguments, $referrerArray));
return $referringRequest;
} else {
$this->referringRequest = $this->internalArguments['__referrer'];
}
return $this->referringRequest;
}
/** * @test * @expectedException \Neos\Flow\Security\Exception\InvalidHashException */ public function getReferringRequestThrowsAnExceptionIfTheHmacOfTheArgumentsCouldNotBeValid() { $serializedArguments = base64_encode('some manipulated arguments string without valid HMAC'); $referrer = ['@controller' => 'Foo', '@action' => 'bar', 'arguments' => $serializedArguments]; $mockHashService = $this->getMockBuilder(HashService::class)->getMock(); $mockHashService->expects($this->once())->method('validateAndStripHmac')->with($serializedArguments)->will($this->throwException(new InvalidHashException())); $this->inject($this->actionRequest, 'hashService', $mockHashService); $this->actionRequest->setArgument('__referrer', $referrer); $this->actionRequest->getReferringRequest(); }