2 releases

0.1.0-beta.2 May 23, 2022
0.1.0-beta.1 May 12, 2022

#2268 in Database interfaces

37 downloads per month

Apache-2.0

155KB
3K SLoC

SQL StateStore for matrix-sdk

Build Status Code Coverage License Docs - Main Version

This crate allows you to use your postgres/sqlite database as a state and crypto store for matrix-sdk.

Crate Features

  • rustls: Enables the rustls TLS backend in sqlx and matrix-sdk
  • native-tls: Enables the native-tls TLS backend in sqlx and matrix-sdk (enabled by default)
  • postgres: Enables support for postgres databases (enabled by default)
  • sqlite: Enables support for sqlite databases
  • e2e-encryption Enables the CryptoStore

Exactly one of rustls and native-tls need to be enabled. At least one of postgres or sqlite must be enabled.

Minimum Supported Rust Version

The MSRV is currently 1.60.0.

Increasing the MSRV is a breaking change.

Usage

This crate integrates with your existing SQLx database pool.


let sql_pool: Arc<sqlx::Pool<DB>> = /* ... */;
// Create the  store config
let store_config = matrix_sdk_sql::store_config(sql_pool, Some(std::env::var("MYAPP_SECRET_KEY")?)).await?;

After that you can pass it into your client builder as follows:

let client_builder = Client::builder()
                    /* ... */
                     .store_config(store_config)

CryptoStore

Enabling the e2e-encryption feature enables cryptostore functionality. To protect encryption session information, the contents of the tables are encrypted in the same manner as in matrix-sdk-sled.

Before you can use cryptostore functionality, you need to unlock the cryptostore:

let mut state_store = /* as above */;

state_store.unlock_with_passphrase(std::env::var("MYAPP_SECRET_KEY")?).await?;

If you are using the store_config function, the store will be automatically unlocked for you.

Authors

License

This project is licensed under the Apache-2.0 License - see the LICENSE.md file for details

Acknowledgments

Contributors

DarkKirb
Charlotte

Dependencies

~13–34MB
~614K SLoC