2个版本
0.1.1 | 2024年2月22日 |
---|---|
0.1.0+pre.0 | 2024年2月22日 |
#1450 在 数据库接口
27KB
600 行
Matrix SDK Store Media Cache Wrapper
这是一个基于文件存储的、安全的隐私保护包装器,适用于任何Matrix SDK存储:而不是使用默认的媒体下载存储机制,这个包装器将使用提供的目标路径。
这对于移动端特别有用,当使用sqlite存储时,这允许你将重要的sqlite存储和加密密钥分离到用户文档目录中,同时允许下载的任何媒体文件在缓存目录中单独存储,可以安全地清除。因此,允许最终用户清除缓存并释放大量存储空间,而不会影响任何重要或潜在危险的内容。
最低支持的Rust版本是1.70.0。
安装
cargo add matrix-sdk-store-media-cache-wrapper
用法
要使用存储,只需使用 wrap_with_file_cache
函数包装你的现有存储。这是一个辅助函数,将使用提供的存储来保持一致的 StoreCipher
可用。这也意味着它只适用于同一路径,当你继续使用相同的存储时。
示例(有关更多详细信息,请查看嵌入的测试)
// assuming this is all set up:
let db_path = tempfile::tempdir()?;
let cache_dir = tempfile::tempdir()?;
let passphrase = Uuid::new_v4().to_string();
let db = SqliteStateStore::open(db_path, Some(&passphrase)).await?;
let outer = matrix_sdk_store_media_cache_wrapper::wrap_with_file_cache(db, cache_dir.path().to_path_buf(), &passphrase).await?;
// implements matrix_sdk_store::StateStore
// use as regular state store before.P
outer
.add_media_content(&fake_mr(my_item_id), some_content.into())
.await?;
安全性
文件以及存储文件的文件路径都由提供的默认实现 FileCacheMediaStore
加密。你必须提供正确设置的存储加密器才能使其工作。使用 wrap_with_file_cache
辅助函数,所有这些都会为你处理。
因为数据是针对特定存储的,所以存储的文件也将是特定于所使用的存储的。如果你有多个存储,你不能重用相同的文件。从理论上讲,存储文件名的创建不应发生冲突,但我们建议为每个存储保留单独的数据存储目录,以避免这个问题。
兼容性
测试套件是在使用 matrix-sdk-sqlite
SqliteStore
的情况下运行的。尽管没有理由相信它不应该与任何实现 StateStore
-接口的存储一起工作,但这只是它成功测试过的唯一一个。
这是 Acter 的一部分,我们为iOS、Android和Linux、MacOS & Windows提供定期发布,至少支持最新的稳定版本。这个crate包含在其中,因此这些环境会不断进行测试。
许可证
此crate根据MIT或Apache-2.0提供。版权所有 Benjamin Kampmann & Acter 贡献者 2023。
依赖关系
~18-24MB
~460K SLoC