Repository navigation
Show the workspace's own footer links to its members - #1052
Merged
Merged
Conversation
Admins save footer links per workspace (org_settings), but the footer read only the instance-wide list from the public route, so on Cloud the links a workspace admin saved never appeared. A new GET /api/settings/footer-links (any signed-in member) returns the caller's workspace links with the instance-wide ones as fallback; the footer uses it when signed in, falls back to the public list on error, and reloads after an admin saves.
The links a workspace admin saves are now shown on the app's own origin to every member of that workspace, so the URL is limited to web and mail links on save (no javascript:, data: or other schemes), and the footer skips any link saved before this check.
helpcodeai
enabled auto-merge (squash)
October 12, 2026 15:59
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Workspace admins save footer links under Settings → Administration.
PUT /api/admin/settings/footer-linksstores them in the workspace'sorg_settings. The footer, though, only readGET /api/site-settings/footer-links, a public route that returns the instance-widesite_settingslist. On Cloud every workspace has its own admin, so the links an admin saved never appeared anywhere. I found this while checking what we can tell a prospect about branding (12 Oct).Changes
SiteSettingsMemberControllerwithGET /api/settings/footer-links.OrgSettingsService.getFooterLinks(orgId): the workspace's links, falling back to the instance-wide links as before.[]when the token carries no workspace.amcp:footer-links-changed, so the footer reloads without a page refresh.https://,http://ormailto:(@MatchesonFooterLinkDto.url), and the footer skips any other scheme saved before this check. Production check on 12 Oct: one workspace has footer links, and none use another scheme.Tenant isolation
JwtStrategy.validatere-reads the user's active membership from the database, and the endpoint takes no org parameter, so a member can only ever read their own workspace's links.Cloud vs self-hosted
Testing
site-settings.controller.spec.ts:[]when there's no workspace;javascript:,data:, relative andftp:.tests/e2e/footer-links.spec.ts:javascript:link saved earlier is not rendered;Commands run:
packages/backend:npx tsc --noEmit -p tsconfig.json: OKnpx jest src/settings: 646 passednpx eslinton the changed files: cleanpackages/frontend:npx tsc --noEmit -p tsconfig.json: OKnpx eslinton the changed files: 0 errors, 1 warningnpx playwright test tests/e2e/footer-links.spec.ts: 2 passedNot merged or deployed.