diff --git a/src/main/frontend/common/crypt.cljs b/src/main/frontend/common/crypt.cljs index a170330f0f..fb7ce4a3f1 100644 --- a/src/main/frontend/common/crypt.cljs +++ b/src/main/frontend/common/crypt.cljs @@ -1,5 +1,6 @@ (ns frontend.common.crypt - (:require [promesa.core :as p])) + (:require [logseq.db :as ldb] + [promesa.core :as p])) (defonce subtle (.. js/crypto -subtle)) @@ -118,7 +119,7 @@ #js {:name "AES-GCM" :iv iv} aes-key encoded-text)] - [iv encrypted-data])) + [iv (js/Uint8Array. encrypted-data)])) (defn js key-pair))) + key-pair))))))))) (defn task--fetch-graph-aes-key - "Fetches the AES key for a graph, from indexeddb or server." - [token graph-uuid private-key] + "Fetches the AES key for a graph, from indexeddb or server. + Return nil if not exists" + [get-ws-create-task graph-uuid private-key] (m/sp (let [encrypted-aes-key (c.m/key salt "password"))] (m/? (task--encrypt-blocks k #{:block/title :block/name} blocks)))) - #(def encrypted-blocks %) prn)) - ) + #(def encrypted-blocks %) prn))) (defn new-task--upload-graph [get-ws-create-task repo conn remote-graph-name major-schema-version] (m/sp - (rtc-log-and-state/rtc-log :rtc.log/upload {:sub-type :fetching-presigned-put-url - :message "fetching presigned put-url"}) - (let [[{:keys [url key]} all-blocks-str] - (m/? - (m/join - vector - (ws-util/send&recv get-ws-create-task {:action "presign-put-temp-s3-obj"}) - (m/sp - (let [all-blocks (export-as-blocks - @conn - :ignore-attr-set rtc-const/ignore-attrs-when-init-upload - :ignore-entity-set rtc-const/ignore-entities-when-init-upload) - encrypt-key (c.m/ (worker-state/get-id-token) + worker-util/parse-jwt + :sub) + public-key (when user-uuid + (m/? (rtc-crypt/task--get-user-public-key get-ws-create-task user-uuid)))] + (when-not public-key + (throw (ex-info "user public-key not found" {:type :rtc.exception/not-found-user-rsa-key-pair + :user-uuid user-uuid}))) + + (let [encrypted-aes-key (c.m/user/user-type :keyword] [:user/online? :boolean]]]]]] ["inject-users-info" [:map]] + + ;; keys manage + ["fetch-user-rsa-key-pair" + [:map + [:public-key [:maybe :string]] + [:encrypted-private-key [:maybe :string]]]] + ["fetch-graph-encrypted-aes-key" + [:map + [:encrypted-aes-key [:maybe :string]]]] + ["upload-user-rsa-key-pair" + [:map + [:public-key :string] + [:encrypted-private-key :string]]] + [nil data-from-ws-schema-fallback]])) (def data-from-ws-coercer (m/coercer data-from-ws-schema mt/string-transformer nil @@ -349,6 +363,8 @@ [:graph-uuid :uuid] [:schema-version db-schema/major-schema-version-string-schema] [:asset-uuids [:sequential :uuid]]]] + ;; ================================================================ + ;; TODO: cleanup ["get-user-devices" [:map]] ["add-user-device" @@ -373,6 +389,18 @@ ["sync-encrypted-aes-key" [:map [:device-uuid->encrypted-aes-key [:map-of :uuid :string]] + [:graph-uuid :uuid]]] + ;; ================================================================ + ["upload-user-rsa-key-pair" + [:map + [:user-uuid :uuid] + [:public-key :string] + [:encrypted-private-key :string]]] + ["fetch-user-rsa-key-pair" + [:map + [:user-uuid :uuid]]] + ["fetch-graph-encrypted-aes-key" + [:map [:graph-uuid :uuid]]]]))) (def data-to-ws-encoder (m/encoder data-to-ws-schema (mt/transformer