Merge pull request 'feat(lotus): accept decorations from chat.lotusguild.org (matrix #22)' (#56) from feat/decorations-origin into lotus
CI / Build embedded bundle (push) Canceled after 1m46s
CI / Publish to Gitea npm registry (push) Canceled after 0s

This commit was merged in pull request #56.
This commit is contained in:
2026-10-19 12:40:07 -04:00
2 changed files with 34 additions and 0 deletions
+30
View File
@@ -83,6 +83,36 @@ test("[lotus #28] safeImageUrl only accepts the pinned decoration CDN origin (or
stop();
});
test("[matrix #22] both the new decoration host and the old Nextcloud one are accepted", () => {
const stop = startLotusDecorations();
const { result } = renderHook(() => useLotusDecoration("@alice:example.org"));
pushDecorations({
"@alice:example.org":
"https://chat.lotusguild.org/decorations/joystick.png",
});
expect(result.current).toBe(
"https://chat.lotusguild.org/decorations/joystick.png",
);
pushDecorations({
"@alice:example.org":
"https://drive.lotusguild.org/public.php/dav/files/x/cinny-decorations/joystick.png",
});
expect(result.current).toBe(
"https://drive.lotusguild.org/public.php/dav/files/x/cinny-decorations/joystick.png",
);
// A look-alike subdomain is a different origin.
pushDecorations({
"@alice:example.org":
"https://chat.lotusguild.org.evil.example/joystick.png",
});
expect(result.current).toBeUndefined();
stop();
});
test("[lotus #17] the roster survives a handler remount within the same page session", () => {
const stop1 = startLotusDecorations();
pushDecorations({
+4
View File
@@ -45,7 +45,11 @@ export function useLotusDecoration(userId: string): string | undefined {
// to the actual decoration CDN origin(s) — cinny's `DECORATION_CDN`
// (`avatarDecorations.ts`) — plus `blob:`, which EC itself may use for local
// previews. Exported so a future CDN move is a one-line edit here.
//
// matrix #22: decorations moved off Nextcloud to chat.lotusguild.org/decorations
// (first entry). drive.lotusguild.org stays until no host build points there.
export const ALLOWED_DECORATION_ORIGINS: readonly string[] = [
"https://chat.lotusguild.org",
"https://drive.lotusguild.org",
];