Browse Source

fix(rtc,e2ee): fix reset-password when local-cached pwd expired

rcmerci 3 weeks ago
parent
commit
28a0ceb005

+ 3 - 6
src/main/frontend/components/repo.cljs

@@ -454,7 +454,6 @@
 (rum/defc new-db-graph
   []
   (let [[creating-db? set-creating-db?] (hooks/use-state false)
-        [graph-name set-graph-name] (hooks/use-state "")
         [cloud? set-cloud?] (hooks/use-state false)
         [e2ee-rsa-key-ensured? set-e2ee-rsa-key-ensured?] (hooks/use-state nil)
         input-ref (hooks/create-ref)]
@@ -463,7 +462,7 @@
        (when-let [^js input (hooks/deref input-ref)]
          (js/setTimeout #(.focus input) 32)))
      [])
-    (letfn [(new-db-f []
+    (letfn [(new-db-f [graph-name]
               (when-not (or (string/blank? graph-name)
                             creating-db?)
                 (if (invalid-graph-name? graph-name)
@@ -487,12 +486,10 @@
             (submit! [^js e click?]
               (when-let [value (and (or click? (= (gobj/get e "key") "Enter"))
                                     (util/trim-safe (.-value (rum/deref input-ref))))]
-                (set-graph-name value)
-                (new-db-f)))]
+                (new-db-f value)))]
       [:div.new-graph.flex.flex-col.gap-4.p-1.pt-2
        (shui/input
-        {:default-value graph-name
-         :disabled creating-db?
+        {:disabled creating-db?
          :ref input-ref
          :placeholder "your graph name"
          :on-key-down submit!

+ 5 - 6
src/main/frontend/components/settings.cljs

@@ -1237,6 +1237,7 @@ and you will need to re-upload the graphs from the client after resetting the pa
 
 (rum/defc reset-encryption-password
   [current-password new-password {:keys [set-new-password!
+                                         set-current-password!
                                          reset-password-status
                                          on-click]}]
   (let [[reset? set-reset!] (hooks/use-state false)]
@@ -1246,7 +1247,7 @@ and you will need to re-upload the graphs from the client after resetting the pa
        (shui/toggle-password
         {:id "current-password"
          :value current-password
-         :disabled true})
+         :on-change #(set-current-password! (util/evalue %))})
        [:label.opacity-70 {:for "new-password"} "Set new Password"]
        (shui/toggle-password
         {:id "new-password"
@@ -1271,7 +1272,6 @@ and you will need to re-upload the graphs from the client after resetting the pa
          [init-key-err set-init-key-err!] (hooks/use-state nil)
          [get-key-err set-get-key-err!] (hooks/use-state nil)
          [current-password set-current-password!] (hooks/use-state nil)
-         [get-password-err set-get-password-err!] (hooks/use-state nil)
          [new-password set-new-password!] (hooks/use-state nil)
          [reset-password-status set-reset-password-status!] (hooks/use-state nil)]
      (hooks/use-effect!
@@ -1282,15 +1282,13 @@ and you will need to re-upload the graphs from the client after resetting the pa
               (p/catch set-get-key-err!))
           (-> (p/let [{:keys [password]} (state/<invoke-db-worker :thread-api/get-e2ee-password refresh-token)]
                 (set-current-password! password))
-              (p/catch set-get-password-err!))))
+              (p/catch (fn [_] (set-current-password! ""))))))
       [user-uuid token])
      [:div.flex.flex-col.gap-2.mt-4
       (when (and user-uuid token)
         (cond
           get-key-err
           [:p (str "Fetching user rsa-key-pair err: " get-key-err)]
-          get-password-err
-          [:p (str "Failed to get current password: " get-password-err)]
           (= rsa-key-pair :not-inited)
           [:p "Fetching user rsa-key-pair..."]
           (nil? rsa-key-pair)
@@ -1312,7 +1310,7 @@ and you will need to re-upload the graphs from the client after resetting the pa
                             (-> (p/do!
                                  (set-reset-password-status! "Updating password ...")
                                  (state/<invoke-db-worker :thread-api/reset-e2ee-password
-                                                          token refresh-token user-uuid new-password)
+                                                          token refresh-token user-uuid current-password new-password)
                                  (set-reset-password-status! "Password updated successfully!"))
                                 (p/catch (fn [e]
                                            (log/error :reset-password-failed e)
@@ -1333,6 +1331,7 @@ and you will need to re-upload the graphs from the client after resetting the pa
              (reset-encryption-password current-password new-password
                                         {:reset-password-status reset-password-status
                                          :set-new-password! set-new-password!
+                                         :set-current-password! set-current-password!
                                          :on-click on-submit})
 
              [:br]

+ 8 - 6
src/main/frontend/worker/rtc/crypt.cljs

@@ -184,11 +184,10 @@
 
 (defn task--reset-user-rsa-private-key
   "Throw if decrypt encrypted-private-key failed."
-  [get-ws-create-task refresh-token user-uuid new-password]
+  [get-ws-create-task refresh-token user-uuid old-password new-password]
   (m/sp
     (let [{:keys [public-key encrypted-private-key]}
           (m/? (task--fetch-user-rsa-key-pair get-ws-create-task user-uuid))
-          old-password (c.m/<? (<read-e2ee-password refresh-token))
           private-key (c.m/<? (crypt/<decrypt-private-key old-password encrypted-private-key))
           new-encrypted-private-key (c.m/<? (crypt/<encrypt-private-key new-password private-key))]
       (m/? (task--upload-user-rsa-key-pair get-ws-create-task user-uuid public-key new-encrypted-private-key
@@ -261,15 +260,18 @@
       (catch :default e e))))
 
 (def-thread-api :thread-api/reset-e2ee-password
-  [token refresh-token user-uuid new-password]
+  [token refresh-token user-uuid old-password new-password]
   (m/sp
     (let [{:keys [get-ws-create-task]} (ws-util/gen-get-ws-create-map--memoized (ws-util/get-ws-url token))]
-      (m/? (task--reset-user-rsa-private-key get-ws-create-task refresh-token user-uuid new-password)))))
+      (m/? (task--reset-user-rsa-private-key get-ws-create-task refresh-token user-uuid old-password new-password)))))
 
 (def-thread-api :thread-api/get-e2ee-password
   [refresh-token]
-  (p/let [password (<read-e2ee-password refresh-token)]
-    {:password password}))
+  (-> (p/let [password (<read-e2ee-password refresh-token)]
+        {:password password})
+      (p/catch (fn [e]
+                 (log/error :read-e2ee-password e)
+                 (ex-info ":thread-api/get-e2ee-password" {})))))
 
 (def-thread-api :thread-api/save-e2ee-password
   [refresh-token password]