Fix tenant isolation and authentication for Node-RED dashboards - #14
Conversation
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0a8cb0f106
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b7fee1587d
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
Problem and change
Dashboard URLs bypassed tenant authentication and fell back to the default Node-RED runtime, so opening a page from a selected tenant could show a legacy/global dashboard. Public tenant webhook aliases could also reach dashboard pages and Socket.IO.
/dash/<page-id>links to that tenant's configured page URL, return 404 for missing IDs, and mark stale synced entities unavailable without deleting assignments or notes.Compatibility and rollout
Deploy the proxy, server and Node-RED manager together. Intentionally public HTTP-in callers must use
/in/public/<tenant-slug>/<flow-path>; unmatched root paths now require authentication. Browser cookies are not forwarded to tenant runtimes. FlowFuse page names remain configurable; authorization protects access. Classic Dashboard tabs are not imported as FlowFuse pages.Android's separate display-session cookie now covers configured same-host paths while server checks enforce current page assignments. Android dynamic Socket.IO remains denied until per-display channel authorization is available.
Validation