checkPlugin: flag absolute /static/plugins/ asset paths in templates (#5203)#7535
checkPlugin: flag absolute /static/plugins/ asset paths in templates (#5203)#7535JohnMcLear merged 2 commits intodevelopfrom
Conversation
Plugin templates that reference assets as \`/static/plugins/...\` (absolute) silently break any Etherpad instance hosted behind a reverse proxy at a sub-path — the browser resolves the path against the domain root instead of the proxy prefix and the asset 404s. The right form is \`../static/plugins/...\` (relative), which ep_embedmedia PR #4 fixed manually and which #5203 asked for as a mechanical check. Walk \`templates/\` and \`static/\` of the plugin, scan every \`*.ejs\` / \`*.html\` for \`/static/plugins/\` not preceded by a URL scheme, dot, or word char (so \`https://host/static/plugins/...\` and already-correct \`../static/plugins/...\` stay untouched). Warn normally; in \`autofix\` mode rewrite to the relative form in place. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Review Summary by QodoAdd linting for absolute plugin asset paths in templates
WalkthroughsDescription• Add linting check for absolute /static/plugins/ paths in plugin templates • Scan templates/ and static/ directories for .ejs and .html files • Warn when absolute paths found; suggest relative ../static/plugins/ form • Support autofix mode to rewrite paths in place Diagramflowchart LR
A["Plugin templates/static dirs"] -- "scan .ejs/.html files" --> B["Regex check for /static/plugins/"]
B -- "match found" --> C["Warn with fix suggestion"]
C -- "autofix enabled" --> D["Rewrite to ../static/plugins/"]
B -- "no match" --> E["Continue"]
File Changes1. bin/plugins/checkPlugin.ts
|
Code Review by Qodo
1.
|
Addresses Qodo review: HTML served from a plugin's static/ directory resolves against /static/plugins/<plugin>/static/..., so rewriting /static/plugins/... to ../static/plugins/... yields a broken URL. Keep scanning static/ for warnings but no longer rewrite, and clarify the remediation guidance to point at the file's own location. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Closes #5203.
Plugin templates that reference assets with absolute paths like
`/static/plugins/ep_foo/x.css` silently break any Etherpad instance
hosted behind a reverse proxy at a sub-path (e.g.
https://example.com/etherpad/pad\) — the browser resolves the path against the domain root instead of the proxy prefix and the asset 404s. The correct form is `../static/plugins/...` (relative). [ep_embedmedia#4](https://github.com/ether/ep_embedmedia/pull/4/files) fixed one plugin manually; #5203 asked for a mechanical check.Summary
\\"https://host/static/plugins/...\\"and already-correct `../static/plugins/...` don't match.Test plan