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 (