enhance(e2ee): store aes encrypted password in OPFS

so no need to input password repeatly
This commit is contained in:
Tienson Qin
2025-11-11 03:17:32 +08:00
parent c9e023a187
commit c19a333d90
6 changed files with 124 additions and 25 deletions

View File

@@ -1,20 +1,31 @@
(ns frontend.handler.events.rtc
"RTC events"
(:require [frontend.components.e2ee :as e2ee]
(:require [frontend.common.crypt :as crypt]
[frontend.components.e2ee :as e2ee]
[frontend.handler.events :as events]
[frontend.state :as state]
[logseq.shui.ui :as shui]
[promesa.core :as p]))
(defmethod events/handle :rtc/decrypt-user-e2ee-private-key [[_ encrypted-private-key]]
(let [private-key-promise (p/deferred)]
(let [private-key-promise (p/deferred)
refresh-token (state/get-auth-refresh-token)]
(shui/dialog-close-all!)
(shui/dialog-open!
#(e2ee/e2ee-password-to-decrypt-private-key encrypted-private-key private-key-promise)
{:auto-width? true
:content-props {:onPointerDownOutside #(.preventDefault %)}
:on-close (fn []
(p/reject! private-key-promise (ex-info "input E2EE password cancelled" {}))
(shui/dialog-close!))})
(->
(p/let [{:keys [password]} (state/<invoke-db-worker :thread-api/get-e2ee-password refresh-token)
private-key (crypt/<decrypt-private-key password encrypted-private-key)]
(p/resolve! private-key-promise private-key))
(p/catch
(fn [error]
(prn :debug :read-e2ee-password-failed)
(js/console.error error)
(shui/dialog-open!
#(e2ee/e2ee-password-to-decrypt-private-key encrypted-private-key private-key-promise refresh-token)
{:auto-width? true
:content-props {:onPointerDownOutside #(.preventDefault %)}
:on-close (fn []
(p/reject! private-key-promise (ex-info "input E2EE password cancelled" {}))
(shui/dialog-close!))}))))
private-key-promise))
(defmethod events/handle :rtc/request-e2ee-password [[_]]