Przeglądaj źródła

enhance(rtc,crypt): more device apis

rcmerci 1 rok temu
rodzic
commit
7ca6715923

+ 38 - 2
src/main/frontend/db/rtc/debug_ui.cljs

@@ -250,7 +250,8 @@
 
      [:hr.my-2]
 
-     (let [keys-state @(get state ::keys-state)]
+     (let [*keys-state (get state ::keys-state)
+           keys-state @*keys-state]
        [:div
         [:div.pb-2.flex.flex-row.items-center.gap-2
          (shui/button
@@ -269,4 +270,39 @@
                :graph-public-key-jwk (:public-key-jwk keys-state)
                :graph-private-key-jwk (:private-key-jwk keys-state)}
               (fipp/pprint {:width 20})
-              with-out-str)]]])]))
+              with-out-str)]]
+        (shui/button
+         {:size :sm
+          :on-click (fn [_]
+                      (let [^object worker @db-browser/*worker]
+                        (when-let [device-uuid (:remove-device-device-uuid keys-state)]
+                          (when-let [token (state/get-auth-id-token)]
+                            (.device-remove-device worker token device-uuid)))))}
+         "Remove device:")
+        [:input.form-input.my-2.py-1.w-32
+         {:on-change (fn [e] (swap! *keys-state assoc :remove-device-device-uuid (util/evalue e)))
+          :on-focus (fn [e] (let [v (.-value (.-target e))]
+                              (when (= v "device-uuid here")
+                                (set! (.-value (.-target e)) ""))))
+          :placeholder "device-uuid here"}]
+        (shui/button
+         {:size :sm
+          :on-click (fn [_]
+                      (let [^object worker @db-browser/*worker]
+                        (when-let [device-uuid (:remove-public-key-device-uuid keys-state)]
+                          (when-let [key-name (:remove-public-key-key-name keys-state)]
+                            (when-let [token (state/get-auth-id-token)]
+                              (.device-remove-device-public-key worker token device-uuid key-name))))))}
+         "Remove public-key:")
+        [:input.form-input.my-2.py-1.w-32
+         {:on-change (fn [e] (swap! *keys-state assoc :remove-public-key-device-uuid (util/evalue e)))
+          :on-focus (fn [e] (let [v (.-value (.-target e))]
+                              (when (= v "device-uuid here")
+                                (set! (.-value (.-target e)) ""))))
+          :placeholder "device-uuid here"}]
+        [:input.form-input.my-2.py-1.w-32
+         {:on-change (fn [e] (swap! *keys-state assoc :remove-public-key-key-name (util/evalue e)))
+          :on-focus (fn [e] (let [v (.-value (.-target e))]
+                              (when (= v "key-name here")
+                                (set! (.-value (.-target e)) ""))))
+          :placeholder "key-name here"}]])]))

+ 6 - 1
src/main/frontend/worker/db_worker.cljs

@@ -838,11 +838,16 @@
    (with-write-transit-str
      (js/Promise. (worker-device/new-task--list-devices token))))
 
-  (device-add-remove-device-public-key
+  (device-remove-device-public-key
    [this token device-uuid key-name]
    (with-write-transit-str
      (js/Promise. (worker-device/new-task--remove-device-public-key token device-uuid key-name))))
 
+  (device-remove-device
+   [this token device-uuid]
+   (with-write-transit-str
+     (js/Promise. (worker-device/new-task--remove-device token device-uuid))))
+
   (undo
    [_this repo _page-block-uuid-str]
    (when-let [conn (worker-state/get-datascript-conn repo)]

+ 28 - 11
src/main/frontend/worker/device.cljs

@@ -25,6 +25,10 @@
   (when (and key' @store)
     (idb-keyval/set key' value @store)))
 
+(defn- <remove-item!
+  [key']
+  (idb-keyval/del key' @store))
+
 (def ^:private item-key-device-id "device-id")
 (def ^:private item-key-device-name "device-name")
 (def ^:private item-key-device-created-at "device-created-at")
@@ -46,16 +50,17 @@
   (m/join :device (ws-util/send&recv get-ws-create-task {:action "add-user-device"
                                                          :device-name device-name})))
 
-(defn- new-task--remove-user-device
+(defn- new-task--remove-user-device*
   [get-ws-create-task device-uuid]
   (ws-util/send&recv get-ws-create-task {:action "remove-user-device"
                                          :device-uuid device-uuid}))
 
-(defn- new-task--update-user-device-name
-  [get-ws-create-task device-uuid device-name]
-  (ws-util/send&recv get-ws-create-task {:action "update-user-device-name"
-                                         :device-uuid device-uuid
-                                         :device-name device-name}))
+(comment
+  (defn- new-task--update-user-device-name
+    [get-ws-create-task device-uuid device-name]
+    (ws-util/send&recv get-ws-create-task {:action "update-user-device-name"
+                                           :device-uuid device-uuid
+                                           :device-name device-name})))
 
 (defn- new-task--add-device-public-key
   [get-ws-create-task device-uuid key-name public-key-jwk]
@@ -122,7 +127,9 @@
   (m/sp
     (let [get-ws-create-task (new-get-ws-create-task token)
           devices (m/? (new-task--get-user-devices get-ws-create-task))]
-      (when ;; check current device has been synced to remote
+      (when
+          ;; check current device has been synced to remote
+          ;; if not exists in remote, remove local-metadata and recreate in local and remote
        (and @*device-id @*device-name @*device-public-key
             (not (some
                   (fn [device]
@@ -130,10 +137,13 @@
                       (when (= device-id (str @*device-id))
                         true)))
                   devices)))
-        (m/? (new-task--add-user-device get-ws-create-task @*device-name))
-        (let [public-key-jwk (c.m/<? (crypt/<export-key *device-public-key))]
-          (m/? (new-task--add-device-public-key
-                get-ws-create-task @*device-id "default-public-key" public-key-jwk))))
+        (c.m/<? (<remove-item! item-key-device-id))
+        (c.m/<? (<remove-item! item-key-device-name))
+        (c.m/<? (<remove-item! item-key-device-created-at))
+        (c.m/<? (<remove-item! item-key-device-updated-at))
+        (c.m/<? (<remove-item! item-key-device-public-key-jwk))
+        (c.m/<? (<remove-item! item-key-device-private-key-jwk))
+        (m/? (new-task--ensure-device-metadata! token)))
       devices)))
 
 (defn new-task--remove-device-public-key
@@ -143,3 +153,10 @@
     (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-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*))))))

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

@@ -275,7 +275,7 @@
      [:map
       [:req-id :string]
       [:action :string]
-      [:device-uuid :string]]]
+      [:device-uuid :uuid]]]
     ["update-user-device-name"
      [:map
       [:req-id :string]