diff --git a/packages/web/src/javascripts/Application/Application.ts b/packages/web/src/javascripts/Application/Application.ts index 37f011528..2d8f262b4 100644 --- a/packages/web/src/javascripts/Application/Application.ts +++ b/packages/web/src/javascripts/Application/Application.ts @@ -20,6 +20,7 @@ import { MobileDeviceInterface, MobileUnlockTiming, InternalEventBus, + DecryptedItem, } from '@standardnotes/snjs' import { makeObservable, observable } from 'mobx' import { PanelResizedData } from '@/Types/PanelResizedData' @@ -308,4 +309,12 @@ export class WebApplication extends SNApplication implements WebApplicationInter } return } + + isAuthorizedToRenderItem(item: DecryptedItem): boolean { + if (item.protected && this.hasProtectionSources()) { + return this.hasUnprotectedAccessSession() + } + + return true + } } diff --git a/packages/web/src/javascripts/Components/FilePreview/FilePreview.tsx b/packages/web/src/javascripts/Components/FilePreview/FilePreview.tsx index aa771ec21..504c88dc8 100644 --- a/packages/web/src/javascripts/Components/FilePreview/FilePreview.tsx +++ b/packages/web/src/javascripts/Components/FilePreview/FilePreview.tsx @@ -57,6 +57,10 @@ const FilePreview = ({ file, application }: Props) => { void downloadFileForPreview() }, [application.files, downloadedBytes, file, isFilePreviewable]) + if (!application.isAuthorizedToRenderItem(file)) { + return null + } + return isDownloading ? (
diff --git a/packages/web/src/javascripts/Components/FilePreview/FilePreviewModal.tsx b/packages/web/src/javascripts/Components/FilePreview/FilePreviewModal.tsx index cc84b9a6e..678e8c06a 100644 --- a/packages/web/src/javascripts/Components/FilePreview/FilePreviewModal.tsx +++ b/packages/web/src/javascripts/Components/FilePreview/FilePreviewModal.tsx @@ -22,6 +22,10 @@ const FilePreviewModal: FunctionComponent = observer(({ application, view return null } + if (!application.isAuthorizedToRenderItem(currentFile)) { + return null + } + const [showFileInfoPanel, setShowFileInfoPanel] = useState(false) const closeButtonRef = useRef(null) diff --git a/packages/web/src/javascripts/Components/NoteView/NoteView.tsx b/packages/web/src/javascripts/Components/NoteView/NoteView.tsx index 57886fe1f..e5a666463 100644 --- a/packages/web/src/javascripts/Components/NoteView/NoteView.tsx +++ b/packages/web/src/javascripts/Components/NoteView/NoteView.tsx @@ -234,7 +234,9 @@ class NoteView extends PureComponent { this.reloadEditorComponent().catch(console.error) this.reloadStackComponents().catch(console.error) - const showProtectedWarning = this.note.protected && !this.application.hasProtectionSources() + const showProtectedWarning = + this.note.protected && + (!this.application.hasProtectionSources() || !this.application.hasUnprotectedAccessSession()) this.setShowProtectedOverlay(showProtectedWarning) this.reloadPreferences().catch(console.error) @@ -935,7 +937,7 @@ class NoteView extends PureComponent { } override render() { - if (this.state.showProtectedWarning) { + if (this.state.showProtectedWarning || !this.application.isAuthorizedToRenderItem(this.note)) { return ( void @@ -267,6 +268,11 @@ const NotesOptions = ({ historyModalController.openModal(notesController.firstSelectedNote) }, [historyModalController, notesController.firstSelectedNote]) + const unauthorized = notes.some((note) => !application.isAuthorizedToRenderItem(note)) + if (unauthorized) { + return + } + return ( <> {notes.length === 1 && ( diff --git a/packages/web/src/javascripts/Components/ProtectedItemOverlay/ProtectedUnauthorizedLabel.tsx b/packages/web/src/javascripts/Components/ProtectedItemOverlay/ProtectedUnauthorizedLabel.tsx new file mode 100644 index 000000000..784e35a04 --- /dev/null +++ b/packages/web/src/javascripts/Components/ProtectedItemOverlay/ProtectedUnauthorizedLabel.tsx @@ -0,0 +1,5 @@ +const ProtectedUnauthorizedLabel = () => { + return
This item is protected. Please authorize first.
+} + +export default ProtectedUnauthorizedLabel diff --git a/packages/web/src/javascripts/Components/RevisionHistoryModal/RevisionHistoryModal.tsx b/packages/web/src/javascripts/Components/RevisionHistoryModal/RevisionHistoryModal.tsx index 6133f5931..15b2096a4 100644 --- a/packages/web/src/javascripts/Components/RevisionHistoryModal/RevisionHistoryModal.tsx +++ b/packages/web/src/javascripts/Components/RevisionHistoryModal/RevisionHistoryModal.tsx @@ -37,6 +37,10 @@ const RevisionHistoryModal: FunctionComponent = ({ return null } + if (!application.isAuthorizedToRenderItem(historyModalController.note)) { + return null + } + return (