diff --git a/src/main/frontend/worker/device.cljs b/src/main/frontend/worker/device.cljs deleted file mode 100644 index 41f1711461..0000000000 --- a/src/main/frontend/worker/device.cljs +++ /dev/null @@ -1,224 +0,0 @@ -(ns frontend.worker.device - "Each device is assigned an id, and has some metadata(e.g. public&private-key for each device)" - (:require ["/frontend/idbkv" :as idb-keyval] - [cljs-time.coerce :as tc] - [cljs-time.core :as t] - [clojure.string :as string] - [frontend.common.missionary :as c.m] - [frontend.common.thread-api :refer [def-thread-api]] - [frontend.worker.crypt :as crypt] - [frontend.worker.rtc.client-op :as client-op] - [frontend.worker.rtc.ws-util :as ws-util] - [frontend.worker.state :as worker-state] - [goog.crypt.base64 :as base64] - [logseq.db :as ldb] - [missionary.core :as m] - [promesa.core :as p])) - -;;; TODO: move frontend.idb to deps/, then we can use it in both frontend and db-worker -;;; now, I just direct use "/frontend/idbkv" here -(defonce ^:private store (delay (idb-keyval/newStore "localforage" "keyvaluepairs" 2))) - -(defn- encrypted-aes-key graph-uuid] - (ws-util/send&recv get-ws-create-task - {:action "sync-encrypted-aes-key" - :device-uuid->encrypted-aes-key device-uuid->encrypted-aes-key - :graph-uuid graph-uuid})) - -(defn- new-get-ws-create-task - [token] - (:get-ws-create-task (ws-util/gen-get-ws-create-map--memoized (ws-util/get-ws-url token)))) - -(defn new-task--ensure-device-metadata! - "Generate new device items if not exists. - Store in indexeddb. - Import to `*device-id`, `*device-public-key`, `*device-private-key`" - [token] - (m/sp - (let [device-uuid (c.m/clj (some-> js/navigator.userAgentData .toJSON) :keywordize-keys true) - generated-device-name (string/join - "-" - [(:platform agent-data) - (when (:mobile agent-data) "mobile") - (:brand (first (:brands agent-data))) - (tc/to-epoch (t/now))]) - {:keys [device-id device-name created-at updated-at]} - (m/? (new-task--add-user-device get-ws-create-task generated-device-name)) - {:keys [publicKey privateKey]} (c.m/ device-uuid (string? device-uuid) parse-uuid)] - (let [get-ws-create-task (new-get-ws-create-task token)] - (m/? (new-task--remove-device-public-key* get-ws-create-task device-uuid* key-name)))))) - -(defn new-task--remove-device - [token device-uuid] - (m/sp - (when-let [device-uuid* (cond-> device-uuid (string? device-uuid) parse-uuid)] - (let [get-ws-create-task (new-get-ws-create-task token)] - (m/? (new-task--remove-user-device* get-ws-create-task device-uuid*)))))) - -(defn new-task--sync-current-graph-encrypted-aes-key - [token device-uuids] - (let [repo (worker-state/get-current-repo)] - (assert (and (seq device-uuids) (every? uuid? device-uuids)) device-uuids) - (m/sp - (when-let [graph-uuid (client-op/get-graph-uuid repo)] - (when-let [{:keys [aes-key-jwk]} (crypt/get-graph-keys-jwk repo)] - (let [device-uuids (set device-uuids) - get-ws-create-task (new-get-ws-create-task token) - devices (m/? (new-task--get-user-devices get-ws-create-task))] - (when-let [devices* (not-empty - (filter - (fn [device] - (and (contains? device-uuids (uuid (:device-id device))) - (some? (get-in device [:keys :default-public-key])))) - devices))] - (let [device-uuid->encrypted-aes-key - (m/? - (apply m/join (fn [& x] (into {} x)) - (map (fn [device] - (m/sp - (let [device-public-key - (c.m/js - (ldb/read-transit-str - (get-in device [:keys :default-public-key :public-key])))))] - [(uuid (:device-id device)) - (base64/encodeByteArray - (js/Uint8Array. - (c.m/encrypted-aes-key graph-uuid)))))))))) - -(def-thread-api :thread-api/rtc-sync-current-graph-encrypted-aes-key - [token device-uuids] - (new-task--sync-current-graph-encrypted-aes-key token device-uuids)) - -(def-thread-api :thread-api/list-devices - [token] - (new-task--list-devices token)) - -(def-thread-api :thread-api/remove-device-public-key - [token device-uuid key-name] - (new-task--remove-device-public-key token device-uuid key-name)) - -(def-thread-api :thread-api/remove-device - [token device-uuid] - (new-task--remove-device token device-uuid)) diff --git a/src/main/frontend/worker/rtc/core.cljs b/src/main/frontend/worker/rtc/core.cljs index 61677b09f4..e62d259d4e 100644 --- a/src/main/frontend/worker/rtc/core.cljs +++ b/src/main/frontend/worker/rtc/core.cljs @@ -5,7 +5,6 @@ [frontend.common.missionary :as c.m] [frontend.common.thread-api :refer [def-thread-api]] [frontend.worker-common.util :as worker-util] - [frontend.worker.device :as worker-device] [frontend.worker.rtc.asset :as r.asset] [frontend.worker.rtc.branch-graph :as r.branch-graph] [frontend.worker.rtc.client :as r.client] @@ -356,8 +355,6 @@ (defn- new-task--rtc-start* [repo token] (m/sp - ;; ensure device metadata existing first - (m/? (worker-device/new-task--ensure-device-metadata! token)) (let [{:keys [conn user-uuid graph-uuid schema-version remote-schema-version date-formatter] :as r} (validate-rtc-start-conditions repo token)] (if (instance? ExceptionInfo r)