Skip to content

Commit f15ae42

Browse files
hranickadg
authored andcommitted
TemplateFactory: "nonce" is Presenter agnostic (#172)
1 parent 2a2a766 commit f15ae42

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

src/Bridges/ApplicationLatte/TemplateFactory.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public function createTemplate(UI\Control $control = NULL)
105105
$latte->addProvider('uiControl', $control);
106106
$latte->addProvider('uiPresenter', $presenter);
107107
$latte->addProvider('snippetBridge', new Nette\Bridges\ApplicationLatte\SnippetBridge($control));
108-
$nonce = preg_match('#\s\'nonce-([\w+/]+=*)\'#', $presenter->getHttpResponse()->getHeader('Content-Security-Policy'), $m) ? $m[1] : NULL;
108+
$nonce = $presenter && preg_match('#\s\'nonce-([\w+/]+=*)\'#', $presenter->getHttpResponse()->getHeader('Content-Security-Policy'), $m) ? $m[1] : NULL;
109109
$latte->addProvider('uiNonce', $nonce);
110110
}
111111
$latte->addProvider('cacheStorage', $this->cacheStorage);
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
/**
4+
* Test: TemplateFactory nonce
5+
*/
6+
7+
use Nette\Application\UI;
8+
use Nette\Bridges\ApplicationLatte;
9+
use Tester\Assert;
10+
11+
12+
require __DIR__ . '/../bootstrap.php';
13+
14+
$latte = new Latte\Engine;
15+
16+
$latteFactory = Mockery::mock(ApplicationLatte\ILatteFactory::class);
17+
$latteFactory->shouldReceive('create')->andReturn($latte);
18+
19+
$response = Mockery::mock(Nette\Http\IResponse::class);
20+
$response->shouldReceive('getHeader')->with('Content-Security-Policy')->andReturn("hello 'nonce-abcd123==' world");
21+
22+
$control = Mockery::mock(UI\Control::class);
23+
$control->shouldReceive('getPresenter')->andReturn(NULL);
24+
$control->shouldIgnoreMissing();
25+
26+
$factory = new ApplicationLatte\TemplateFactory($latteFactory);
27+
$factory->createTemplate($control);
28+
29+
$latte->setLoader(new Latte\Loaders\StringLoader);
30+
31+
Assert::match(
32+
'<script></script>',
33+
$latte->renderToString('<script n:nonce></script>')
34+
);

0 commit comments

Comments
 (0)