"""
Regressionstests fuer die serverseitig gesetzte Content-Security-Policy
(app/main.py: script-src 'self'; style-src 'self'; kein 'unsafe-inline',
kein Nonce/Hash).
Hintergrund/Bug: templates/login.html, templates/terminal.html und
templates/rdp.html enthielten frueher Inline-style="..."-Attribute sowie
ein Inline--Snippet. Chrome
(und andere CSP-konforme Browser) blockieren *jede* Aenderung des
style-Attributs -- auch per element.style.xyz = ... aus externem JS
gesetzte -- sowie jedes -Bloecke inkl. ihrer Attribute und ihres
# Inhalts, um zwischen externen (", re.IGNORECASE | re.DOTALL)
def _assert_no_inline_style(html: str, page: str) -> None:
match = _INLINE_STYLE_ATTR_RE.search(html)
assert match is None, (
f"{page}: gefundenes Inline-style-Attribut verletzt die CSP "
f"(style-src 'self', kein 'unsafe-inline'): {html[match.start():match.start()+60]!r}"
if match else ""
)
def _assert_no_inline_script(html: str, page: str) -> None:
for attrs, body in _SCRIPT_TAG_RE.findall(html):
has_src = re.search(r"\bsrc\s*=", attrs, re.IGNORECASE) is not None
if not has_src and body.strip():
pytest.fail(
f"{page}: