-
released this
2026-07-27 08:38:11 +00:00 | 0 commits to main since this releaseFixed
web/templates/*.jinjamissing from distribution wheel — addedweb/templates/*.jinjato[tool.setuptools.package-data]inpyproject.toml. After a fresh install from PyPI the admin panel returned 500 becauseJinja2Templatescould not find any templates.- Duplicate
script-src/style-srcin admin CSP — the nonce-augmented directives used to be appended after the base ones, so the browser (which honours the first occurrence) ignored the nonce and blocked every inline JS/CSS. They are now replaced:script-srcandstyle-srcare filtered out of the base CSP and the nonce versions are appended as the only occurrence. - CSP nonce generated after template rendering —
request.state.csp_nonceis now set inGlobalSecurityHeadersMiddleware.dispatch()beforecall_next(request)so templates see it during rendering. Previously it was generated afterwards, socsp_noncewas an empty string in the template context and every inline script was blocked. - Missing
nonceattribute on<script>inlist.html.jinjaandsettings.html.jinja— inline scripts in these templates now carrynonce="{{ csp_nonce | default('') }}"so they match the nonce in the CSP header. - Bootstrap
admin.password_hashignored whenusers.tomlis empty —Users.allnow falls back to the bootstrap admin even whenusers.tomlexists but is empty (e.g. right aftervolumen init, which creates the file viaPath.touch()). Previously the first login after a clean install failed. admin_contextdid not passusers_exist— the login page showed the “No users configured” warning even when authentication worked. Added"users_exist": users_obj.anyto the admin template context.- Inline
style="..."blocked by strict admin CSP — the admin templates used inlinestyle="..."attributes (and onecard.style.display = ...JS assignment) which the new strictstyle-src 'self' 'nonce-…'directive blocks. Replaced every offending attribute with a utility class in the<style>block (page-head-actions,form-options,form-inline,form-hidden,form-spaced,flex-spacer,btn-static,btn-danger-text,text-fg-strong,badge-inline,h3-section,mt-3,is-hidden); the dynamicbackground-image: url(...)on.post-covernow flows through a--cover-urlcustom property (style="--cover-url: …") which CSP3 does not treat as an inline style application. /favicon.icoreturned 404 — browsers auto-request/favicon.icoeven when the page declares an explicit<link rel="icon">. Added a tiny route increate_app()that serves the packagedweb/static/volumen-icon.svgwithContent-Type: image/svg+xmland a 1-dayCache-Control; added the matching<link rel="icon" type="image/svg+xml" href="/favicon.ico">to the admin layout so the tab gets the volumen icon instead of a generic placeholder.- Sidebar version label rendered as bare
v—admin_contextdid not include the packageVERSION, so the footer<div class="sidebar-version">v{{ version }}</div>rendered as justvwith no number behind it. Added"version": VERSIONto the context.
Downloads