فهرست منبع

fix(rtc,crypt): devices list

rcmerci 1 سال پیش
والد
کامیت
dfea8b6d44
3فایلهای تغییر یافته به همراه38 افزوده شده و 24 حذف شده
  1. 19 18
      src/main/frontend/worker/crypt.cljs
  2. 5 0
      src/main/frontend/worker/db_worker.cljs
  3. 14 6
      src/main/frontend/worker/device.cljs

+ 19 - 18
src/main/frontend/worker/crypt.cljs

@@ -1,27 +1,28 @@
 (ns frontend.worker.crypt
   "Fns to en/decrypt some block attrs"
-  (:require [promesa.core :as p]
+  (:require [datascript.core :as d]
             [frontend.worker.state :as worker-state]
-            [datascript.core :as d]))
+            [promesa.core :as p]))
 
-(defonce ^:private encoder (new js/TextEncoder "utf-8"))
-(defonce ^:private decoder (new js/TextDecoder "utf-8"))
+(comment
+  (defonce ^:private encoder (new js/TextEncoder "utf-8"))
+  (defonce ^:private decoder (new js/TextDecoder "utf-8"))
 
-(defn <encrypt
-  [message public-key]
-  (let [data (.encode encoder message)]
-    (js/crypto.subtle.encrypt
-     #js{:name "RSA-OAEP"}
-     public-key
-     data)))
+  (defn <encrypt
+    [message public-key]
+    (let [data (.encode encoder message)]
+      (js/crypto.subtle.encrypt
+       #js{:name "RSA-OAEP"}
+       public-key
+       data)))
 
-(defn <decrypt
-  [cipher-text private-key]
-  (p/let [result (js/crypto.subtle.decrypt
-                  #js{:name "RSA-OAEP"}
-                  private-key
-                  cipher-text)]
-    (.decode decoder result)))
+  (defn <decrypt
+    [cipher-text private-key]
+    (p/let [result (js/crypto.subtle.decrypt
+                    #js{:name "RSA-OAEP"}
+                    private-key
+                    cipher-text)]
+      (.decode decoder result))))
 
 (defonce ^:private key-algorithm
   #js{:name "RSA-OAEP"

+ 5 - 0
src/main/frontend/worker/db_worker.cljs

@@ -838,6 +838,11 @@
    (with-write-transit-str
      (js/Promise. (worker-device/new-task--list-devices token))))
 
+  (device-add-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))))
+
   (undo
    [_this repo _page-block-uuid-str]
    (when-let [conn (worker-state/get-datascript-conn repo)]

+ 14 - 6
src/main/frontend/worker/device.cljs

@@ -64,7 +64,7 @@
                                          :key-name key-name
                                          :public-key (ldb/write-transit-str public-key-jwk)}))
 
-(defn- new-task--remove-device-public-key
+(defn- new-task--remove-device-public-key*
   [get-ws-create-task device-uuid key-name]
   (ws-util/send&recv get-ws-create-task {:action "remove-device-public-key"
                                          :device-uuid device-uuid
@@ -91,7 +91,7 @@
                                       (:brand (first (:brands agent-data)))
                                       (tc/to-epoch (t/now))])
               {:keys [device-id device-name created-at updated-at]}
-              (new-task--add-user-device get-ws-create-task generated-device-name)
+              (m/? (new-task--add-user-device get-ws-create-task generated-device-name))
               {:keys [publicKey privateKey]} (c.m/<? (crypt/<gen-key-pair))
               public-key-jwk (c.m/<? (crypt/<export-key publicKey))
               private-key-jwk (c.m/<? (crypt/<export-key privateKey))]
@@ -127,11 +127,19 @@
             (not (some
                   (fn [device]
                     (let [{:keys [device-id]} device]
-                      (when (= device-id @*device-id)
+                      (when (= device-id (str @*device-id))
                         true)))
                   devices)))
         (m/? (new-task--add-user-device get-ws-create-task @*device-name))
-        (m/? (new-task--add-device-public-key
-              get-ws-create-task @*device-id "default-public-key" @*device-public-key)))
-      (prn :debug-devices devices)
+        (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))))
       devices)))
+
+(defn new-task--remove-device-public-key
+  [token device-uuid key-name]
+  (assert (some? key-name))
+  (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-device-public-key* get-ws-create-task device-uuid* key-name))))))