import json import re import subprocess from html.parser import HTMLParser from pathlib import Path from urllib.parse import urljoin FRONTEND = Path(__file__).parent.parent / "frontend" RENDERER = FRONTEND / "markdown.js" def render_markdown(payload): script = ( f"const render = require({json.dumps(str(RENDERER))});" f"process.stdout.write(render({json.dumps(payload)}));" ) return subprocess.run( ["node", "-e", script], check=True, capture_output=True, text=True, ).stdout class ScriptSourceParser(HTMLParser): def __init__(self): super().__init__() self.sources = [] def handle_starttag(self, tag, attrs): if tag == "script": source = dict(attrs).get("src") if source: self.sources.append(source) def test_markdown_renderer_escapes_raw_html_before_rendering_heading(): payload = "# " script = ( f"const render = require({json.dumps(str(RENDERER))});" f"process.stdout.write(render({json.dumps(payload)}));" ) result = subprocess.run( ["node", "-e", script], check=True, capture_output=True, text=True, ) assert result.stdout == ( "

<img src=x onerror=alert(document.domain)>

" ) def test_markdown_script_resolves_inside_dashboard_subpath(): parser = ScriptSourceParser() parser.feed((FRONTEND / "index.html").read_text()) markdown_source = next( source for source in parser.sources if source.endswith("markdown.js") ) assert urljoin( "https://forge.alexanderwhitestone.com/dashboard/", markdown_source ) == "https://forge.alexanderwhitestone.com/dashboard/static/markdown.js" def test_markdown_renderer_preserves_mobile_reading_structure(): rendered = render_markdown( "## Plan\n\n> Ship this\n\n- [x] Tested\n- [ ] Released\n\n" "```python\nprint('ready')\n```" ) assert rendered == ( "

Plan

Ship this

" '' '
print('ready')
' ) def test_markdown_renderer_allows_only_safe_links_and_keeps_html_inert(): rendered = render_markdown( "[Forge](https://forge.example/work?q=1&safe=yes) " "[relative](/git/org/repo/issues/1) " "[attack](javascript:alert(1)) " ) assert ( 'Forge' in rendered ) assert ( 'relative' in rendered ) assert "javascript:" not in rendered assert "]*\bid="{body_id}"[^>]*>', html) assert body_tag assert "markdown-content" in body_tag.group(0) assert ".markdown-content { min-width:0; max-width:100%; overflow-wrap:anywhere;" in css assert ".markdown-content pre { max-width:100%; overflow-x:auto;" in css assert ".markdown-content a { min-height:44px;" in css assert "stackchain-dashboard-shell-v42" in worker