Edee.one 10.18.0
Vydáno 23. 10. 2026
Verze modulů
| Modul | Verze |
|---|---|
| edee | 10.18.0 |
| cps | 10.18.1 |
| ai | 1.0.2 |
| registration | 6.7.1 |
| 12.5.0 | |
| urlrewrite | 8.4.0 |
| job manager | 5.2.0 |
| rest | 3.4.0 |
| monitoring | 8.4.0 |
| rating | 8.2.0 |
| rating adam | 2.2.0 |
| fulltext | 11.5.1 |
| adam | 15.5.0 |
| ramjet | 14.3.0 |
| scramjet | 14.2.0 |
| audit | 2.1.1 |
| tmm | 3.4.0 |
| remote login | 5.1.0 |
| commons | 6.2.0 |
| interface | 10.2.0 |
| security policy | 7.3.1 |
| feature flags | 3.1.0 |
| feature flags rest api | 1.0.0 |
| validation | 1.3.0 |
| sanitize | 5.1.0 |
| export | 6.2.0 |
| web feature | 4.1.0 |
Změny
#3037 Výpis adresáře souvisejících souborů potenciálně prozrazuje soubory z interní cesty storage
Bezpečnostní chyba Edee Kritická změna
Kritická změna
WD - kontrola výpisu souborů z f.file na FE - pokud je na projektu implementována
Po nasazení musí projekty, které na FE vypisují obsah storage, zkontrolovat nastavení a výpisy otestovat:
RelatedFilesWidgetUrlFilteredRelatedFilesWidget: projít pravidla<internal>ve storagef.file. Pokud vypisovaný adresář nebo jeho část spadá do interní cesty bezallowDirectAccess, soubory z výpisu zmizí. Pokud tam mají zůstat, doplnit k pravidluallowDirectAccess="true".- Test u obou variant: na stránkách s výpisem ověřit, že se zobrazují správné soubory, že funguje procházení podadresářů a odkaz o úroveň výš a že se soubory dají stáhnout. U
UrlFilteredRelatedFilesWidgetto ověřit nepřihlášeně i přihlášeně.
Výpis adresáře souvisejících souborů na stránce (RelatedFilesWidget) nově nezobrazuje soubory
a adresáře z neveřejných cest storage bez allowDirectAccess.
#3071 Fulltext: odpověď hledání říká klientovi, zda a s kolika hity žádat AI shrnutí
AI/ML Fulltext Nová vlastnost RESTAPI
Odpověď hledání fulltextového REST API (GET / i POST /) nově obsahuje pole summary
s hodnotami enabled, minSources a maxSources. Frontend z něj pozná, zda a s kolika výsledky
má o AI shrnutí žádat, a projekt nemusí nastavení shrnutí opisovat do vlastní odpovědi. enabled
je true jen tehdy, když by POST /summary volajícího skutečně obsloužil (zapnuté shrnutí,
dostupné AI, přihlášený uživatel). Stávající pole odpovědi se nemění; projekt s vlastním typem
výsledku hledání dostane summary po přechodu na PaginatedSearchResult. Hodnota minSources
menší než 1 se nově upraví na 1, takže se model nevolá bez jediného zdroje.
#3063 Fulltext neindexuje legitimní Office soubory s vysokou kompresí (falešná zip bomba)
Fulltext Oprava chyby
Některé běžné Office soubory (například XLSX s tisíci opakovaných stylů) se kvůli vysoké
kompresi odmítaly jako zip bomba a nezaindexovaly se. Výchozí limit poměru komprese je nově
volnější a ochrana proti skutečným zip bombám zůstává. Limity jdou upravit vlastnostmi
fulltext.textVariant.minInflateRatio (výchozí 0.002) a fulltext.textVariant.maxEntrySize
(výchozí 100 MB); bez úprav konfigurace se takové soubory zaindexují.
#3054 Smazaný administrátor nechá v bezpečnostní politice TOTP klíč, který zdědí nový účet se stejným loginem
Bezpečnostní chyba Bezpečnostní politika CPS
Smazáním administrátora se nově odstraní i jeho účet v bezpečnostní politice: TOTP klíč, záložní kódy, remember-me tokeny a rozpracované nastavení dvoufázového ověření. Nový administrátor se stejným loginem si tak dvoufázové ověření nastaví sám a klíč předchozího držitele nefunguje. Smazání registrovaného uživatele nově odstraní i jeho remember-me tokeny a druhý faktor. Účty administrátorů smazaných před nasazením opravy si druhý faktor ponechávají; po založení nového uživatele se stejným loginem je potřeba dvoufázové ověření deaktivovat v administraci.
#3051 Stránky pod rodičem v koši zahlcují produkční log a v administraci nejdou dohledat
Edee Oprava chyby
Stránky, které nejsou v koši, ale jejich nadřazená stránka ano, se nově hlásí jedním řádkem WARN bez stack trace a bez CPS warningu, takže po upgradu nezahlcují log. Filtr „Poškozené“ v přehledu stránek je nově najde, a lze je tak přesunout do koše. Vytvoření nebo přesun stránky pod stránku v koši či poškozenou stránku se odmítne se srozumitelnou hláškou.
#3050 Potenciálně citlivé údaje uživatelů v debug logu
Bezpečnostní chyba CPS Registration
Do logu se už nedostávají osobní údaje uživatelů. Registrace vypisuje uživatele jen jako
User{id=…} (login jen tehdy, když je to vygenerované UUID), ne jeho e-mail, jméno, hash hesla ani
aktivační kód; totéž platí pro texty výjimek.
Současně je opravené měkké smazání uživatele, které mohlo selhat na povinném sloupci traitu, jenž
už není v konfiguraci (například accountSource).
#3049 Mail REST: výpis odhlášených příjemců bez query vrací 400 (BundleFilteringConstraintContainer)
Mail Oprava chyby
REST výpis odhlášených příjemců (GET /api/mail/subscriptions/web a /page
s unsubscribed=true) bez parametru query končil HTTP 400. Nově vrací seznam odhlášených příjemců
stejně jako volání s query.
#3047 Dependency check: CVE-2026-102554 v Guavě 32.0.1-jre na dev
Bezpečnostní chyba Dependency
Knihovna Guava je aktualizovaná na opravnou verzi 33.7.2-jre (CVE-2026-102554, odepření služby
přes neomezenou alokaci paměti při Java deserializaci). Guava 33 už tranzitivně nepřináší
checker-qual ani jsr305; projektový kód, který jejich třídy používá (například
javax.annotation.Nonnull), si musí závislost doplnit sám.
#3035 Stage drží údaje souborů z interní cesty ve vazbách a blocích
Bezpečnostní chyba CPS Edee
Soubory z neveřejných cest storage použité v obsahových blocích (motiv, motiv pozadí, mobilní
motiv, ikona, soubor) se nově do Stage nepublikují, pokud cesta nemá allowPublish. Jejich název,
URL a metadata tak už nejsou čitelné přes Stage REST API a GraphQL, stejně jako u vazeb stránek
a bloků. JSON bloku ve Stage dál obsahuje samotná ID souborů.
#3034 Storage f.internal ukládá náhledy do veřejného úložiště variant
Bezpečnostní chyba CPS Edee
Obrazové varianty storage f.internal (náhledy, motivy prohlížeče souborů, zmenšeniny) se
ukládaly do úložiště variant, takže náhledy interních souborů mohly být dostupné
každému, kdo znal cestu. f.internal bez vlastních pravidel <internal> se nově chová jako
celá neveřejná (<internal pattern="/**"/>): varianty se netvoří, administrace zobrazí místo
miniatury ikonu typu souboru a v náhledu originál. Konfiguraci není potřeba měnit; vlastní pravidla
implicitní nahradí. Po nasazení je potřeba smazat dříve vytvořené varianty pod
/variantedee/internal/ v úložišti variant.
#3031 Fulltext: dotaz bez diakritiky nenajde skloňované tvary (cs, sk, pl, ro)
Fulltext Nová vlastnost
Fulltext přináší volitelné analyzátory czech-sage-prototype, slovak-sage-prototype,
polish-sage-prototype a romanian-sage-prototype. Dotaz zadaný bez diakritiky s nimi najde
i skloňované tvary (panskych najde pánských), což stávající analyzátory nezvládají. Stávající
analyzátory a projekty se nemění; nový analyzátor se zapíná atributem analyzer v konfiguraci
sekce nebo jednotlivých polí. Po přechodu je doporučená plná re-indexace sekce, u polštiny
a rumunštiny je nutná.
#3030 Náhled interních obrázků ve vlastnostech souboru v administraci nefunguje
CPS Edee Oprava chyby
Ve vlastnostech souboru v administraci nově funguje náhled obrázků z neveřejných cest storage: administrace dostane originál, varianta se nevytváří a veřejné kanály dál vrací 404. Neveřejné soubory se v prohlížeči souborů a ve vlastnostech souboru nově označují vlastním stavem a hláškou místo zavádějícího „soubor je v koši nebo vypršela jeho platnost“.
#3028 REST API dokumentace: generate-docs přiřazuje popisy z cizích tříd a ztrácí popisy u polí
Oprava chyby
Maven plugin lib_rest_api_documentation (goal generate-docs) přiřazoval členům třídy popisy
ze shodně pojmenovaných metod nesouvisejících tříd (návratových typů, parametrů) a ztrácel popisy
tříd použitých jako pole. Popisy se nově dědí jen z nadtypů a pole se dokumentují podle typu
prvku, takže vygenerovaná OpenAPI specifikace má správné popisy.
#3026 Synchronizace formulářů v clusteru selhává na archivních stránkách
Oprava chyby Scramjet
U archivovaných nebo nepublikovaných formulářů s náhradní stránkou úloha PublishFormsJob při
každém běhu logovala chybu „There already exists node with normalized id: archived_…“ a změna
finalizační zprávy nebo přesměrovací URL provedená na jiném serveru se projevila až po restartu.
Náhradní stránka se nově při synchronizaci nahradí a změny se propíšou na všechny servery bez
restartu. Oprava je převzatá z 10.17.13.
#3023 Scramjet: nelze stáhnout přílohu v Edee
Oprava chyby Scramjet
Přílohy ScramJet formulářů a další soubory z neveřejných cest storage (<internal pattern="…"/>)
nešly v administraci stáhnout ve výsledcích ani v exportu. Administrace je nově stahuje podle práv
ke storage, veřejné kanály zůstávají zavřené. Kdo kvůli stahování v administraci povolil u neveřejné
cesty allowDirectAccess="true", může tento workaround vrátit.
#3017 Stage REST API: enumerace souborů z f.file podle sekvenčního ID (/api/stages/files, edeeStageFile)
Bezpečnostní chyba CPS Edee Fulltext RESTAPI
Soubory ve storage f.file šlo bez přihlášení vyjmenovat podle sekvenčního ID přes Stage REST API
a GraphQL edeeStageFile. Obecně má storage obsahovat jen veřejná data, ale na projektu se v ní mohl
objevit i jiný obsah, například přílohy formulářů. Storage nově
přijímá pravidla <internal pattern="/slozka/**"/>. Soubory, na které pravidlo míří, se nedají
stáhnout, nedostanou se do Stage, veřejného fulltextu ani sitemap a podle ID je nikdo nenajde.
Atributy allowDirectAccess, allowPublish a allowFulltext jednotlivé kanály znovu povolí.
Vlastnost edee.feature.stage.restApi.fileIdLookup (výchozí true) vypne vyhledávání podle ID ve
Stage REST API u všech souborů. Bez nové konfigurace se nic nemění; kdo ochranu zapne, musí po
nasazení odstranit dříve publikované soubory ze Stage (makro module.stage:publishStorageToStage
nebo publishStorageDirToStage), smazat staré varianty souborů z neveřejných složek a spustit plnou
indexaci fulltextu. Totéž vyšlo v 10.17.12 jako #3019.
#3011 Plná fulltext indexace se na clusteru spouští opakovaně a blokuje ostatní joby
Fulltext JobManager K8s Oprava chyby
Plná fulltextová indexace v clusteru (fulltextIndexClusterFullJob) se po restartu podu
spouštěla znovu a při častých nasazeních nikdy nedoběhla, přičemž blokovala vlákna ostatních jobů.
Další běh se nově plánuje už při startu, po chybě se job neopakuje a na zastavovaném podu
indexace i záloha skončí. Přerušená plná indexace nepřepne živý index na nekompletní kopii
a inkrementální indexace na běžící plnou indexaci nečekají, ale přeskočí se. JobManager k tomu
přináší nový typ jobu PlanAheadJob.
#3007 Zranitelnosti v závislostech společných s řadou 11.0.x
Bezpečnostní chyba Dependency
Knihovny BouncyCastle, MySQL Connector/J, Netty, OpenTelemetry semconv a pdfbox jsou aktualizované na opravné verze, stejně jako v řadě 11.0.x. Jackson se aktualizuje samostatně v rámci #2901. Úprava projektů není potřeba.
#3006 Web feature validuje tělo requestu knihovnou z opuštěného projektu
Bezpečnostní chyba Dependency WebFeature
Validace těla requestu JSON schématem ve web feature store přešla z archivované knihovny
com.github.java-json-tools:json-schema-validator, pro jejíž zranitelnosti už oprava nevyjde,
na udržovanou com.networknt:json-schema-validator. Schémata bez uvedeného $schema se dál
validují podle draft-04, takže se chování projektových schémat nemění. Z aplikace zároveň zmizí
řada tranzitivních závislostí staré knihovny.
#3005 Migrace Atlasu tiše ruší NOT NULL na sloupcích s časovým razítkem
Monitoring Oprava chyby
Migrace tabulek Atlasu (monitoring) na MySQL podle nastavení explicit_defaults_for_timestamp
buď shodila start aplikace, nebo tiše odebrala NOT NULL ze sloupců s časovým razítkem. Opravený
skript i nový patch obnoví původní definice sloupců na obou typech instalací, včetně těch, kde
migrace dříve tiše prošla. Oracle se netýká; úprava projektů není potřeba.
#3003 Lokalizace se pod JBoss/WildFly nenačte
CPS Oprava chyby
Lokalizační bundly hledané skenem adresáře se nově načtou i pod JBoss/WildFly, kde se zdroje z WARu vystavují přes VFS. Projektové přepisy lokalizace modulů zůstávají v platnosti. Na Tomcatu se chování nemění.
#2992 Strom stránek spadne na poškozené stránce s dlouhým názvem
Edee Oprava chyby
Strom stránek v administraci se nově načte i tehdy, když obsahuje poškozenou stránku (chybějící prototyp) se systémovým názvem delším než 30 znaků. Dříve taková stránka shodila načtení celého stromu, takže ji nešlo najít a uklidit do koše.
#2990 Prodpora MySQL 8.4 v rámci produktu
Platforma je ověřená na MySQL 8.4 se stejným výsledkem jako na MySQL 8.0, a to jak na čisté databázi, tak po upgradu databáze z verze 8.0. Úprava projektů není potřeba.
#2986 Aktualizace závislostí s CVE nálezy (FreeMarker, jsoup, BouncyCastle, Netty, MySQL Connector/J, pdfbox, OpenTelemetry semconv)
Bezpečnostní chyba Dependency
Knihovny MySQL Connector/J (CVE-2025-30706), BouncyCastle, Netty, FreeMarker, pdfbox a OpenTelemetry semconv jsou aktualizované na opravné verze. jsoup zůstává na stávající verzi, novější vydání neexistuje a nález se týká části knihovny, kterou platforma nepoužívá. Úprava projektů není potřeba.
#2971 Security policy - retence tabulek historie přihlášení a enumerací
Bezpečnostní politika Nová vlastnost Výkonostní optimalizace
Tabulky historie přihlášení a enumerací (T_*_LOGIN_HISTORY, T_*_ENUM_HISTORY) se nově
pravidelně čistí úlohou modulu registrace, výchozí retence je 90 dní. Záznamy se mažou postupně
po malých dávkách, takže ani první běh nad dosud nečištěnou tabulkou nezatíží databázi jednou
velkou transakcí. Delší retenci nastaví projekt vlastností retentionDays na beanu úlohy,
hodnota 0 nebo menší úklid vypne.
#2970 Security policy - IPDelayPolicy nefunguje: zamrzlá cache a nevyhodnocení na Oracle
Bezpečnostní politika Oprava chyby Oracle
Politika IPDelayPolicy, která zpomaluje přihlašování z IP adres s převahou neúspěšných pokusů,
nově funguje: počty pokusů se správně cachují a obnovují a na Oracle se vyhodnocují. Dříve
politika na Oracle nikdy nezpomalovala a na MySQL po první delší odmlce do restartu přestala
reagovat, přitom při častých pokusech spouštěla náročný dotaz nad historií při každém přihlášení.
Politika je zapnutá ve výchozí konfiguraci registrace, ale pouze jako poslední ochrana, která může
způsobit v konečném důsledku zahlcení serveru.
#2968 fulltext-index-sync: neobnovitelná záloha sekce shodí CPS při startu podu
Fulltext K8s Oprava chyby
Záloha fulltextového indexu do úložiště už nevytvoří neobnovitelný archiv sekce: synchronizační značka se posune až po potvrzeném uložení archivu, archiv se publikuje až kompletní a úklid, souběžná indexace ani zámky už rozpracovanou zálohu nepoškodí. Tím odpadá stav, kdy obnova vadné zálohy jedné sekce při startu podu zablokovala start celé aplikace.
#2967 Stránkovaný listing padá 500 (SQLSyntaxErrorException) při velkém pageNumber – přetečení int ve výpočtu OFFSET
Edee Oprava chyby
Stránkovaný výpis s extrémně velkým číslem stránky z URL (typicky od crawleru nebo z rozbitého odkazu) už nespadne s chybou 500. Posun ve výpisu se omezí na bezpečný rozsah a stránka mimo rozsah se vyhodnotí jako neplatná, takže zafunguje návrat na první stránku. Na Oracle se stejná situace dříve projevovala tiše prázdným výsledkem.
#2966 ConcurrentModificationException při klonování WidgetData (form.core lifecycle)
Edee Oprava chyby
Zpracování formuláře v administraci už ojediněle nepadá na ConcurrentModificationException,
když se data widgetu současně čtou a mění z více vláken. Metody getAllTexts()
a getAllValues() nově vracejí kopii dat místo živého pohledu.
#2965 Deploy na JBoss/WildFly padá na validaci build.tld
CPS Edee Oprava chyby
Z META-INF/tld/build.tld je odstraněný nepoužívaný tag build, který odkazoval na
neexistující třídu. JBoss/WildFly kvůli němu při deployi odmítl platformu nasadit, na Tomcatu
se nic nemění.
#2961 Lokalizace obsahu v Edee
Edee Oprava chyby
Obsahové bloky na objektech modulu (produkt, skupina produktů, kategorie, štítek) šlo dosud vytvořit jen v jednom jazyce a bloky přenesené lokalizací položky seznamu zůstávaly v jazyce originálu, takže je v druhé jazykové mutaci nebylo možné publikovat. Výpis bloků nově nabízí akci Lokalizovat vedle akce Duplikovat a klony se přepnou do cílového jazyka. Nabízené jazyky odpovídají jazykovým mutacím webů — projekt s jediným webem tedy nabídne jediný jazyk.
#2958 Scramjet: informační hláška akce nelze vypnout
Oprava chyby Scramjet
Informační hlášku akce ve ScramJet formuláři jde nově vymazat a akce pak po odeslání žádnou hlášku nezobrazí — u více akcí nad jedním tlačítkem tak stačí jedna společná hláška. Editor formuláře upozorní varováním na prvky, u kterých žádná akce hlášku nezobrazí a zároveň se po odeslání nikam nepřesměrovává, takže návštěvník by nedostal žádnou zpětnou vazbu.
#2957 Předmět e-mailu se v těle zprávy vypisuje bez escapování
Bezpečnostní chyba Mail Scramjet
Předmět potvrzovacího e-mailu se vypisuje i do titulku a nadpisu těla zprávy a hodnoty dosazené
do něj z formuláře se nijak neošetřovaly — kdokoli takový formulář vyplnil, mohl do těla e-mailu
vložit vlastní značky, například odkaz na cizí doménu. Nově se escapují pouze dosazené hodnoty
a jen znaky &, < a >; nakonfigurovaná část předmětu zůstává nedotčená a hlavička Subject
dostává hodnoty bez úprav. Chování lze vypnout property scramjet.mail.escapeSubjectValues.
#2956 Scramjet: potvrzovací e-mail vypisuje HTML tagy místo formátování
Mail Oprava chyby Scramjet
Volby formuláře si nesou formátování z jeho definice a e-mail je vypisoval jako holé značky.
Hodnoty vypisované do e-mailu nově procházejí seznamem povolených značek (b, strong, i, em,
u, br, p, ul, ol, li), vše ostatní včetně atributů a odkazů se zahodí — totéž platí pro
hodnoty vyplněné uživatelem. Ošetřené hodnoty jsou v nové proměnné formDataHtml, původní
:labeledValues zůstává bez značek, takže projektové šablony fungují beze změny.
#2955 Bezpečná náhrada za dbutil.jsp
Bezpečnostní politika Nová vlastnost
Nový volitelný modul dbconsole přidává do administrace databázovou konzoli jako náhradu za
dbutil.jsp: prohlížeč schématu, katalog uložených dotazů a ad-hoc dotazy. Přístup řídí práva
(bez přidělených práv rozhoduje globální právo ORGANIZE, jako dosud u dbutil.jsp), tabulky
s hesly, MFA a remember-me tokeny jsou ve výchozím stavu nepřístupné a zápis je třeba potvrdit
druhým faktorem — kódem z autentikátoru, u uživatelů přihlášených přes SSO opětovným přihlášením
u poskytovatele identity; bez modulu audit konzole zápisy odmítá. Modul se zapíná zvlášť,
typicky jen na administračních nodech (includeIf label="admin"); na projektu s přihlášením přes
SSO je konzole jen pro SSO uživatele a adm/sys/dbutil.jsp tam odmítá cokoli spustit.
#2953 S3 storage: přejmenování/přesun adresáře osiří objekty v S3 — soubory pod adresářem přestanou být čitelné
CPS K8s Oprava chyby
Přejmenování nebo přesun adresáře v S3 storage přepsal jen cesty v databázi a objekty v S3 zůstaly
pod původními klíči, takže soubory pod adresářem sice byly vidět v administraci, ale nešly otevřít.
Přesun adresáře nově přesune i všechny objekty pod ním (nejdřív kopie, pak smazání zdroje, včetně
nastavení ACL u veřejné storage). Opraveno je i přepisování cest potomků: přejmenování /dir už
nezasáhne /dir-other, hluboké stromy nekončí vyčerpáním spojení do databáze a přesun adresáře do
vlastního podadresáře storage odmítne.
#2952 Stage: security modul diagnostiky se registruje mimo životní cyklus svého GUI a pod špatným id
Oprava chyby Stage
Security modul diagnostiky Stage se nově registruje jen tehdy, když je diagnostické GUI opravdu
zapnuté a dostupná administrace. Instance s initDiagnosticGui="false" tak nenechávají v editoru
oprávnění mrtvý cíl a druhá instance stage modulu (customName) už nezastaví start platformy.
Id security modulu se mění ze stageAdmin na stage, aby editor oprávnění zobrazoval lokalizovaný
název; oprávnění přidělená na stageAdmin je po upgradu potřeba přidělit znovu.
#2951 MFA remember-me nefunguje po odhlášení
Oprava chyby RESTAPI Registration
Odhlášení uživatele rušilo i důvěryhodné zařízení pro dvoufázové ověření, takže platforma při
dalším přihlášení znovu vyžadovala druhý faktor. Obě funkce sdílejí jednu tabulku a nově se v ní
rozlišují typem: odhlášení ruší pouze automatické přihlášení, zatímco změna hesla a zapnutí nebo
vypnutí MFA maže jako dosud obojí. Projekt, který si implementuje vlastní RememberMeStorage nebo
RememberMeService, musí doplnit tři nové metody s parametrem typu tokenu.
#2947 SEO metadata: přejmenovat popisky Twitter Card na X (Twitter)
Dokumentace Edee
Pole „Twitter Card titulek" a „Twitter Card popisek" v metadatech stránky se v administraci
i uživatelské dokumentaci nově jmenují „X (Twitter)". Mění se jen popisky — meta tagy twitter:*,
pole REST API, sloupce v databázi i id widgetů zůstávají beze změny.
#2945 S3 upload ukládá torzo — Content-Length z available() po MIME detekci
CPS Edee Oprava chyby
Soubor ukládaný do S3 storage ze síťového streamu — typicky obrázek, který se při importu obsahu
stahuje z externí adresy — se mohl bez jakékoli chyby uložit jen zčásti, například jako useknutý
JPEG. Délka obsahu se nově odvozuje jen ze streamů, u kterých je známá celá; ostatní se nejdřív
uloží do dočasného souboru. Nová property imgproxy.public_url_pattern (seznam masek hostitelů
oddělených čárkou) navíc určí, které adresy jsou imgproxy, aby se obrázky z imgproxy jiného
prostředí nestahovaly jako cizí a neukládaly jako duplikáty.
#2943 Aktualizace URL pro transakční maily
Mail
Odkazy v transakčních e-mailech pro frontend Juan mají nově i německou jazykovou mutaci (registrace, obnova hesla, newsletter, objednávka, sdílené seznamy) a opravené adresy v anglické, polské a rumunské mutaci.
#2940 fulltextindexsync: chybějící base dir v backup storage shodí celý CPS init (first-boot bootstrap deadlock)
Fulltext K8s Oprava chyby
Na čerstvém prostředí, kde ještě neproběhla žádná záloha fulltextového indexu, neexistuje v záložní storage základní adresář a obnova chybějících indexů při startu kvůli tomu shodila celý start CPS — žádný pod nenaběhl, a tak nemohla vzniknout ani první záloha. Chybějící adresář se nyní toleruje stejně jako chybějící záloha: obnova se s varováním v logu přeskočí a pod nastartuje.
#2938 Volání vypnuté externí přihlašovací metody se loguje jako ERROR se stacktrace a vrací HTTP 500
Oprava chyby Registration
Je-li v projektu zapnutý alespoň jeden OAuth poskytovatel, zůstávaly přihlašovací adresy aktivní i pro poskytovatele vypnuté, a požadavek na ně — typicky ze staré záložky — skončil chybou HTTP 500 a záznamem ERROR s výpisem zásobníku. Takový požadavek nově skončí běžnou odpovědí 404 bez chyby v logu.
#2926 Edee upload nijak neřeší když upload selže na ClientAbortException
Edee Oprava chyby
Upload souboru přerušený na straně klienta (výpadek spojení, VPN) se dosud v administraci mohl tvářit jako úspěšný a na serveru se logoval jako ERROR s výpisem zásobníku. Administrace nově přerušený přenos ohlásí chybou u daného souboru, server ho loguje jako varování s uživatelem a cílovou složkou a dočasné soubory přerušeného uploadu po sobě uklidí.
#2924 Základ technického řešení pro živý náhled obsahových bloků
Edee Nová vlastnost UI
Redaktor nově vidí rozpracovaný obsah stránky, obsahových bloků i položek výpisů v náhledu ještě
před uložením — náhled se otevírá jako panel vedle editoru z tlačítka „Náhled" a obnovuje se během
psaní; do CMS databáze se přitom nic nezapisuje. Funkce je ve výchozím stavu vypnutá: zapíná ji
atribut livePreview="true" na modulu preview mode spolu s livePreviewIntegration="true" na
stage modulu. Dokud nejsou zapnuté, produkční render, dosavadní náhled ani assessment se nemění.
#2921 Interpreter výrazů roste do prázdné kolekce při čtení a maskuje skutečnou chybu
Oprava chyby Ramjet
Čtení výrazu nad prázdnou kolekcí (například #widget[x].items[0].id#) dosud nutilo RamJet chybějící
prvek vytvořit — buď skončilo zavádějící chybou „has no getter!", nebo tiše přidalo do kolekce
vymyšlený prvek. Čtení už objekty nemění a index mimo rozsah kolekce vrací prázdnou hodnotu;
volitelné placeholdery ji přijmou, povinné dál končí chybou.
#2919 Edee ui: případné chybové hlášky commandu s dekorátorem DownloadSubmit se ztratí ve skrytém iframu
Edee Oprava chyby
Tlačítka pro stažení souboru v administraci dosud chybovou odpověď commandu zahodila ve skrytém rámu a stažení vypadalo jako úspěšné. Chybové hlášky se nově zobrazí na stránce, případně v chybovém dialogu. Selže-li generování souboru dřív, než se začne odesílat, nestáhne se rozbitý soubor s textem chyby uvnitř, ale zobrazí se chyba.
#2910 Stage menu: aktivní element z produkčního CPS + děti ze stage containeru → 500 na celém webu
Oprava chyby Stage
Menu ze Stage dat (edeeStagePageMenus) už nemíchá dva zdroje stromu stránek. Když aktuální nebo aktivní stránka ve Stage struktuře chybí, celé menu požadavku se sestaví z produkčního stromu, a stránky, které ve Stage nejsou (např. nepublikované), se v menu přeskočí. Jedna nepublikovaná položka v podmenu tak už nevrací HTTP 500 a nerozbije render celého webu. Projekty bez Stage menu se chovají beze změny.
#2901 Aktualizace externích závislosti Jackson, Okhttp
Bezpečnostní chyba Dependency
Aktualizace knihoven s bezpečnostními nálezy: Jackson 2.13.5 → 2.22.2 (mimo jiné CVE-2026-19032 a CVE-2026-68497), OkHttp 4.10.0 → 4.12.0 a Prometheus simpleclient 0.10.0 → 0.16.0. Limit délky jednoho textového řetězce v JSON zůstává na úrovni před Jacksonem 2.15, takže velké hodnoty se parsují jako dřív.
#2891 NPE při porovnání revizí obsahového bloku s vnořenými bloky (layoutBlock)
Edee Oprava chyby
Porovnání dvou revizí obsahového bloku už nepadá, když blok obsahuje vnořený blok nebo štítek. Vazby se mezi revizemi párují podle cíle, takže nezměněná vazba se nehlásí jako odebraná a znovu přidaná, a přidaná nebo odebraná vazba se zobrazí jedním řádkem s názvem cíle. Opraveno i porovnání revizí zdroje stránky, které změny štítků dosud vůbec neukazovalo.
#2877 Bug: kopírování obsahového bloku ven z layout bloku ho skryje
Edee Oprava chyby
Obsahový blok zkopírovaný nebo přesunutý z layout bloku přímo na stránku se na cílové stránce nově zobrazí. Dříve si ponechal vazby na původní stránku a layout blok, takže se dál publikoval pod původní stránkou.
#2849 TMM: prázdná projektová skupina zobrazuje úkoly ze všech projektů
Oprava chyby TMM
Detail projektové skupiny bez přiřazených projektů v TMM zobrazuje prázdný výpis úkolů místo úkolů ze všech projektů instance.
#2846 Autosave v administraci — ukládání přes doménové drafty a snapshot vrstvu
Edee Nová vlastnost UI
Editory v administraci průběžně ukládají rozpracované změny jako koncepty na server, zvlášť pro každého uživatele a entitu. Při znovuotevření neuložené entity se nabídne obnovení konceptu, seznam konceptů je dostupný u revizí včetně porovnání se stavem entity a obsah WYSIWYG editoru se navíc zálohuje lokálně v prohlížeči. Funkce se zapíná modulem <edeeautosavemodule> s elementem <gui namedDefault="edee"/>; tabulku konceptů si modul založí sám při prvním startu a retenci konceptů (výchozí 30 dní) lze nastavit v elementu autosaveConfig. Projekt, který ve své konfiguraci widgetu tinyMce přepisuje plugins nebo toolbar1, musí ponechat plugin edeeAutosave a tlačítko restoredraft. Bez modulu se editory chovají jako dřív.
#2840 Sanitizace záznamů uživatele - odstranění HTML
Bezpečnostní chyba Registration
REST API registrace a hodnocení nově kontrolují, zda strukturovaná pole uživatelských záznamů (jméno, adresa, telefon apod.) neobsahují HTML značky. Ve výchozím režimu markup.validation.mode=report se nález jen zaloguje jako varování a požadavek projde; po přepnutí na markup.validation.mode=enforce v properties projektu se takový požadavek odmítne odpovědí 400. Doporučený postup je nasadit v režimu report, z logu ověřit, že legitimní data nálezy nevyvolávají, a teprve potom přepnout na enforce.
#2814 AI agents a tools v jádru Edee.one
AI/ML Nová vlastnost
Nová rodina modulů AI integrace (ai 1.0.2) přináší nástroje pro práci s obsahem a daty modulů, asistenta v administraci (chat) a MCP servery pro připojení externích AI klientů. Moduly se zapínají v sitemapě: <aimodule/> je základ s registrem nástrojů, <aillmmodule> připojuje jazykový model (klíč se předává z prostředí, nikdy ne v konfiguraci v repozitáři), <aichatmodule> přidává asistenta do administrace a <aimcpmodule> publikuje MCP servery. Asistent i MCP servery jsou ve výchozím stavu vypnuté (ai.chat.enabled=false, ai.mcp.editor.enabled=false, ai.mcp.monitoring.enabled=false) a zapínají se pro konkrétní prostředí. Uživatel může nástroje použít jen s oprávněním na bezpečnostní modul ai pro danou oblast použití, rozlišené na čtení, zápis a destruktivní operace. Každý zápis provedený přes AI i každé odmítnuté nebo neúspěšné volání se zapisuje do auditu.
#2810 TMM: zkrácená synchronizace (only labels) neobnovuje removed flag při zpětném přidání labelu Edee
Oprava chyby TMM TaskManagement
Když se štítek „Edee“ na issue v GitLabu odebere a krátce poté znovu přidá, úkol v TMM se nově obnoví včetně komentářů. Dříve zůstal označený jako smazaný.
#2310 Chyba při spuštění jobu v případě, že neběží EdeeUi modul
Edee JobManager Oprava chyby
Joby (JobManager, mail, registrace) běží i na instanci bez modulu EdeeUI, například na frontendovém podu. Dříve každá událost průběhu jobu skončila chybou v logu a stav běhu se neuklidil.
#1773 SSO mechanizmus pro Edee administraci
Bezpečnostní politika CPS Edee Nová vlastnost
Přihlášení do administrace přes OIDC (Keycloak, ve FG prostředí FG.id) zajišťuje modul lib_oidc. Zapíná se jedinou property security.oidc.login.enabled=true, bez úpravy sitemapy; konfigurace se čte z properties security.oidc.* nebo z proměnných prostředí OIDC_FG_*, tajný klíč klienta má přicházet z trezoru tajemství. Přístup se řídí členstvím ve skupinách IdP (musí být nastaveno právě jedno z allowedGroups nebo groupPrefixes). Přepnutím property na false se tlačítko skryje a SSO endpointy vrací 404. Před nasazením je nutné odstranit lokální účty budoucích SSO uživatelů – lokální účet se stejným jménem SSO přihlášení odmítne – a jeden lokální účet ponechat jako záchranu pro výpadek IdP.
#1179 Implementace nového auditního modulu do Edee
Audit Nová vlastnost
Auditní modul zaznamenává akce uživatelů napříč platformou: úpravy a publikaci stránek, položek, zdrojů a obsahových bloků, workflow, správu oprávnění, taxonomii, odkazy, komentáře a hromadné operace, dále akce v mailingu, JobManageru, ScramJet formulářích, přesměrováních a registraci. Záznamy jsou v administraci auditního modulu (<auditmodule> s <gui namedDefault="edee"/>) a mažou se po 1095 dnech, lhůtu lze změnit v auditConfig/deleteRecordsOlderThanDays. Zápis akcí v Edee zapíná property edee.audit.enabled=true (výchozí false). Údaje o osobách se v záznamech mailingu ukládají v minimalizované podobě.
#402 Security policy - doplnění indexů
Bezpečnostní politika
Tabulky historie přihlášení, změn hesel a enumerací bezpečnostní politiky dostaly indexy odpovídající dotazům, které běží při každém přihlášení; indexy nahrazené novými se odstraní. Schéma se upraví automaticky při startu aplikace (patch 7.2.4, MySQL i Oracle).
#303 Antivirová kontrola pro uploadované soubory
Bezpečnostní politika CPS Kritická změna
Nahrávaný obsah lze kontrolovat antivirem ClamAV (clamd) na všech zápisových cestách – administrace, REST API, formuláře, WebDAV, rozbalované archivy i aktualizace obsahu existujícího souboru – a to ještě před zápisem do úložiště; soubor s nálezem se neuloží a upload skončí odpovědí 422. Kontrolu zapíná upload akce <uploadaction method="virusscan"/> v storages.xml spolu s clamav.enabled=true (výchozí false, do zapnutí se nic nemění). Při výpadku antiviru se obsah ve výchozím nastavení propustí (clamav.failOpen=true), stav kontroly se u souboru zaznamená a obsah lze dodatečně zkontrolovat úlohou v JobManageru, která ve výchozím stavu nález jen loguje; výpadek je vidět v probe /probes/clamdResponding a v metrikách. Kritická změna: přílohy úkolů v TMM se nově ukládají přes standardní upload do úložiště, takže na ně působí uploadsettings (limit velikosti, povolené přípony) i všechny další upload akce nakonfigurované na daném úložišti – před nasazením je potřeba zkontrolovat konfiguraci úložiště příloh TMM.
