Browse Source

fix(rtc): remove test encrypt-key

rcmerci 1 month ago
parent
commit
f2e59d716c

+ 3 - 2
src/main/frontend/worker/rtc/client.cljs

@@ -480,8 +480,9 @@
                       other-remote-ops)]
       (when-let [ops-for-remote (rtc-schema/to-ws-ops-decoder remote-ops)]
         (let [local-tx (client-op/get-local-tx repo)
-              encrypt-key-for-test (c.m/<? (rtc-encrypt/<salt+password->key (ldb/get-key-value @conn :logseq.kv/graph-rtc-encrypt-salt) "test-password"))
-              encrypted-remote-ops (m/? (task--encrypt-remote-ops encrypt-key-for-test ops-for-remote))
+              encrypt-key (c.m/<? (rtc-encrypt/<get-encrypt-key repo))
+              _ (assert (some? encrypt-key))
+              encrypted-remote-ops (m/? (task--encrypt-remote-ops encrypt-key ops-for-remote))
               r (try
                   (let [message (cond-> {:action "apply-ops"
                                          :graph-uuid graph-uuid :schema-version (str major-schema-version)

+ 18 - 9
src/main/frontend/worker/rtc/encrypt.cljs

@@ -1,6 +1,7 @@
 (ns frontend.worker.rtc.encrypt
   "rtc e2ee related"
   (:require ["/frontend/idbkv" :as idb-keyval]
+            [frontend.common.thread-api :as thread-api :refer [def-thread-api]]
             [logseq.db :as ldb]
             [promesa.core :as p]))
 
@@ -26,22 +27,22 @@
   (idb-keyval/del k @store))
 
 (defn- graph-encrypt-key-idb-key
-  [graph-uuid]
-  (assert (some? graph-uuid))
-  (str "rtc-encrypt-key###" graph-uuid))
+  [repo]
+  (assert (some? repo))
+  (str "rtc-encrypt-key###" repo))
 
 (defn <get-encrypt-key
-  [graph-uuid]
-  (<get-item (graph-encrypt-key-idb-key graph-uuid)))
+  [repo]
+  (<get-item (graph-encrypt-key-idb-key repo)))
 
 (defn <set-encrypt-key!
-  [graph-uuid k]
+  [repo k]
   (assert (instance? js/CryptoKey k))
-  (<set-item! (graph-encrypt-key-idb-key graph-uuid) k))
+  (<set-item! (graph-encrypt-key-idb-key repo) k))
 
 (defn <remove-encrypt-key!
-  [graph-uuid]
-  (<remove-item! (graph-encrypt-key-idb-key graph-uuid)))
+  [repo]
+  (<remove-item! (graph-encrypt-key-idb-key repo)))
 
 (defn- array-buffer->base64 [buffer]
   (let [binary (apply str (map js/String.fromCharCode (js/Uint8Array. buffer)))]
@@ -151,6 +152,14 @@
          m)))
    (p/promise m) encrypt-attr-set))
 
+(def-thread-api :thread-api/generate&persist-encrypt-key
+  [repo salt password]
+  (p/let [encrypt-key (<salt+password->key salt password)
+          encrypt-key' (<get-encrypt-key repo)
+          _ (assert (nil? encrypt-key'))
+          _ (<set-encrypt-key! repo encrypt-key)]
+    nil))
+
 (comment
   (->
    (p/let [salt (js/crypto.getRandomValues (js/Uint8Array. 16))

+ 3 - 2
src/main/frontend/worker/rtc/full_upload_download_graph.cljs

@@ -159,8 +159,9 @@
                                 @conn
                                 :ignore-attr-set rtc-const/ignore-attrs-when-init-upload
                                 :ignore-entity-set rtc-const/ignore-entities-when-init-upload)
-                    encrypt-key-for-test (c.m/<? (rtc-encrypt/<salt+password->key (ldb/get-key-value @conn :logseq.kv/graph-rtc-encrypt-salt) "test-password"))
-                    encrypted-blocks (c.m/<? (task--encrypt-blocks encrypt-key-for-test rtc-const/encrypt-attr-set all-blocks))]
+                    encrypt-key (c.m/<? (rtc-encrypt/<get-encrypt-key repo))
+                    _ (assert (some? encrypt-key))
+                    encrypted-blocks (c.m/<? (task--encrypt-blocks encrypt-key rtc-const/encrypt-attr-set all-blocks))]
                 (ldb/write-transit-str encrypted-blocks)))))]
       (rtc-log-and-state/rtc-log :rtc.log/upload {:sub-type :upload-data
                                                   :message "uploading data"})

+ 2 - 7
src/main/frontend/worker/rtc/remote_update.cljs

@@ -659,17 +659,12 @@ so need to pull earlier remote-data from websocket."})
 (defn task--apply-remote-update
   "Apply remote-update(`remote-update-event`)"
   [graph-uuid repo conn date-formatter remote-update-event add-log-fn]
-  ;; Re apply-remote-update-check to ensure the remote-update-event still passes the check,
-  ;; Because asynchronous functions may have been executed between the previous check and the current apply-remote-update.
   (m/sp
     (when (apply-remote-update-check repo remote-update-event add-log-fn)
       (let [remote-update-data (:value remote-update-event)
-            encrypt-key-for-test
-            (c.m/<? (rtc-encrypt/<salt+password->key
-                     (ldb/get-key-value @conn :logseq.kv/graph-rtc-encrypt-salt)
-                     "test-password"))
+            encrypt-key (c.m/<? (rtc-encrypt/<get-encrypt-key repo))
             remote-update-data (m/? (task--decrypt-blocks-in-remote-update-data
-                                     encrypt-key-for-test rtc-const/encrypt-attr-set
+                                     encrypt-key rtc-const/encrypt-attr-set
                                      remote-update-data))
             remote-t (:t remote-update-data)
             {affected-blocks-map :affected-blocks refed-blocks :refed-blocks} remote-update-data