Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Flashes without escaping / Flash zprávy bez escapování #26

Open
altosch opened this issue Feb 14, 2018 · 8 comments
Open

Flashes without escaping / Flash zprávy bez escapování #26

altosch opened this issue Feb 14, 2018 · 8 comments

Comments

@altosch
Copy link

altosch commented Feb 14, 2018

Bylo by prosím možné doplnit nějakou volbu, aby se flashe neescapovaly? Když chci zahrnout nějaké tučné nebo barevné písmo, aby se v tom uživatel lépe vyznal, vypíšou se HTML tagy. Nějakou alternativu k

$this->flashMessage('<strong>POZOR</strong> došlo k chybě...', 'danger');
{$flash->message|noescape}

@JanGalek
Copy link

@altosch tohle by nittro řešit podle mě ani nemělo.

Napiš spíš na nette, nejspíše do balíčku latte.

@jahudka
Copy link
Member

jahudka commented Feb 21, 2018

@JanGalek no, pravda je taková, že když si flashe vypisuješ ručně, tak si tam to |noescape klidně dát můžeš a bude to fungovat - problém je, že Nittro na flashe definuje takový custom macro, který flashe renderuje v latte a přidává k nim nějaký data atributy, aby je frontend pak našel a uměl schovat a aby uměl vykreslit flashe který přijdou AJAXem - takže tohle skutečně bude potřeba opravit v Nittru.

@altosch podpora pro HTML flashe v JS komponentě nittro-flashes už existuje, ale bohužel není propojená s tím Latte macrem.. promyslím nějak jak to přidat a pořeším to, ale asi to nebude úplně hned :-(

@JanGalek
Copy link

@jahudka ano vím o tom, sám používám, ale nevěděl jsem, že nittro ještě je upravuje. Tak to se omlouvám. :)

@yess-webioza
Copy link

Tiež by bolo super, ak by sa toto implementovalo pre form errors.

@spaze
Copy link

spaze commented Mar 17, 2019

Nevím, jestli to pomůže (neznám Nittro), ale třeba by to šlo nějak takhle, v šabloně pak není třeba escapovat:

$el = Html::el()
  ->addHtml(Html::el('strong')->setText('POZOR'))
  ->addText(' došlo k chybě...');
$this->flashMessage($el);

Pokud je to mimo, tak se omlouvám.

@jahudka
Copy link
Member

jahudka commented Mar 17, 2019

@spaze no, nevím jestli tohle projde v Nette 3 (nemá tam už metoda flashMessage() striktně natypovanou $message jako string?), ale hlavně - i kdyby tohle šlo udělat v presenteru, musíš to pak nějak vyrenderovat v šabloně (to by ještě šlo ošetřit uvnitř nittro makra n:flashes), a zároveň to musíš umět nějak vyrenderovat na frontendu když ti flashes přijdou AJAXem (což pak vůbec neprochází přes šablonu) - a tam je hlavní problém - jak má Nittro spolehlivě detekovat, jestli ta která flash message už prošla escapováním na serveru nebo ne, protože spolehnout se na to, že budou flashky escapovaný vždycky už v payloadu by znamenalo potenciální XSS..

@spaze
Copy link

spaze commented Mar 17, 2019

Nette 3: https://github.com/nette/application/blob/v3.0.0-RC2/src/Application/UI/Control.php#L72

Jak jsem psal, Nittro bohužel neznám, v "klasickém" Nette+Latte je tohle řešením, jak nepoužívat |noescape (což je dobrý nápad) a přesto mít možnost flešky formátovat pomocí HTML. Doufal jsem, že i tak by to mohlo někomu pomoci.

@mark-31
Copy link

mark-31 commented Jun 18, 2019

@jahudka Řesím stejný problém a mám projekt už na Nette 3, kde zatím $message není striktně natypovaná, nicméně chápu, že se na to nedá do budoucna spolehnout. Myslím si, že to se dá vyřešit tím, že se přetíží metoda flashMessage a posílat do ní i 3 argument (případně pole, pokud by těch nastavení bylo více). Stejně všichni dědíme NittroUI\Presenter. Co myslíš?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants