mirror of https://github.com/logseq/logseq
Fixed encrypted object key
parent
093439d69e
commit
6141d66182
|
@ -47,28 +47,32 @@
|
|||
key)]
|
||||
(gobj/get key "k")))
|
||||
|
||||
(defn get-key-from-object-key
|
||||
[object-key]
|
||||
(js/window.crypto.subtle.importKey
|
||||
"jwk"
|
||||
(bean/->js
|
||||
{:k object-key
|
||||
:alg "A128GCM"
|
||||
:ext true
|
||||
:key_ops ["encrypt" "decrypt"]
|
||||
:kty "oct"})
|
||||
(bean/->js {:name "AES-GCM"
|
||||
:length 128})
|
||||
false
|
||||
(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 (js/window.crypto.subtle.importKey
|
||||
"jwk"
|
||||
(bean/->js
|
||||
{:k object-key
|
||||
:alg "A128GCM"
|
||||
:ext true
|
||||
:key_ops ["encrypt" "decrypt"]
|
||||
:kty "oct"})
|
||||
(bean/->js {:name "AES-GCM"
|
||||
:length 128})
|
||||
false
|
||||
(bean/->js ["decrypt"]))
|
||||
decrypted (js/window.crypto.subtle.decrypt
|
||||
(bean/->js
|
||||
{:name "AES-GCM"
|
||||
:iv (js/Uint8Array. 12)})
|
||||
key
|
||||
encrypted)
|
||||
decoded (.decode (js/window.TextDecoder.)
|
||||
(js/Uint8Array. decrypted))]
|
||||
(js/JSON.parse decoded))))
|
||||
(p/let [key (get-key-from-object-key object-key)
|
||||
decrypted (js/window.crypto.subtle.decrypt
|
||||
(bean/->js
|
||||
{:name "AES-GCM"
|
||||
:iv (js/Uint8Array. 12)})
|
||||
key
|
||||
encrypted)
|
||||
decoded (.decode (js/window.TextDecoder.)
|
||||
(js/Uint8Array. decrypted))]
|
||||
(js/JSON.parse decoded))))
|
||||
|
|
|
@ -1105,19 +1105,21 @@
|
|||
(defn set-github-token!
|
||||
[token]
|
||||
(state/set-github-token! token)
|
||||
(p/let [key (encrypt/generate-key)
|
||||
encrypted (encrypt/encrypt key token)
|
||||
base64-key (encrypt/base64-key key)]
|
||||
(state/set-encrypt-token! encrypted)
|
||||
(util/post (str config/api "encrypt_object_key")
|
||||
{:object-key base64-key}
|
||||
(fn []
|
||||
;; refresh the browser
|
||||
;; (set! (.-href js/window.location) "/")
|
||||
(let [me (:me @state/state)]
|
||||
(when (:repos me)
|
||||
(clone-and-pull-repos me))))
|
||||
(fn [_e]))))
|
||||
(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)
|
||||
object-key (or object-key
|
||||
(encrypt/base64-key key))]
|
||||
(state/set-encrypt-token! encrypted)
|
||||
(util/post (str config/api "encrypt_object_key")
|
||||
{:object-key object-key}
|
||||
(fn []
|
||||
(let [me (:me @state/state)]
|
||||
(when (:repos me)
|
||||
(clone-and-pull-repos me))))
|
||||
(fn [_e])))))
|
||||
|
||||
(defn start!
|
||||
[render]
|
||||
|
@ -1129,10 +1131,10 @@
|
|||
(when me (set-state-kv! :me me))
|
||||
(render)
|
||||
(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)]
|
||||
(->
|
||||
(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
|
||||
(let [token (string/trim token)]
|
||||
(state/set-github-token! token)
|
||||
|
|
Loading…
Reference in New Issue