From 09492a5fdc76325dfb5669d125efd3275d92b53c Mon Sep 17 00:00:00 2001 From: CODEX Date: Tue, 23 Jun 2026 00:16:06 +0300 Subject: [PATCH] Promote authenticated BIM share viewers --- frontend/dcViewer.js | 10 +++++++++- frontend/index.html | 2 +- frontend/src/ui/settingsMenu.js | 11 +++++++---- server/index.js | 9 +++++++-- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/frontend/dcViewer.js b/frontend/dcViewer.js index f009d5a..0d97570 100644 --- a/frontend/dcViewer.js +++ b/frontend/dcViewer.js @@ -4,7 +4,7 @@ const SDK_URL = "./lib/dc-camera-context.es.js?v=3"; import { createLogo } from "./src/ui/logo.js"; import { applyToolbarVars } from "./src/ui/toolbar.js?v=3"; import { createTemplatesMenu } from "./src/ui/templatesMenu.js?v=3"; -import { createSettingsMenu } from "./src/ui/settingsMenu.js?v=14"; +import { createSettingsMenu } from "./src/ui/settingsMenu.js?v=15"; import { createMeasurementModal } from "./src/ui/measurementModal.js"; import { createGlassSelect } from "./src/ui/glassSelect.js"; import { createColorControl } from "./src/ui/controls/color.js"; @@ -1774,6 +1774,14 @@ const initializeRuntimeMode = async () => { console.warn("BIM session status unavailable", err); } + if (shareToken) { + const authenticatedShare = runtimeSessionInfo.authenticated === true || + startupSharePayload?.authenticated === true || + startupSharePayload?.mode === "standard" || + startupSharePayload?.readonly === false; + viewerMode = authenticatedShare ? "standard" : "guest"; + } + applyRuntimeMode(); }; diff --git a/frontend/index.html b/frontend/index.html index de4e331..077139b 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -651,6 +651,6 @@ - + diff --git a/frontend/src/ui/settingsMenu.js b/frontend/src/ui/settingsMenu.js index 9d0471b..6d1a46f 100644 --- a/frontend/src/ui/settingsMenu.js +++ b/frontend/src/ui/settingsMenu.js @@ -76,10 +76,13 @@ const isSharedViewerPath = () => ( typeof window !== "undefined" && /^\/share\/[^/]+\/?$/.test(window.location.pathname || "") ); -const isReadonlySettingsContext = () => ( - isSharedViewerPath() || - (typeof document !== "undefined" && document.body?.dataset?.viewerMode === "guest") -); +const isReadonlySettingsContext = () => { + if (typeof document !== "undefined") { + const mode = document.body?.dataset?.viewerMode; + if (mode) return mode === "guest"; + } + return isSharedViewerPath(); +}; const projectSettings = typeof window !== "undefined" && window.__BIMDC_THEME__ ? { ...defaultSettings, ...window.__BIMDC_THEME__ } : { ...defaultSettings }; diff --git a/server/index.js b/server/index.js index f3b34d4..ec736be 100644 --- a/server/index.js +++ b/server/index.js @@ -1531,10 +1531,15 @@ const handleGetShare = async (req, res, token) => { sendText(res, 404, "Share not found"); return; } + const session = getCurrentBimSession(req); + const authenticated = !!session; sendJSON(res, 200, { ok: true, - mode: "guest", - readonly: true, + mode: authenticated ? "standard" : "guest", + readonly: !authenticated, + authenticated, + canShare: !BIM_AUTH_REQUIRED || authenticated, + user: session?.user || null, viewer: { src: publicUrlForUploadSrc(req, share.src), settingsSrc: publicUrlForUploadSrc(req, share.settingsSrc || share.src),