瀏覽代碼

enhance(rtc,crypt): add db-worker apis related to graph-keys and device-keys

rcmerci 1 年之前
父節點
當前提交
ff8c419048

+ 14 - 1
src/main/frontend/db/rtc/debug_ui.cljs

@@ -245,4 +245,17 @@
        (shui/select-content
         (shui/select-group
          (for [{:keys [graph-uuid graph-status]} (:remote-graphs debug-state*)]
-           (shui/select-item {:value graph-uuid :disabled (some? graph-status)} graph-uuid)))))]]))
+           (shui/select-item {:value graph-uuid :disabled (some? graph-status)} graph-uuid)))))]
+
+     [:hr.my-2]
+     ;; [:div.pb-2.flex.flex-row.items-center.gap-2
+     ;;  ]
+     [:div.pb-4
+      [:pre.select-text
+       (-> {:devices
+            []
+            :graph-public-key-jwk nil
+            :graph-private-key-jwk nil}
+           (fipp/pprint {:width 20})
+           with-out-str)]]
+     ]))

+ 15 - 8
src/main/frontend/worker/crypt.cljs

@@ -61,13 +61,20 @@
         (prn :plaintxt plaintxt)))))
 
 (defn store-graph-keys-jwk
-  [repo graph-uuid public-key-jwk private-key-jwk]
-  (assert (some? graph-uuid))
+  [repo public-key-jwk private-key-jwk]
   (let [conn (worker-state/get-client-ops-conn repo)]
     (assert (some? conn) repo)
-    (let [graph-entity (d/entity @conn [:graph-uuid graph-uuid])]
-      (assert (and (nil? (:public-key-jwk graph-entity))
-                   (nil? (:private-key-jwk graph-entity))) graph-entity)
-      (d/transact conn {:graph-uuid graph-uuid
-                        :public-key-jwk public-key-jwk
-                        :private-key-jwk private-key-jwk}))))
+    (let [public-key-datom (first (d/datoms @conn :avet :public-key-jwk))
+          private-key-datom (first (d/datoms @conn :avet :private-key-jwk))]
+      (assert (and (nil? public-key-datom) (nil? private-key-datom)) public-key-datom)
+      (d/transact! conn [[:db/add "e1" :public-key-jwk public-key-jwk]
+                         [:db/add "e2" :private-key-jwk private-key-jwk]]))))
+
+(defn get-graph-keys-jwk
+  [repo]
+  (let [conn (worker-state/get-client-ops-conn repo)]
+    (assert (some? conn) repo)
+    (let [public-key-datom (first (d/datoms @conn :avet :public-key-jwk))
+          private-key-datom (first (d/datoms @conn :avet :private-key-jwk))]
+      {:public-key-jwk (:v public-key-datom)
+       :private-key-jwk (:v private-key-datom)})))

+ 11 - 0
src/main/frontend/worker/db_worker.cljs

@@ -9,6 +9,7 @@
             [datascript.core :as d]
             [datascript.storage :refer [IStorage] :as storage]
             [frontend.common.file.core :as common-file]
+            [frontend.worker.crypt :as worker-crypt]
             [frontend.worker.db-listener :as db-listener]
             [frontend.worker.db-metadata :as worker-db-metadata]
             [frontend.worker.db.migrate :as db-migrate]
@@ -827,6 +828,16 @@
    (with-write-transit-str
      (js/Promise. (rtc-core/new-task--snapshot-list token graph-uuid))))
 
+  (rtc-get-graph-keys
+   [this repo]
+   (with-write-transit-str
+     (worker-crypt/get-graph-keys-jwk repo)))
+
+  (device-list-devices
+   [this token]
+   (with-write-transit-str
+     (js/Promise. (worker-device/new-task--list-devices token))))
+
   (undo
    [_this repo _page-block-uuid-str]
    (when-let [conn (worker-state/get-datascript-conn repo)]

+ 2 - 2
src/main/frontend/worker/rtc/client_op.cljs

@@ -53,8 +53,8 @@
   {:block/uuid {:db/unique :db.unique/identity}
    :local-tx {:db/index true}
    :graph-uuid {:db/index true}
-   :public-key-jwk {}
-   :private-key-jwk {}
+   :public-key-jwk {:db/index true}
+   :private-key-jwk {:db/index true}
 
    ;; device
    :device/uuid {:db/unique :db.unique/identity}

+ 1 - 1
src/main/frontend/worker/rtc/full_upload_download_graph.cljs

@@ -143,7 +143,7 @@
                            [{:db/ident :logseq.kv/graph-uuid :kv/value graph-uuid}
                             {:db/ident :logseq.kv/graph-local-tx :kv/value "0"}])
             (client-op/update-graph-uuid repo graph-uuid)
-            (crypt/store-graph-keys-jwk repo graph-uuid public-key-jwk private-key-jwk)
+            (crypt/store-graph-keys-jwk repo public-key-jwk private-key-jwk)
             (when-not rtc-const/RTC-E2E-TEST
               (let [^js worker-obj (:worker/object @worker-state/*state)]
                 (c.m/<? (.storeMetadata worker-obj repo (pr-str {:kv/value graph-uuid})))))