#matrix-sdk #store #cache #privacy-preserving

matrix-sdk-store-media-cache-wrapper

将任何matrix-sdk状态存储包装起来,以将媒体文件存储在单独的目录中

2个版本

0.1.1 2024年2月22日
0.1.0+pre.02024年2月22日

#1450数据库接口

MIT/Apache

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