Procházet zdrojové kódy

deprecate: on-disk encryption

Why?
1. there're still a lot issues on it and there's no resource to
maintain and develop it considering we need to support it on all the
platforms.
2. it creates more bugs with Logseq Sync.
Tienson Qin před 3 roky
rodič
revize
2dfac3d774

+ 0 - 2
deps/db/src/logseq/db/schema.cljs

@@ -9,8 +9,6 @@
    :ast/version     {}
    :db/type         {}
    :db/ident        {:db/unique :db.unique/identity}
-   :db/encrypted?    {}
-   :db/encryption-keys {}
 
    :recent/pages {}
 

+ 0 - 131
src/main/frontend/components/encryption.cljs

@@ -1,56 +1,15 @@
 (ns frontend.components.encryption
   (:require [clojure.string :as string]
             [frontend.context.i18n :refer [t]]
-            [frontend.encrypt :as encrypt]
-            [frontend.handler.metadata :as metadata-handler]
             [frontend.handler.notification :as notification]
             [frontend.fs.sync :as sync]
             [frontend.state :as state]
             [frontend.ui :as ui]
             [frontend.util :as util]
             [frontend.config :as config]
-            [promesa.core :as p]
             [cljs.core.async :as async]
             [rum.core :as rum]))
 
-(rum/defcs encryption-dialog-inner <
-  (rum/local false ::reveal-secret-phrase?)
-  [state repo-url close-fn]
-  (let [reveal-secret-phrase? (get state ::reveal-secret-phrase?)
-        public-key (encrypt/get-public-key repo-url)
-        private-key (encrypt/get-secret-key repo-url)]
-    [:div
-     [:div.sm:flex.sm:items-start
-      [:div.mt-3.text-center.sm:mt-0.sm:text-left
-       [:h3#modal-headline.text-lg.leading-6.font-medium
-        "This graph is encrypted with " [:a {:href "https://age-encryption.org/" :target "_blank" :rel "noopener"} "age-encryption.org/v1"]]]]
-
-     [:div.mt-1
-      [:div.max-w-2xl.rounded-md.shadow-sm.sm:max-w-xl
-       [:div.cursor-pointer.block.w-full.rounded-sm.p-2
-        {:on-click (fn []
-                     (when (not @reveal-secret-phrase?)
-                       (reset! reveal-secret-phrase? true)))}
-        [:div.font-medium "Public Key:"]
-        [:div.font-mono.select-all.break-all public-key]
-        (if @reveal-secret-phrase?
-          [:div
-           [:div.mt-1.font-medium "Private Key:"]
-           [:div.font-mono.select-all.break-all private-key]]
-          [:div.underline "click to view the private key"])]]]
-
-     [:div.mt-5.sm:mt-4.sm:flex.sm:flex-row-reverse
-      [:span.mt-3.flex.w-full.rounded-md.shadow-sm.sm:mt-0.sm:w-auto
-       [:button.inline-flex.justify-center.w-full.rounded-md.border.border-gray-300.px-4.py-2.bg-white.text-base.leading-6.font-medium.text-gray-700.shadow-sm.hover:text-gray-500.focus:outline-none.focus:border-blue-300.focus:shadow-outline-blue.transition.ease-in-out.duration-150.sm:text-sm.sm:leading-5
-        {:type "button"
-         :on-click close-fn}
-        (t :close)]]]]))
-
-(defn encryption-dialog
-  [repo-url]
-  (fn [close-fn]
-    (encryption-dialog-inner repo-url close-fn)))
-
 (rum/defc show-password-cp
   [*show-password?]
   [:div.flex.flex-row.items-center
@@ -101,12 +60,6 @@
 
               :else
               (case type
-                :local
-                (p/let [keys                (encrypt/generate-key-pair-and-save! repo-url)
-                        db-encrypted-secret (encrypt/encrypt-with-passphrase value keys)]
-                  (metadata-handler/set-db-encrypted-secret! db-encrypted-secret)
-                  (close-fn true))
-
                 (:create-pwd-remote :input-pwd-remote)
                 (do
                   (state/set-state! [:ui/loading? :set-graph-password] true)
@@ -286,87 +239,3 @@
                             (close-fn'))
                        close-fn')]
        (input-password-inner repo-url close-fn' opts)))))
-
-(rum/defcs encryption-setup-dialog-inner
-  [state repo-url close-fn]
-  [:div
-   [:div.sm:flex.sm:items-start
-    [:div.mt-3.text-center.sm:mt-0.sm:text-left
-     [:h3#modal-headline.text-lg.leading-6.font-medium
-      "Do you want to create an encrypted graph?"]]]
-
-   [:div.mt-5.sm:mt-4.sm:flex.sm:flex-row-reverse
-    [:span.flex.w-full.rounded-md.shadow-sm.sm:ml-3.sm:w-auto
-     [:button.inline-flex.justify-center.w-full.rounded-md.border.border-transparent.px-4.py-2.bg-indigo-600.text-base.leading-6.font-medium.text-white.shadow-sm.hover:bg-indigo-500.focus:outline-none.focus:border-indigo-700.focus:shadow-outline-indigo.transition.ease-in-out.duration-150.sm:text-sm.sm:leading-5
-      {:type "button"
-       :on-click (fn []
-                   (state/set-modal!
-                    (input-password repo-url close-fn)
-                    {:center? true :close-btn? false}))}
-      (t :yes)]]
-    [:span.mt-3.flex.w-full.rounded-md.shadow-sm.sm:mt-0.sm:w-auto
-     [:button.inline-flex.justify-center.w-full.rounded-md.border.border-gray-300.px-4.py-2.bg-white.text-base.leading-6.font-medium.text-gray-700.shadow-sm.hover:text-gray-500.focus:outline-none.focus:border-blue-300.focus:shadow-outline-blue.transition.ease-in-out.duration-150.sm:text-sm.sm:leading-5
-      {:type "button"
-       :on-click (fn [] (close-fn false))}
-      (t :no)]]]])
-
-(defn encryption-setup-dialog
-  [repo-url close-fn]
-  (fn [close-modal-fn]
-    (let [close-fn (fn [encrypted?]
-                     (close-fn encrypted?)
-                     (close-modal-fn))]
-      (encryption-setup-dialog-inner repo-url close-fn))))
-
-(rum/defcs encryption-input-secret-inner <
-  (rum/local "" ::secret)
-  (rum/local false ::loading)
-  (rum/local false ::show-password?)
-  [state _repo-url db-encrypted-secret close-fn]
-  (let [secret (::secret state)
-        loading (::loading state)
-        *show-password? (::show-password? state)
-        on-click-fn (fn []
-                      (reset! loading true)
-                      (let [value @secret]
-                        (when-not (string/blank? value) ; TODO: length or other checks
-                          (let [repo (state/get-current-repo)]
-                            (p/do!
-                             (-> (encrypt/decrypt-with-passphrase value db-encrypted-secret)
-                                 (p/then (fn [keys]
-                                           (encrypt/save-key-pair! repo keys)
-                                           (close-fn true)
-                                           (state/set-state! :encryption/graph-parsing? false)))
-                                 (p/catch #(notification/show! "The password is not matched." :warning true))
-                                 (p/finally #(reset! loading false))))))))]
-    [:div
-     [:div.sm:flex.sm:items-start
-      [:div.mt-3.text-center.sm:mt-0.sm:text-left
-       [:h3#modal-headline.text-lg.leading-6.font-medium
-        "Enter your password"]]]
-
-     [:input.form-input.block.w-full.sm:text-sm.sm:leading-5.my-2
-      {:type (if @*show-password? "text" "password")
-       :auto-focus true
-       :on-change (fn [e]
-                    (reset! secret (util/evalue e)))
-       :on-key-down (fn [e]
-                      (when (= (.-key e) "Enter")
-                        (on-click-fn)))}]
-
-     (show-password-cp *show-password?)
-
-     [:div.mt-5.sm:mt-4.sm:flex.sm:flex-row-reverse
-      [:span.flex.w-full.rounded-md.shadow-sm.sm:ml-3.sm:w-auto
-       [:button.inline-flex.justify-center.w-full.rounded-md.border.border-transparent.px-4.py-2.bg-indigo-600.text-base.leading-6.font-medium.text-white.shadow-sm.hover:bg-indigo-500.focus:outline-none.focus:border-indigo-700.focus:shadow-outline-indigo.transition.ease-in-out.duration-150.sm:text-sm.sm:leading-5
-        {:type "button"
-         :on-click on-click-fn}
-        (if @loading (ui/loading "Decrypting") "Decrypt")]]]]))
-
-(defn encryption-input-secret-dialog
-  [repo-url db-encrypted-secret close-fn]
-  (fn [close-modal-fn]
-    (let [close-fn (fn [encrypted?]
-                     (close-fn encrypted?)
-                     (close-modal-fn))]
-      (encryption-input-secret-inner repo-url db-encrypted-secret close-fn))))

+ 0 - 10
src/main/frontend/components/repo.cljs

@@ -17,8 +17,6 @@
             [promesa.core :as p]
             [electron.ipc :as ipc]
             [goog.object :as gobj]
-            [frontend.components.encryption :as encryption]
-            [frontend.encrypt :as encrypt]
             [cljs.core.async :as async :refer [go <!]]
             [frontend.handler.file-sync :as file-sync]
             [reitit.frontend.easy :as rfe]))
@@ -60,14 +58,6 @@
                                      (state/pub-event! [:graph/switch url])))
 
      [:div.controls
-      (when (encrypt/encrypted-db? url)
-        [:a.control {:title    "Show encryption information about this graph"
-                     :on-click (fn []
-                                 (if remote?
-                                   (state/pub-event! [:modal/remote-encryption-input-pw-dialog url repo])
-                                   (state/set-modal! (encryption/encryption-dialog url))))}
-         "🔐"])
-
       (let [loading? (state/sub [:ui/loading? :remove/remote-graph GraphUUID])]
         [:div.flex.flex-row.items-center
          (when loading? [:div.ml-2 (ui/loading "")])

+ 0 - 21
src/main/frontend/components/settings.cljs

@@ -410,24 +410,6 @@
 ;;             (let [value (not enable-block-timestamps?)]
 ;;               (config-handler/set-config! :feature/enable-block-timestamps? value)))))
 
-(defn encryption-row [enable-encryption?]
-  (toggle "enable_encryption"
-          (t :settings-page/enable-encryption)
-          enable-encryption?
-          #(let [value (not enable-encryption?)]
-             (config-handler/set-config! :feature/enable-encryption? value)
-             (when value
-               (state/close-modal!)
-               ;; FIXME: Don't send the `(atom false)` ! Should check multi-window! or internal status error happens
-               (js/setTimeout (fn [] (state/pub-event! [:graph/ask-for-re-index (atom false) nil]))
-                              100)))
-          [:p.text-sm.opacity-50 "⚠️ This feature is experimental! "
-           [:span "You can use "]
-           [:a {:href "https://github.com/kanru/logseq-encrypt-ui"
-                :target "_blank"}
-            "logseq-encrypt-ui"]
-           [:span " to decrypt your graph."]]))
-
 (rum/defc keyboard-shortcuts-row [t]
   (row-with-button-action
     {:left-label   (t :settings-page/customize-shortcuts)
@@ -660,7 +642,6 @@
   []
   (let [current-repo (state/get-current-repo)
         enable-journals? (state/enable-journals? current-repo)
-        enable-encryption? (state/enable-encryption? current-repo)
         enable-flashcards? (state/enable-flashcards? current-repo)
         enable-sync? (state/enable-sync?)
         enable-whiteboards? (state/enable-whiteboards? current-repo)
@@ -683,8 +664,6 @@
      (when (and (util/electron?) config/enable-plugins?) (plugin-system-switcher-row))
      (flashcards-switcher-row enable-flashcards?)
      (zotero-settings-row)
-     (encryption-row enable-encryption?)
-
      (when-not web-platform?
        [:div.mt-1.sm:mt-0.sm:col-span-2
         [:hr]

+ 0 - 15
src/main/frontend/dicts.cljc

@@ -218,7 +218,6 @@
         :settings-page/enable-tooltip "Tooltips"
         :settings-page/enable-journals "Journals"
         :settings-page/enable-all-pages-public "All pages public when publishing"
-        :settings-page/enable-encryption "Encryption"
         :settings-page/customize-shortcuts "Keyboard shortcuts"
         :settings-page/shortcut-settings "Customize shortcuts"
         :settings-page/home-default-page "Set the default home page"
@@ -672,7 +671,6 @@
         :settings-page/customize-shortcuts "Tastaturbefehle"
         :settings-page/disable-sentry "Nutzungs- und Diagnostik-Daten an Logseq senden"
         :settings-page/edit-custom-css "custom.css bearbeiten"
-        :settings-page/enable-encryption "Verschlüsselung"
         :settings-page/enable-shortcut-tooltip "Tooltips für Verknüpfungen aktivieren"
         :settings-page/enable-tooltip "Tooltips"
         :settings-page/shortcut-settings "Verknüpfungen anpassen"
@@ -998,7 +996,6 @@
         :settings-page/enable-all-pages-public "Alle pagina's openbaar bij publiceren"
         :settings-page/enable-block-time "Tijdstempel voor blokken inschakelen"
         :settings-page/enable-developer-mode "Ontwikkelaar modus"
-        :settings-page/enable-encryption "Encryptie"
         :settings-page/enable-flashcards "Flashcards"
         :settings-page/enable-journals "Journaals"
         :settings-page/enable-shortcut-tooltip "Snelkoppeling tooltip inschakelen"
@@ -1402,7 +1399,6 @@
         :settings-page/edit-setting "Modifier"
         :settings-page/enable-all-pages-public "Toutes les pages publiques lors de la publication"
         :settings-page/enable-block-time "Horodatage de bloc"
-        :settings-page/enable-encryption "Chiffrement"
         :settings-page/enable-flashcards "Cartes-mémoire"
         :settings-page/enable-journals "Journals"
         :settings-page/enable-shortcut-tooltip "Activer les astuces sur les raccourcis"
@@ -1649,7 +1645,6 @@
            :settings-page/enable-tooltip "开启提示框"
            :settings-page/enable-journals "开启日记"
            :settings-page/enable-all-pages-public "发布所有页面"
-           :settings-page/enable-encryption "激活加密功能"
            :settings-page/enable-whiteboards "激活白板功能"
            :settings-page/customize-shortcuts "自定义快捷键"
            :settings-page/shortcut-settings "快捷键设置"
@@ -2313,7 +2308,6 @@
         :settings-page/enable-tooltip "Habilitar descripción emergente"
         :settings-page/enable-journals "Habilitar diarios"
         :settings-page/enable-all-pages-public "Hacer todas las páginas públicas al publicar"
-        :settings-page/enable-encryption "Habilitar función de cifrado"
         :settings-page/customize-shortcuts "Atajos de teclado"
         :settings-page/shortcut-settings "Personalizar atajos"
         :settings-page/home-default-page "Establecer página de inicio"
@@ -2627,7 +2621,6 @@
            :settings-page/preferred-workflow "Foretrukket arbeidslflyt"
            :settings-page/enable-shortcut-tooltip "Skru på tooltip for snarveier"
            :settings-page/enable-timetracking "Aktiver tidssporing"
-           :settings-page/enable-encryption "Aktiver kryptering"
            :settings-page/enable-tooltip "Aktiver verktøytips"
            :settings-page/enable-journals "Aktiver dagbøker"
            :settings-page/enable-all-pages-public "Aktiver alle sider som offentlige ved publisering"
@@ -2951,7 +2944,6 @@
            :settings-page/enable-tooltip "Ativar dicas de ferramentas"
            :settings-page/enable-journals "Ativar diários"
            :settings-page/enable-all-pages-public "Ativar todas as páginas públicas ao publicar"
-           :settings-page/enable-encryption "Ativar funcionalidade de criptografia"
            :settings-page/customize-shortcuts "Atalhos de teclado"
            :settings-page/shortcut-settings "Personalizar atalhos"
            :settings-page/home-default-page "Definir a página inicial padrão"
@@ -3299,7 +3291,6 @@
            :settings-page/enable-tooltip "Dicas de atalhos"
            :settings-page/enable-journals "Diários"
            :settings-page/enable-all-pages-public "Todas as páginas públicas ao publicar"
-           :settings-page/enable-encryption "Encriptação"
            :settings-page/customize-shortcuts "Atalhos de teclado"
            :settings-page/shortcut-settings "Personalizar atalhos"
            :settings-page/home-default-page "Definir a página inicial predefinida"
@@ -3652,7 +3643,6 @@
         :settings-page/enable-shortcut-tooltip "Всплывающие подсказки горячих клавиш"
         :settings-page/enable-journals "Включить Дневники"
         :settings-page/enable-all-pages-public "Все страницы общедоступны при публикации"
-        :settings-page/enable-encryption "Функции шифрования"
         :settings-page/enable-flashcards "Карточки"
         :settings-page/custom-configuration "Настройки пользователя"
         :settings-page/custom-theme "Тема пользователя"
@@ -3981,7 +3971,6 @@
         :settings-page/enable-tooltip "ツールチップ"
         :settings-page/enable-journals "日誌"
         :settings-page/enable-all-pages-public "パブリッシュ時には全てのページを公開する"
-        :settings-page/enable-encryption "暗号化"
         :settings-page/customize-shortcuts "キーボードショートカット"
         :settings-page/shortcut-settings "ショートカットをカスタマイズ"
         :settings-page/home-default-page "デフォルトのホームページを設定"
@@ -4466,7 +4455,6 @@
 
         :file-sync/other-user-graph "Il grafo locale attuale è associato al grafo remoto di un altro utente. Non è quindi possibile avviare la sincronizzazione."
         :file-sync/graph-deleted "Il grafo attuale è stato eliminato"
-        :settings-page/enable-encryption "Crittografia"
         :settings-page/edit-export-css "Modificare export.css"
         :settings-page/enable-flashcards "Flashcard"
         :settings-page/export-theme "Esporta tema"}
@@ -4640,7 +4628,6 @@
         :settings-page/enable-tooltip "Araç ipuçları"
         :settings-page/enable-journals "Günlük"
         :settings-page/enable-all-pages-public "Yayımlanan tüm sayfaları herkese açık yap"
-        :settings-page/enable-encryption "Şifreleme"
         :settings-page/customize-shortcuts "Klavye kısayolları"
         :settings-page/shortcut-settings "Kısayolları özelleştir"
         :settings-page/home-default-page "Varsayılan ana sayfayı ayarla"
@@ -4972,7 +4959,6 @@
         :settings-page/enable-tooltip "툴팁 활성화"
         :settings-page/enable-journals "일지 활성화"
         :settings-page/enable-all-pages-public "출판할 때 모든 페이지 공개로 설정"
-        :settings-page/enable-encryption "암호화"
         :settings-page/customize-shortcuts "키보드 단축키"
         :settings-page/shortcut-settings "단축키 설정"
         :settings-page/home-default-page "기본 홈 페이지 설정"
@@ -5300,7 +5286,6 @@
         :settings-page/enable-tooltip "Podpowiedzi"
         :settings-page/enable-journals "Dzienniki"
         :settings-page/enable-all-pages-public "Publikuj wszystkie strony"
-        :settings-page/enable-encryption "Szyfrowanie"
         :settings-page/customize-shortcuts "Skróty klawiszowe"
         :settings-page/shortcut-settings "Zmień skróty"
         :settings-page/home-default-page "Ustaw domyślną stronę startową"

+ 0 - 83
src/main/frontend/encrypt.cljs

@@ -1,95 +1,12 @@
 (ns frontend.encrypt
   "Encryption related fns for use with encryption feature and file sync"
   (:require [logseq.graph-parser.utf8 :as utf8]
-            [frontend.db.utils :as db-utils]
             [frontend.util :as util]
-            [frontend.db :as db]
-            [frontend.state :as state]
-            [clojure.string :as str]
-            [cljs.reader :as reader]
             [promesa.core :as p]
             [electron.ipc :as ipc]
             [shadow.loader :as loader]
-            [lambdaisland.glogi :as log]
             [frontend.mobile.util :as mobile-util]))
 
-(defonce age-pem-header-line "-----BEGIN AGE ENCRYPTED FILE-----")
-(defonce age-version-line "age-encryption.org/v1")
-
-(defn content-encrypted?
-  [content]
-  (when content
-    (or (str/starts-with? content age-pem-header-line)
-        (str/starts-with? content age-version-line))))
-
-(defn encrypted-db?
-  [repo-url]
-  (db-utils/get-key-value repo-url :db/encrypted?))
-
-(defn get-key-pair
-  [repo-url]
-  (db-utils/get-key-value repo-url :db/encryption-keys))
-
-(defn save-key-pair!
-  [repo-url keys]
-  (let [keys (if (string? keys) (reader/read-string keys) keys)]
-    (db/set-key-value repo-url :db/encryption-keys keys)
-    (db/set-key-value repo-url :db/encrypted? true)))
-
-(defn generate-key-pair
-  []
-  (p/let [_ (loader/load :age-encryption)
-          lazy-keygen (resolve 'frontend.extensions.age-encryption/keygen)
-          js-keys (lazy-keygen)]
-    (array-seq js-keys)))
-
-(defn generate-key-pair-and-save!
-  [repo-url]
-  (when-not (get-key-pair repo-url)
-    (p/let [keys (generate-key-pair)]
-      (save-key-pair! repo-url keys)
-      (pr-str keys))))
-
-(defn get-public-key
-  [repo-url]
-  (second (get-key-pair repo-url)))
-
-(defn get-secret-key
-  [repo-url]
-  (first (get-key-pair repo-url)))
-
-(defn encrypt
-  ([content]
-   (encrypt (state/get-current-repo) content))
-  ([repo-url content]
-   (cond
-     (encrypted-db? repo-url)
-     (p/let [_ (loader/load :age-encryption)
-             lazy-encrypt-with-x25519 (resolve 'frontend.extensions.age-encryption/encrypt-with-x25519)
-             content (utf8/encode content)
-             public-key (get-public-key repo-url)
-             encrypted (lazy-encrypt-with-x25519 public-key content true)]
-       (utf8/decode encrypted))
-     :else
-     (p/resolved content))))
-
-(defn decrypt
-  ([content]
-   (decrypt (state/get-current-repo) content))
-  ([repo-url content]
-   (cond
-     (and (encrypted-db? repo-url)
-          (content-encrypted? content))
-     (let [content (utf8/encode content)]
-       (if-let [secret-key (get-secret-key repo-url)]
-         (p/let [_ (loader/load :age-encryption)
-                 lazy-decrypt-with-x25519 (resolve 'frontend.extensions.age-encryption/decrypt-with-x25519)
-                 decrypted (lazy-decrypt-with-x25519 secret-key content)]
-           (utf8/decode decrypted))
-         (log/error :encrypt/empty-secret-key (str "Can't find the secret key for repo: " repo-url))))
-     :else
-     (p/resolved content))))
-
 (defn encrypt-with-passphrase
   [passphrase content]
   (cond

+ 21 - 24
src/main/frontend/fs.cljs

@@ -14,7 +14,6 @@
             [promesa.core :as p]
             [frontend.db :as db]
             [clojure.string :as string]
-            [frontend.encrypt :as encrypt]
             [frontend.state :as state]))
 
 (defonce nfs-record (nfs/->Nfs))
@@ -77,29 +76,27 @@
   [repo dir path content opts]
   (when content
     (let [fs-record (get-fs dir)]
-      (p/let [md-or-org? (contains? #{"md" "markdown" "org"} (util/get-file-ext path))
-              content (if-not md-or-org? content (encrypt/encrypt content))]
-        (->
-         (p/let [opts (assoc opts
-                             :error-handler
-                             (fn [error]
-                               (state/pub-event! [:instrument {:type :write-file/failed
-                                                               :payload {:fs (type fs-record)
-                                                                         :user-agent (when js/navigator js/navigator.userAgent)
-                                                                         :path path
-                                                                         :content-length (count content)
-                                                                         :error-str (str error)
-                                                                         :error error}}])))
-                 _ (protocol/write-file! (get-fs dir) repo dir path content opts)]
-           (when (= bfs-record fs-record)
-             (db/set-file-last-modified-at! repo (config/get-file-path repo path) (js/Date.))))
-         (p/catch (fn [error]
-                    (log/error :file/write-failed {:dir dir
-                                                   :path path
-                                                   :error error})
-                    ;; Disable this temporarily
-                    ;; (js/alert "Current file can't be saved! Please copy its content to your local file system and click the refresh button.")
-                    )))))))
+      (->
+       (p/let [opts (assoc opts
+                           :error-handler
+                           (fn [error]
+                             (state/pub-event! [:instrument {:type :write-file/failed
+                                                             :payload {:fs (type fs-record)
+                                                                       :user-agent (when js/navigator js/navigator.userAgent)
+                                                                       :path path
+                                                                       :content-length (count content)
+                                                                       :error-str (str error)
+                                                                       :error error}}])))
+               _ (protocol/write-file! (get-fs dir) repo dir path content opts)]
+         (when (= bfs-record fs-record)
+           (db/set-file-last-modified-at! repo (config/get-file-path repo path) (js/Date.))))
+       (p/catch (fn [error]
+                  (log/error :file/write-failed {:dir dir
+                                                 :path path
+                                                 :error error})
+                  ;; Disable this temporarily
+                  ;; (js/alert "Current file can't be saved! Please copy its content to your local file system and click the refresh button.")
+                  ))))))
 
 (defn read-file
   ([dir path]

+ 3 - 9
src/main/frontend/fs/capacitor_fs.cljs

@@ -6,7 +6,6 @@
             [goog.string :as gstring]
             [frontend.config :as config]
             [frontend.db :as db]
-            [frontend.encrypt :as encrypt]
             [frontend.fs.protocol :as protocol]
             [frontend.mobile.util :as mobile-util]
             [frontend.state :as state]
@@ -105,10 +104,7 @@
 (defn- contents-matched?
   [disk-content db-content]
   (when (and (string? disk-content) (string? db-content))
-    (if (encrypt/encrypted-db? (state/get-current-repo))
-      (p/let [decrypted-content (encrypt/decrypt disk-content)]
-        (= (string/trim decrypted-content) (string/trim db-content)))
-      (p/resolved (= (string/trim disk-content) (string/trim db-content))))))
+    (p/resolved (= (string/trim disk-content) (string/trim db-content)))))
 
 (def backup-dir "logseq/bak")
 (def version-file-dir "logseq/version-files/local")
@@ -195,7 +191,7 @@
          (not contents-matched?)
          (not (contains? #{"excalidraw" "edn" "css"} ext))
          (not (string/includes? path "/.recycle/")))
-        (p/let [disk-content (encrypt/decrypt disk-content)]
+        (p/let [disk-content disk-content]
           (state/pub-event! [:file/not-matched-from-disk path disk-content content]))
 
         :else
@@ -206,9 +202,7 @@
            (when-not contents-matched?
              (backup-file repo-dir :backup-dir path disk-content))
            (db/set-file-last-modified-at! repo path mtime)
-           (p/let [content (if (encrypt/encrypted-db? (state/get-current-repo))
-                             (encrypt/decrypt content)
-                             content)]
+           (p/let [content content]
              (db/set-file-content! repo path content))
            (when ok-handler
              (ok-handler repo path result))

+ 4 - 12
src/main/frontend/fs/nfs.cljs

@@ -10,8 +10,7 @@
             [frontend.config :as config]
             [frontend.state :as state]
             [frontend.handler.notification :as notification]
-            ["/frontend/utils" :as utils]
-            [frontend.encrypt :as encrypt]))
+            ["/frontend/utils" :as utils]))
 
 ;; We need to cache the file handles in the memory so that
 ;; the browser will not keep asking permissions.
@@ -58,10 +57,7 @@
 (defn- contents-matched?
   [disk-content db-content]
   (when (and (string? disk-content) (string? db-content))
-    (if (encrypt/encrypted-db? (state/get-current-repo))
-      (p/let [decrypted-content (encrypt/decrypt disk-content)]
-        (= (string/trim decrypted-content) (string/trim db-content)))
-      (p/resolved (= (string/trim disk-content) (string/trim db-content))))))
+    (p/resolved (= (string/trim disk-content) (string/trim db-content)))))
 
 (defrecord ^:large-vars/cleanup-todo Nfs []
   protocol/Fs
@@ -173,16 +169,12 @@
                          (not contents-matched?)
                          (not (contains? #{"excalidraw" "edn" "css"} ext))
                          (not (string/includes? path "/.recycle/")))
-                      (p/let [local-content (encrypt/decrypt local-content)]
-                        (state/pub-event! [:file/not-matched-from-disk path local-content content]))
+                      (state/pub-event! [:file/not-matched-from-disk path local-content content])
                       (p/let [_ (verify-permission repo file-handle true)
                               _ (utils/writeFile file-handle content)
                               file (.getFile file-handle)]
                         (when file
-                          (p/let [content (if (encrypt/encrypted-db? (state/get-current-repo))
-                                            (encrypt/decrypt content)
-                                            content)]
-                            (db/set-file-content! repo path content))
+                          (db/set-file-content! repo path content)
                           (nfs-saved-handler repo path file))))))
                 (p/catch (fn [e]
                            (js/console.error e))))

+ 4 - 12
src/main/frontend/fs/node.cljs

@@ -9,8 +9,7 @@
             [frontend.util :as util]
             [goog.object :as gobj]
             [lambdaisland.glogi :as log]
-            [promesa.core :as p]
-            [frontend.encrypt :as encrypt]))
+            [promesa.core :as p]))
 
 (defn concat-path
   [dir path]
@@ -29,10 +28,7 @@
 (defn- contents-matched?
   [disk-content db-content]
   (when (and (string? disk-content) (string? db-content))
-    (if (encrypt/encrypted-db? (state/get-current-repo))
-      (p/let [decrypted-content (encrypt/decrypt disk-content)]
-        (= (string/trim decrypted-content) (string/trim db-content)))
-      (p/resolved (= (string/trim disk-content) (string/trim db-content))))))
+    (p/resolved (= (string/trim disk-content) (string/trim db-content)))))
 
 (defn- write-file-impl!
   [this repo dir path content {:keys [ok-handler error-handler old-content skip-compare?]} stat]
@@ -61,8 +57,7 @@
          (not contents-matched?)
          (not (contains? #{"excalidraw" "edn" "css"} ext))
          (not (string/includes? path "/.recycle/")))
-        (p/let [disk-content (encrypt/decrypt disk-content)]
-          (state/pub-event! [:file/not-matched-from-disk path disk-content content]))
+        (state/pub-event! [:file/not-matched-from-disk path disk-content content])
 
         :else
         (->
@@ -71,10 +66,7 @@
            (when-not contents-matched?
              (ipc/ipc "backupDbFile" (config/get-local-dir repo) path disk-content content))
            (db/set-file-last-modified-at! repo path mtime)
-           (p/let [content (if (encrypt/encrypted-db? (state/get-current-repo))
-                             (encrypt/decrypt content)
-                             content)]
-             (db/set-file-content! repo path content))
+           (db/set-file-content! repo path content)
            (when ok-handler
              (ok-handler repo path result))
            result)

+ 1 - 4
src/main/frontend/fs/watcher_handler.cljs

@@ -15,7 +15,6 @@
             [lambdaisland.glogi :as log]
             [promesa.core :as p]
             [frontend.state :as state]
-            [frontend.encrypt :as encrypt]
             [frontend.fs :as fs]))
 
 ;; all IPC paths must be normalized! (via gp-util/path-normalize)
@@ -56,9 +55,7 @@
           pages-metadata-path (config/get-pages-metadata-path)
           {:keys [mtime]} stat
           db-content (or (db/get-file repo path) "")]
-      (when (and (or content (contains? #{"unlink" "unlinkDir" "addDir"} type))
-                 (not (encrypt/content-encrypted? content))
-                 (not (:encryption/graph-parsing? @state/state)))
+      (when (or content (contains? #{"unlink" "unlinkDir" "addDir"} type))
         (cond
           (and (= "unlinkDir" type) dir)
           (state/pub-event! [:graph/dir-gone dir])

+ 1 - 10
src/main/frontend/handler/common.cljs

@@ -8,8 +8,7 @@
             [frontend.util :as util]
             [frontend.util.property :as property]
             [goog.object :as gobj]
-            ["ignore" :as Ignore]
-            [lambdaisland.glogi :as log]))
+            ["ignore" :as Ignore]))
 
 (defn copy-to-clipboard-without-id-property!
   [format raw-text html]
@@ -59,14 +58,6 @@
         (println error-message-or-handler))
       {})))
 
-(defn read-metadata!
-  [content]
-  (try
-    (reader/read-string content)
-    (catch :default e
-      (log/error :parse/metadata-failed e)
-      {})))
-
 (defn get-page-default-properties
   [page-name]
   {:title page-name

+ 1 - 15
src/main/frontend/handler/events.cljs

@@ -21,7 +21,6 @@
             [frontend.db.conn :as conn]
             [frontend.db.model :as db-model]
             [frontend.db.persist :as db-persist]
-            [frontend.encrypt :as encrypt]
             [frontend.extensions.srs :as srs]
             [frontend.fs :as fs]
             [frontend.fs.capacitor-fs :as capacitor-fs]
@@ -323,8 +322,7 @@
                         {:label "diff__cp"}))))
 
 (defmethod handle :modal/display-file-version [[_ path content hash]]
-  (p/let [content (when content (encrypt/decrypt content))]
-    (state/set-modal! #(git-component/file-specific-version path hash content))))
+  (state/set-modal! #(git-component/file-specific-version path hash content)))
 
 ;; Hook on a graph is ready to be shown to the user.
 ;; It's different from :graph/resotred, as :graph/restored is for window reloaded
@@ -604,18 +602,6 @@
                      (state/close-modal!)
                      (state/pub-event! [:graph/re-index])))]])))
 
