|
|
|
@ -5,13 +5,49 @@ |
|
|
|
* |
|
|
|
*/ |
|
|
|
import type { Pinia } from 'pinia'; |
|
|
|
import { createPersistedState } from 'pinia-plugin-persistedstate'; |
|
|
|
import { createPersistedState, Serializer } from 'pinia-plugin-persistedstate'; |
|
|
|
import type { PersistedStateFactoryOptions } from 'pinia-plugin-persistedstate'; |
|
|
|
import { getCommonStoragePrefix } from '@/utils/env'; |
|
|
|
import { Encryption, EncryptionFactory } from '@/utils/cipher'; |
|
|
|
import { cacheCipher, SHOULD_ENABLE_STORAGE_ENCRYPTION } from '@/settings/encryptionSetting'; |
|
|
|
|
|
|
|
export const PERSIST_KEY_PREFIX = getCommonStoragePrefix(); |
|
|
|
|
|
|
|
// TODO customSerializer
|
|
|
|
const persistEncryption: Encryption = EncryptionFactory.createAesEncryption({ |
|
|
|
key: cacheCipher.key, |
|
|
|
iv: cacheCipher.iv, |
|
|
|
}); |
|
|
|
|
|
|
|
/** |
|
|
|
* Custom serializer for serialization and deserialization of storage data |
|
|
|
* 自定义序列化器,用于序列化和反序列化存储数据 |
|
|
|
* |
|
|
|
* @param shouldEnableEncryption whether to enable encryption for storage data 是否启用存储数据加密 |
|
|
|
* @returns serializer |
|
|
|
*/ |
|
|
|
function customSerializer(shouldEnableEncryption: boolean): Serializer { |
|
|
|
if (shouldEnableEncryption) { |
|
|
|
return { |
|
|
|
deserialize: (value) => { |
|
|
|
const decrypted = persistEncryption.decrypt(value); |
|
|
|
return JSON.parse(decrypted); |
|
|
|
}, |
|
|
|
serialize: (value) => { |
|
|
|
const serialized = JSON.stringify(value); |
|
|
|
return persistEncryption.encrypt(serialized); |
|
|
|
}, |
|
|
|
}; |
|
|
|
} else { |
|
|
|
return { |
|
|
|
deserialize: (value) => { |
|
|
|
return JSON.parse(value); |
|
|
|
}, |
|
|
|
serialize: (value) => { |
|
|
|
return JSON.stringify(value); |
|
|
|
}, |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Register Pinia Persist Plugin |
|
|
|
@ -34,5 +70,6 @@ export function createPersistedStateOptions(keyPrefix: string): PersistedStateFa |
|
|
|
return { |
|
|
|
storage: localStorage, |
|
|
|
key: (id) => `${keyPrefix}__${id}`, |
|
|
|
serializer: customSerializer(SHOULD_ENABLE_STORAGE_ENCRYPTION), |
|
|
|
}; |
|
|
|
} |
|
|
|
|