Nelze povolit nocheck filtr

PajaS
Člen | 13
+
0
-

Potřeboval bych v šabloně povolit nocheck, jelikož vkládám konstantní hodnotu, kterou potřebuji jen prohnat filtrem.

Když v kódu nastavím policy následovně:

$policy = new Latte\Sandbox\SecurityPolicy;
$policy->allowFilters(['nocheck']);
$latte->setPolicy($policy);

stejně pořád končím na výjimce:

Uncaught Latte\SecurityViolationException: Filter |nocheck is not allowed.

Uniká mi něco?

CZechBoY
Člen | 3608
+
0
-

Cim vytvaris tu promennou $latte?

PajaS
Člen | 13
+
0
-
$latte = new Latte\Engine;

Resp. celý kód:

$latte = new Latte\Engine;
$latte->setTempDirectory(__DIR__ . '/tmp');

$policy = Latte\Sandbox\SecurityPolicy::createSafePolicy();
$policy->allowFilters(['nocheck']);
$latte->setPolicy($policy);

$latte->render(__DIR__ . '/templates/index.html');

Editoval PajaS (19. 8. 2020 10:00)

PajaS
Člen | 13
+
0
-

Zkoušel jsem nastavit na celý engine sandbox režim a ručně povolit i jedno moje vlastní makro. To moje funguje, ale nocheck stejně ne…

Ondřej Kubíček
Člen | 494
+
0
-

podle dokumentace https://latte.nette.org/cs/filters#… se ten filtr jmenuje noCheck (velké C), tak bych to zkusil takhle

Editoval Ondřej Kubíček (19. 8. 2020 10:43)

PajaS
Člen | 13
+
0
-

Procházím zdrojový kód Latte a tato hláška mi vyskakuje ze souboru Latte/Compiler/PhpWriter.php na řádku 695:

} elseif (!strcasecmp($tokens->currentValue(), 'noescape') || !strcasecmp($tokens->currentValue(), 'nocheck')) {
   throw new SecurityViolationException("Filter |{$tokens->currentValue()} is not allowed.");

Přitom když si u Policy zavolám $policy->isFilterAllowed('nocheck'), je to true

Změnit velikost písmene jsem samozřejmě zkoušel, bez úspěchu.

Pro úplnost ještě uvádím způsob volání v šabloně:

<div style="background-image: url('{='img/image1.png'|imageUrl:true|nocheck}');">

Editoval PajaS (19. 8. 2020 10:52)

PajaS
Člen | 13
+
0
-

Hm, tak řešení pro moji potřebu se nakonec ukázalo nahradit nocheck za noescape.

Sice to neřeší problém, proč nejde zapnout nocheck, ale pro moji potřebu – aby mi to neescapovalo zadaný text – mi to stačí.

David Grudl
Nette Core | 8082
+
0
-

Ta chybová zpráva je špatná. Jde o to, že Latte adresy uvnitř CSS nekontroluje, tudíž kontrolu ani nelze vypnout.

PajaS
Člen | 13
+
0
-

David Grudl napsal(a):

Ta chybová zpráva je špatná. Jde o to, že Latte adresy uvnitř CSS nekontroluje, tudíž kontrolu ani nelze vypnout.

No Latte mi právě před všechny lomítka a tečky v cestě dávalo \, takže jsem to potřeboval nějak vypnout.

janpecha
Backer | 75
+
+1
-

@PajaS a to právě souvisí s escapováním a noescape – nikoli s kontrolou odkazů a nocheck (https://latte.nette.org/cs/filters#…)