mirror of
https://github.com/logseq/logseq.git
synced 2026-05-23 12:14:06 +00:00
fix(sync): tolerate legacy plaintext decrypt values
This commit is contained in:
@@ -27,6 +27,13 @@
|
||||
(def ^:private invalid-coerce ::invalid-coerce)
|
||||
(def ^:private invalid-transit ::invalid-transit)
|
||||
|
||||
(defn- read-transit-safe
|
||||
[value]
|
||||
(try
|
||||
(ldb/read-transit-str value)
|
||||
(catch :default _
|
||||
invalid-transit)))
|
||||
|
||||
(defn- native-worker?
|
||||
[]
|
||||
native-env?)
|
||||
@@ -504,12 +511,17 @@
|
||||
(defn <decrypt-text-value
|
||||
[aes-key value]
|
||||
(assert (string? value) (str "encrypted value should be a string, value: " value))
|
||||
(let [decoded (ldb/read-transit-str value)]
|
||||
(let [decoded (read-transit-safe value)]
|
||||
(if (= decoded invalid-transit)
|
||||
(p/resolved value)
|
||||
(p/let [value (crypt/<decrypt-text-if-encrypted aes-key decoded)
|
||||
value' (ldb/read-transit-str value)]
|
||||
value'))))
|
||||
(p/let [value (or (crypt/<decrypt-text-if-encrypted aes-key decoded)
|
||||
decoded)
|
||||
value' (if (string? value)
|
||||
(read-transit-safe value)
|
||||
value)]
|
||||
(if (= value' invalid-transit)
|
||||
value
|
||||
value')))))
|
||||
|
||||
(defn- encrypt-tx-item
|
||||
[aes-key item]
|
||||
|
||||
@@ -115,3 +115,16 @@
|
||||
(is (= "decrypt-aes-key" (ex-message e)))
|
||||
(is (zero? @clear-user-rsa-cache-calls*))
|
||||
(done)))))))
|
||||
|
||||
(deftest decrypt-text-value-legacy-plaintext-test
|
||||
(async done
|
||||
(-> (p/let [aes-key (crypt/<generate-aes-key)
|
||||
plaintext "$$$favorites"
|
||||
encrypted (crypt/<encrypt-uint8array aes-key (.encode (js/TextEncoder.) plaintext))
|
||||
encrypted-str (ldb/write-transit-str encrypted)
|
||||
decrypted (sync-crypt/<decrypt-text-value aes-key encrypted-str)]
|
||||
(is (= plaintext decrypted))
|
||||
(done))
|
||||
(p/catch (fn [e]
|
||||
(is false (str e))
|
||||
(done))))))
|
||||
|
||||
Reference in New Issue
Block a user