-;; encryption
-(defmethod handle :modal/encryption-setup-dialog [[_ repo-url close-fn]]
-  (state/set-modal!
-   (encryption/encryption-setup-dialog repo-url close-fn)))
-
-(defmethod handle :modal/encryption-input-secret-dialog [[_ repo-url db-encrypted-secret close-fn]]
-  (state/set-modal!
-   (encryption/encryption-input-secret-dialog
-    repo-url
-    db-encrypted-secret
-    close-fn)))
-
 (defmethod handle :modal/remote-encryption-input-pw-dialog [[_ repo-url remote-graph-info type opts]]
   (state/set-modal!
    (encryption/input-password

+ 2 - 2
src/main/frontend/handler/file.cljs

@@ -221,11 +221,11 @@
       (fs/watch-dir! dir))))
 
 (defn create-metadata-file
-  [repo-url encrypted?]
+  [repo-url]
   (let [repo-dir (config/get-repo-dir repo-url)
         path (str config/app-name "/" config/metadata-file)
         file-path (str "/" path)
-        default-content (if encrypted? "{:db/encrypted? true}" "{}")]
+        default-content "{}"]
     (p/let [_ (fs/mkdir-if-not-exists (util/safe-path-join repo-dir config/app-name))
             file-exists? (fs/create-if-not-exists repo-url repo-dir file-path default-content)]
       (when-not file-exists?

+ 2 - 12
src/main/frontend/handler/metadata.cljs

@@ -2,7 +2,6 @@
   "System-component-like ns that manages writing to pages-metadata.edn"
   (:require [cljs.reader :as reader]
             [cljs.pprint]
-            [clojure.string :as string]
             [datascript.db :as ddb]
             [frontend.config :as config]
             [frontend.db :as db]
@@ -17,10 +16,9 @@
 (defn set-metadata!
   [k v]
   (when-let [repo (state/get-current-repo)]
-    (let [encrypted? (= k :db/encrypted-secret)
-          path (config/get-metadata-path)
+    (let [path (config/get-metadata-path)
           file-content (db/get-file path)]
-      (p/let [_ (file-handler/create-metadata-file repo false)]
+      (p/let [_ (file-handler/create-metadata-file repo)]
         (let [metadata-str (or file-content default-metadata-str)
               metadata (try
                          (reader/read-string metadata-str)
@@ -34,9 +32,6 @@
                              :else
                              (let [ks (if (vector? k) k [k])]
                                (assoc-in metadata ks v)))
-              new-metadata (if encrypted?
-                             (assoc new-metadata :db/encrypted? true)
-                             new-metadata)
               new-content (pr-str new-metadata)]
           (file-handler/set-file-content! repo path new-content))))))
 
@@ -58,11 +53,6 @@
                           new-content
                           {}))))))
 
-(defn set-db-encrypted-secret!
-  [encrypted-secret]
-  (when-not (string/blank? encrypted-secret)
-    (set-metadata! :db/encrypted-secret encrypted-secret)))
-
 (defn- handler-properties!
   [all-properties properties-tx]
   (reduce

+ 20 - 46
src/main/frontend/handler/repo.cljs

@@ -32,7 +32,6 @@
             [electron.ipc :as ipc]
             [cljs-bean.core :as bean]
             [clojure.core.async :as async]
-            [frontend.encrypt :as encrypt]
             [frontend.mobile.util :as mobile-util]
             [medley.core :as medley]))
 
@@ -123,19 +122,17 @@
             (ui-handler/re-render-root!)))))))
 
 (defn create-default-files!
-  ([repo-url]
-   (create-default-files! repo-url false))
-  ([repo-url encrypted?]
-   (spec/validate :repos/url repo-url)
-   (let [repo-dir (config/get-repo-dir repo-url)]
-     (p/let [_ (fs/mkdir-if-not-exists (util/safe-path-join repo-dir config/app-name))
-             _ (fs/mkdir-if-not-exists (util/safe-path-join repo-dir (str config/app-name "/" config/recycle-dir)))
-             _ (fs/mkdir-if-not-exists (util/safe-path-join repo-dir (config/get-journals-directory)))
-             _ (file-handler/create-metadata-file repo-url encrypted?)
-             _ (repo-config-handler/create-config-file-if-not-exists repo-url)
-             _ (create-contents-file repo-url)
-             _ (create-custom-theme repo-url)]
-       (state/pub-event! [:page/create-today-journal repo-url])))))
+  [repo-url]
+  (spec/validate :repos/url repo-url)
+  (let [repo-dir (config/get-repo-dir repo-url)]
+    (p/let [_ (fs/mkdir-if-not-exists (util/safe-path-join repo-dir config/app-name))
+            _ (fs/mkdir-if-not-exists (util/safe-path-join repo-dir (str config/app-name "/" config/recycle-dir)))
+            _ (fs/mkdir-if-not-exists (util/safe-path-join repo-dir (config/get-journals-directory)))
+            _ (file-handler/create-metadata-file repo-url)
+            _ (repo-config-handler/create-config-file-if-not-exists repo-url)
+            _ (create-contents-file repo-url)
+            _ (create-custom-theme repo-url)]
+      (state/pub-event! [:page/create-today-journal repo-url]))))
 
 (defn- load-pages-metadata!
   "force?: if set true, skip the metadata timestamp range check"
@@ -205,13 +202,10 @@
       nil)))
 
 (defn- after-parse
-  [repo-url files file-paths db-encrypted? re-render? re-render-opts opts graph-added-chan]
+  [repo-url files file-paths re-render? re-render-opts opts graph-added-chan]
   (load-pages-metadata! repo-url file-paths files true)
   (when (or (:new-graph? opts) (not (:refresh? opts)))
-    (if (and (not db-encrypted?) (state/enable-encryption? repo-url))
-      (state/pub-event! [:modal/encryption-setup-dialog repo-url
-                         #(create-default-files! repo-url %)])
-      (create-default-files! repo-url db-encrypted?)))
+    (create-default-files! repo-url))
   (when re-render?
     (ui-handler/re-render-root! re-render-opts))
   (state/pub-event! [:graph/added repo-url opts])
@@ -223,7 +217,7 @@
   (async/offer! graph-added-chan true))
 
 (defn- parse-files-and-create-default-files-inner!
-  [repo-url files delete-files delete-blocks file-paths db-encrypted? re-render? re-render-opts opts]
+  [repo-url files delete-files delete-blocks file-paths re-render? re-render-opts opts]
   (let [supported-files (graph-parser/filter-files files)
         delete-data (->> (concat delete-files delete-blocks)
                          (remove nil?))
@@ -245,7 +239,7 @@
           (parse-and-load-file! repo-url file (assoc
                                                (select-keys opts [:new-graph? :verbose])
                                                :skip-db-transact? false)))
-        (after-parse repo-url files file-paths db-encrypted? re-render? re-render-opts opts graph-added-chan))
+        (after-parse repo-url files file-paths re-render? re-render-opts opts graph-added-chan))
       (async/go-loop [tx []]
         (if-let [item (async/<! chan)]
           (let [[idx file] item
@@ -273,38 +267,18 @@
               (recur tx')))
           (do
             (when (seq tx) (db/transact! repo-url tx {:from-disk? true}))
-            (after-parse repo-url files file-paths db-encrypted? re-render? re-render-opts opts graph-added-chan)))))
+            (after-parse repo-url files file-paths re-render? re-render-opts opts graph-added-chan)))))
     graph-added-chan))
 
 (defn- parse-files-and-create-default-files!
-  [repo-url files delete-files delete-blocks file-paths db-encrypted? re-render? re-render-opts opts]
-  (if db-encrypted?
-    (p/let [files (p/all
-                   (map (fn [file]
-                          (p/let [content (encrypt/decrypt (:file/content file))]
-                            (assoc file :file/content content)))
-                     files))]
-      (parse-files-and-create-default-files-inner! repo-url files delete-files delete-blocks file-paths db-encrypted? re-render? re-render-opts opts))
-    (parse-files-and-create-default-files-inner! repo-url files delete-files delete-blocks file-paths db-encrypted? re-render? re-render-opts opts)))
+  [repo-url files delete-files delete-blocks file-paths re-render? re-render-opts opts]
+  (parse-files-and-create-default-files-inner! repo-url files delete-files delete-blocks file-paths re-render? re-render-opts opts))
 
 (defn parse-files-and-load-to-db!
   [repo-url files {:keys [delete-files delete-blocks re-render? re-render-opts _refresh?] :as opts
                    :or {re-render? true}}]
-  (let [file-paths (map :file/path files)
-        metadata-file (config/get-metadata-path)
-        metadata-content (some #(when (= (:file/path %) metadata-file)
-                                  (:file/content %)) files)
-        metadata (when metadata-content
-                   (common-handler/read-metadata! metadata-content))
-        db-encrypted? (:db/encrypted? metadata)
-        db-encrypted-secret (if db-encrypted? (:db/encrypted-secret metadata) nil)]
-    (if db-encrypted?
-      (let [close-fn #(parse-files-and-create-default-files! repo-url files delete-files delete-blocks file-paths db-encrypted? re-render? re-render-opts opts)]
-        (state/set-state! :encryption/graph-parsing? true)
-        (state/pub-event! [:modal/encryption-input-secret-dialog repo-url
-                           db-encrypted-secret
-                           close-fn]))
-      (parse-files-and-create-default-files! repo-url files delete-files delete-blocks file-paths db-encrypted? re-render? re-render-opts opts))))
+  (let [file-paths (map :file/path files)]
+    (parse-files-and-create-default-files! repo-url files delete-files delete-blocks file-paths re-render? re-render-opts opts)))
 
 (defn load-repo-to-db!
   [repo-url {:keys [diffs nfs-files refresh? new-graph? empty-graph?]}]

+ 2 - 5
src/main/frontend/handler/web/nfs.cljs

@@ -7,7 +7,6 @@
             [clojure.string :as string]
             [frontend.config :as config]
             [frontend.db :as db]
-            [frontend.encrypt :as encrypt]
             [frontend.fs :as fs]
             [frontend.fs.nfs :as nfs]
             [frontend.handler.common :as common-handler]
@@ -183,8 +182,7 @@
             (-> (p/all (map (fn [file]
                               (p/let [content (if nfs?
                                                 (.text (:file/file file))
-                                                (:file/content file))
-                                      content (encrypt/decrypt content)]
+                                                (:file/content file))]
                                 (assoc file :file/content content))) markup-files))
                 (p/then (fn [result]
                           (p/let [files (map #(dissoc % :file/file) result)
@@ -290,8 +288,7 @@
                       (when-let [file (get-file-f path new-files)]
                         (p/let [content (if nfs?
                                           (.text (:file/file file))
-                                          (:file/content file))
-                                content (encrypt/decrypt content)]
+                                          (:file/content file))]
                           (assoc file :file/content content)))) added-or-modified))
         (p/then (fn [result]
                   (let [files (map #(dissoc % :file/file :file/handle) result)

+ 0 - 4
src/main/frontend/state.cljs

@@ -648,10 +648,6 @@ Similar to re-frame subscriptions"
   []
   (:editor/logical-outdenting? (sub-config)))
 
-(defn enable-encryption?
-  [repo]
-  (:feature/enable-encryption? (sub-config repo)))
-
 (defn doc-mode-enter-for-new-line?
   []
   (and (document-mode?)