Fixed encrypted object key

pull/645/head
Tienson Qin 2020-05-29 10:11:24 +08:00
parent 093439d69e
commit 6141d66182
2 changed files with 42 additions and 36 deletions

View File

@ -47,11 +47,9 @@
key)] key)]
(gobj/get key "k"))) (gobj/get key "k")))
(defn decrypt (defn get-key-from-object-key
[object-key encrypted] [object-key]
;; Build the key using object-key and decrypt the content (js/window.crypto.subtle.importKey
(let [encrypted (str->array-buffer encrypted)]
(p/let [key (js/window.crypto.subtle.importKey
"jwk" "jwk"
(bean/->js (bean/->js
{:k object-key {:k object-key
@ -62,7 +60,13 @@
(bean/->js {:name "AES-GCM" (bean/->js {:name "AES-GCM"
:length 128}) :length 128})
false false
(bean/->js ["decrypt"])) (bean/->js ["encrypt" "decrypt"])))
(defn decrypt
[object-key encrypted]
;; Build the key using object-key and decrypt the content
(let [encrypted (str->array-buffer encrypted)]
(p/let [key (get-key-from-object-key object-key)
decrypted (js/window.crypto.subtle.decrypt decrypted (js/window.crypto.subtle.decrypt
(bean/->js (bean/->js
{:name "AES-GCM" {:name "AES-GCM"

View File

@ -1105,19 +1105,21 @@
(defn set-github-token! (defn set-github-token!
[token] [token]
(state/set-github-token! token) (state/set-github-token! token)
(p/let [key (encrypt/generate-key) (let [object-key (get-in @state/state [:me :encrypt_object_key])]
(p/let [key (if object-key
(encrypt/get-key-from-object-key object-key)
(encrypt/generate-key))
encrypted (encrypt/encrypt key token) encrypted (encrypt/encrypt key token)
base64-key (encrypt/base64-key key)] object-key (or object-key
(encrypt/base64-key key))]
(state/set-encrypt-token! encrypted) (state/set-encrypt-token! encrypted)
(util/post (str config/api "encrypt_object_key") (util/post (str config/api "encrypt_object_key")
{:object-key base64-key} {:object-key object-key}
(fn [] (fn []
;; refresh the browser
;; (set! (.-href js/window.location) "/")
(let [me (:me @state/state)] (let [me (:me @state/state)]
(when (:repos me) (when (:repos me)
(clone-and-pull-repos me)))) (clone-and-pull-repos me))))
(fn [_e])))) (fn [_e])))))
(defn start! (defn start!
[render] [render]
@ -1129,10 +1131,10 @@
(when me (set-state-kv! :me me)) (when me (set-state-kv! :me me))
(render) (render)
(when me (when me
(when-let [base64-key (:encrypt_object_key me)] (when-let [object-key (:encrypt_object_key me)]
(when-let [encrypted-token (state/get-encrypted-token)] (when-let [encrypted-token (state/get-encrypted-token)]
(-> (->
(p/let [token (encrypt/decrypt base64-key encrypted-token)] (p/let [token (encrypt/decrypt object-key encrypted-token)]
;; FIXME: Sometimes it has spaces in the front ;; FIXME: Sometimes it has spaces in the front
(let [token (string/trim token)] (let [token (string/trim token)]
(state/set-github-token! token) (state/set-github-token! token)