Merge remote-tracking branch 'origin/master' into feature/qrcode-feature
This commit is contained in:
commit
349e3cae06
16 changed files with 179 additions and 151 deletions
|
@ -1,28 +1,16 @@
|
||||||
[![Build Status](https://img.shields.io/travis/matrix-org/matrix-rust-sdk.svg?style=flat-square)](https://travis-ci.org/matrix-org/matrix-rust-sdk)
|
|
||||||
[![codecov](https://img.shields.io/codecov/c/github/matrix-org/matrix-rust-sdk/master.svg?style=flat-square)](https://codecov.io/gh/matrix-org/matrix-rust-sdk)
|
|
||||||
[![License](https://img.shields.io/badge/License-Apache%202.0-yellowgreen.svg?style=flat-square)](https://opensource.org/licenses/Apache-2.0)
|
|
||||||
[![#matrix-rust-sdk](https://img.shields.io/badge/matrix-%23matrix--rust--sdk-blue?style=flat-square)](https://matrix.to/#/#matrix-rust-sdk:matrix.org)
|
|
||||||
|
|
||||||
# matrix-qrcode
|
|
||||||
|
|
||||||
**matrix-qrcode** is a crate to easily generate and parse QR codes for
|
**matrix-qrcode** is a crate to easily generate and parse QR codes for
|
||||||
interactive verification using [QR codes] in Matrix.
|
interactive verification using [QR codes] in Matrix.
|
||||||
|
|
||||||
[Matrix]: https://matrix.org/
|
|
||||||
[Rust]: https://www.rust-lang.org/
|
|
||||||
[QR codes]: https://spec.matrix.org/unstable/client-server-api/#qr-codes
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
This is probably not the crate you are looking for, it's used internally in the
|
This is probably not the crate you are looking for, it's used internally in the
|
||||||
matrix-rust-sdk.
|
[matrix-sdk].
|
||||||
|
|
||||||
If you still want to play with QR codes, here are a couple of helpful examples.
|
If you still want to play with QR codes, here are a couple of helpful examples.
|
||||||
|
|
||||||
|
|
||||||
### Decode an image
|
### Decode an image
|
||||||
|
|
||||||
```rust
|
```rust,no_run
|
||||||
use image;
|
use image;
|
||||||
use matrix_qrcode::{QrVerificationData, DecodingError};
|
use matrix_qrcode::{QrVerificationData, DecodingError};
|
||||||
|
|
||||||
|
@ -36,7 +24,7 @@ fn main() -> Result<(), DecodingError> {
|
||||||
|
|
||||||
### Encode into a QR code
|
### Encode into a QR code
|
||||||
|
|
||||||
```rust
|
```rust,no_run
|
||||||
use matrix_qrcode::{QrVerificationData, DecodingError};
|
use matrix_qrcode::{QrVerificationData, DecodingError};
|
||||||
use image::Luma;
|
use image::Luma;
|
||||||
|
|
||||||
|
@ -56,7 +44,5 @@ fn main() -> Result<(), DecodingError> {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
[matrix-sdk]: https://github.com/matrix-org/matrix-rust-sdk/
|
||||||
## License
|
[QR codes]: https://spec.matrix.org/unstable/client-server-api/#qr-codes
|
||||||
|
|
||||||
[Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0)
|
|
||||||
|
|
|
@ -12,24 +12,7 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
//! This crate implements methods to parse and generate QR codes that are used
|
#![doc = include_str!("../README.md")]
|
||||||
//! for interactive verification in [Matrix](https://matrix.org/).
|
|
||||||
//!
|
|
||||||
//! It implements the QR format defined in the Matrix [spec].
|
|
||||||
//!
|
|
||||||
//! [spec]: https://spec.matrix.org/unstable/client-server-api/#qr-code-format
|
|
||||||
//!
|
|
||||||
//! ```no_run
|
|
||||||
//! # use matrix_qrcode::{QrVerificationData, DecodingError};
|
|
||||||
//! # fn main() -> Result<(), DecodingError> {
|
|
||||||
//! use image;
|
|
||||||
//!
|
|
||||||
//! let image = image::open("/path/to/my/image.png").unwrap();
|
|
||||||
//! let result = QrVerificationData::from_image(image)?;
|
|
||||||
//! # Ok(())
|
|
||||||
//! # }
|
|
||||||
//! ```
|
|
||||||
|
|
||||||
#![cfg_attr(feature = "docs", feature(doc_cfg))]
|
#![cfg_attr(feature = "docs", feature(doc_cfg))]
|
||||||
#![deny(
|
#![deny(
|
||||||
missing_debug_implementations,
|
missing_debug_implementations,
|
||||||
|
|
|
@ -21,7 +21,7 @@ encryption = ["matrix-sdk-base/encryption"]
|
||||||
qrcode = ["encryption", "matrix-sdk-base/qrcode"]
|
qrcode = ["encryption", "matrix-sdk-base/qrcode"]
|
||||||
sled_state_store = ["matrix-sdk-base/sled_state_store"]
|
sled_state_store = ["matrix-sdk-base/sled_state_store"]
|
||||||
sled_cryptostore = ["matrix-sdk-base/sled_cryptostore"]
|
sled_cryptostore = ["matrix-sdk-base/sled_cryptostore"]
|
||||||
markdown = ["matrix-sdk-base/markdown"]
|
markdown = ["ruma/markdown"]
|
||||||
native-tls = ["reqwest/native-tls"]
|
native-tls = ["reqwest/native-tls"]
|
||||||
rustls-tls = ["reqwest/rustls-tls"]
|
rustls-tls = ["reqwest/rustls-tls"]
|
||||||
socks = ["reqwest/socks"]
|
socks = ["reqwest/socks"]
|
||||||
|
@ -59,7 +59,7 @@ version = "0.11.3"
|
||||||
default_features = false
|
default_features = false
|
||||||
|
|
||||||
[dependencies.ruma]
|
[dependencies.ruma]
|
||||||
version = "0.3.0"
|
version = "0.4.0"
|
||||||
features = ["client-api-c", "compat", "unstable-pre-spec"]
|
features = ["client-api-c", "compat", "unstable-pre-spec"]
|
||||||
|
|
||||||
[dependencies.tokio-stream]
|
[dependencies.tokio-stream]
|
||||||
|
|
|
@ -1,16 +1,82 @@
|
||||||
[![Build Status](https://img.shields.io/travis/matrix-org/matrix-rust-sdk.svg?style=flat-square)](https://travis-ci.org/matrix-org/matrix-rust-sdk)
|
A [Matrix](https://matrix.org/) client library written in Rust.
|
||||||
[![codecov](https://img.shields.io/codecov/c/github/matrix-org/matrix-rust-sdk/master.svg?style=flat-square)](https://codecov.io/gh/matrix-org/matrix-rust-sdk)
|
|
||||||
[![License](https://img.shields.io/badge/License-Apache%202.0-yellowgreen.svg?style=flat-square)](https://opensource.org/licenses/Apache-2.0)
|
|
||||||
[![#matrix-rust-sdk](https://img.shields.io/badge/matrix-%23matrix--rust--sdk-blue?style=flat-square)](https://matrix.to/#/#matrix-rust-sdk:matrix.org)
|
|
||||||
|
|
||||||
# matrix-sdk
|
The matrix-sdk aims to be a general purpose client library for writing Matrix
|
||||||
|
clients, bots, and other Matrix related things that use the client-server API to
|
||||||
|
communicate with a Matrix homeserver.
|
||||||
|
|
||||||
**matrix-sdk** is an implementation of a [Matrix][] client-server library in [Rust][].
|
# Examples
|
||||||
|
Connecting and logging in to a homeserver is pretty starightforward:
|
||||||
|
|
||||||
[Matrix]: https://matrix.org/
|
```rust,no_run
|
||||||
[Rust]: https://www.rust-lang.org/
|
use std::convert::TryFrom;
|
||||||
|
use matrix_sdk::{
|
||||||
|
Client, SyncSettings, Result,
|
||||||
|
ruma::{UserId, events::{SyncMessageEvent, room::message::MessageEventContent}},
|
||||||
|
};
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() -> Result<()> {
|
||||||
|
let alice = UserId::try_from("@alice:example.org")?;
|
||||||
|
let client = Client::new_from_user_id(alice.clone()).await?;
|
||||||
|
|
||||||
## License
|
// First we need to log in.
|
||||||
|
client.login(alice.localpart(), "password", None, None).await?;
|
||||||
|
|
||||||
[Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0)
|
client
|
||||||
|
.register_event_handler(
|
||||||
|
|ev: SyncMessageEvent<MessageEventContent>| async move {
|
||||||
|
println!("Received a message {:?}", ev);
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
|
||||||
|
// Syncing is important to synchronize the client state with the server.
|
||||||
|
// This method will never return.
|
||||||
|
client.sync(SyncSettings::default()).await;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
More examples can be found in the [examples] directory.
|
||||||
|
|
||||||
|
# Crate Feature Flags
|
||||||
|
|
||||||
|
The following crate feature flags are available:
|
||||||
|
|
||||||
|
* `encryption`: Enables end-to-end encryption support in the library.
|
||||||
|
* `sled_cryptostore`: Enables a Sled based store for the encryption keys. If
|
||||||
|
this is disabled and `encryption` support is enabled the keys will by
|
||||||
|
default be stored only in memory and thus lost after the client is
|
||||||
|
destroyed.
|
||||||
|
* `markdown`: Support for sending markdown formatted messages.
|
||||||
|
* `socks`: Enables SOCKS support in reqwest, the default HTTP client.
|
||||||
|
* `sso_login`: Enables SSO login with a local http server.
|
||||||
|
* `require_auth_for_profile_requests`: Whether to send the access token in
|
||||||
|
the authentication header when calling endpoints that retrieve profile
|
||||||
|
data. This matches the synapse configuration
|
||||||
|
`require_auth_for_profile_requests`. Enabled by default.
|
||||||
|
* `appservice`: Enables low-level appservice functionality. For an
|
||||||
|
high-level API there's the `matrix-sdk-appservice` crate
|
||||||
|
* `anyhow`: Support for returning `anyhow::Result<()>` from event handlers.
|
||||||
|
|
||||||
|
# Enabling logging
|
||||||
|
|
||||||
|
Users of the matrix-sdk crate can enable log output by depending on the
|
||||||
|
`tracing-subscriber` crate and including the following line in their
|
||||||
|
application (e.g. at the start of `main`):
|
||||||
|
|
||||||
|
```rust
|
||||||
|
tracing_subscriber::fmt::init();
|
||||||
|
```
|
||||||
|
|
||||||
|
The log output is controlled via the `RUST_LOG` environment variable by
|
||||||
|
setting it to one of the `error`, `warn`, `info`, `debug` or `trace` levels.
|
||||||
|
The output is printed to stdout.
|
||||||
|
|
||||||
|
The `RUST_LOG` variable also supports a more advanced syntax for filtering
|
||||||
|
log output more precisely, for instance with crate-level granularity. For
|
||||||
|
more information on this, check out the [tracing_subscriber documentation].
|
||||||
|
|
||||||
|
[examples]: https://github.com/matrix-org/matrix-rust-sdk/tree/master/matrix_sdk/examples
|
||||||
|
[tracing_subscriber documentation]: https://tracing.rs/tracing_subscriber/filter/struct.envfilter
|
||||||
|
|
|
@ -922,8 +922,10 @@ impl Client {
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```no_run
|
/// ```
|
||||||
/// # let client: matrix_sdk::Client = unimplemented!();
|
/// # use url::Url;
|
||||||
|
/// # let homeserver = Url::parse("http://localhost:8080").unwrap();
|
||||||
|
/// # let client = Client::new(homeserver).unwrap();
|
||||||
/// use matrix_sdk::{
|
/// use matrix_sdk::{
|
||||||
/// room::Room,
|
/// room::Room,
|
||||||
/// ruma::{
|
/// ruma::{
|
||||||
|
@ -942,18 +944,21 @@ impl Client {
|
||||||
/// # let _ = async {
|
/// # let _ = async {
|
||||||
/// client
|
/// client
|
||||||
/// .register_event_handler(
|
/// .register_event_handler(
|
||||||
/// |ev: SyncMessageEvent<MessageEventContent>, room: Room, client: Client| async move {
|
/// |ev: SyncMessageEvent<MessageEventContent>,
|
||||||
|
/// room: Room,
|
||||||
|
/// client: Client| async move {
|
||||||
/// // Common usage: Room event plus room and client.
|
/// // Common usage: Room event plus room and client.
|
||||||
/// },
|
/// },
|
||||||
/// )
|
/// )
|
||||||
/// .await
|
/// .await
|
||||||
/// .register_event_handler(|ev: SyncStateEvent<TopicEventContent>| async move {
|
/// .register_event_handler(
|
||||||
/// // Also possible: Omit any or all arguments after the first.
|
/// |ev: SyncStateEvent<TopicEventContent>| async move {
|
||||||
/// })
|
/// // Also possible: Omit any or all arguments after the first.
|
||||||
/// .await;
|
/// }
|
||||||
|
/// ).await;
|
||||||
///
|
///
|
||||||
/// // Custom events work exactly the same way, you just need to declare the content struct and
|
/// // Custom events work exactly the same way, you just need to declare
|
||||||
/// // use the EventContent derive macro on it.
|
/// // the content struct and use the EventContent derive macro on it.
|
||||||
/// #[derive(Clone, Debug, Deserialize, Serialize, EventContent)]
|
/// #[derive(Clone, Debug, Deserialize, Serialize, EventContent)]
|
||||||
/// #[ruma_event(type = "org.shiny_new_2fa.token", kind = Message)]
|
/// #[ruma_event(type = "org.shiny_new_2fa.token", kind = Message)]
|
||||||
/// struct TokenEventContent {
|
/// struct TokenEventContent {
|
||||||
|
@ -967,6 +972,19 @@ impl Client {
|
||||||
/// todo!("Display the token");
|
/// todo!("Display the token");
|
||||||
/// },
|
/// },
|
||||||
/// ).await;
|
/// ).await;
|
||||||
|
///
|
||||||
|
/// // Adding your custom data to the handler can be done as well
|
||||||
|
/// let data = "MyCustomIdentifier".to_string();
|
||||||
|
///
|
||||||
|
/// client.register_event_handler({
|
||||||
|
/// let data = data.clone();
|
||||||
|
/// move |ev: SyncMessageEvent<MessageEventContent> | {
|
||||||
|
/// let data = data.clone();
|
||||||
|
/// async move {
|
||||||
|
/// println!("Calling the handler with identifier {}", data);
|
||||||
|
/// }
|
||||||
|
/// }
|
||||||
|
/// }).await;
|
||||||
/// # };
|
/// # };
|
||||||
/// ```
|
/// ```
|
||||||
pub async fn register_event_handler<Ev, Ctx, H>(&self, handler: H) -> &Self
|
pub async fn register_event_handler<Ev, Ctx, H>(&self, handler: H) -> &Self
|
||||||
|
|
|
@ -13,47 +13,7 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
//! This crate implements a [Matrix](https://matrix.org/) client library.
|
#![doc = include_str!("../README.md")]
|
||||||
//!
|
|
||||||
//! # Enabling logging
|
|
||||||
//!
|
|
||||||
//! Users of the matrix-sdk crate can enable log output by depending on the
|
|
||||||
//! `tracing-subscriber` crate and including the following line in their
|
|
||||||
//! application (e.g. at the start of `main`):
|
|
||||||
//!
|
|
||||||
//! ```rust
|
|
||||||
//! tracing_subscriber::fmt::init();
|
|
||||||
//! ```
|
|
||||||
//!
|
|
||||||
//! The log output is controlled via the `RUST_LOG` environment variable by
|
|
||||||
//! setting it to one of the `error`, `warn`, `info`, `debug` or `trace` levels.
|
|
||||||
//! The output is printed to stdout.
|
|
||||||
//!
|
|
||||||
//! The `RUST_LOG` variable also supports a more advanced syntax for filtering
|
|
||||||
//! log output more precisely, for instance with crate-level granularity. For
|
|
||||||
//! more information on this, check out the [tracing_subscriber
|
|
||||||
//! documentation](https://tracing.rs/tracing_subscriber/filter/struct.envfilter).
|
|
||||||
//!
|
|
||||||
//! # Crate Feature Flags
|
|
||||||
//!
|
|
||||||
//! The following crate feature flags are available:
|
|
||||||
//!
|
|
||||||
//! * `encryption`: Enables end-to-end encryption support in the library.
|
|
||||||
//! * `sled_cryptostore`: Enables a Sled based store for the encryption keys. If
|
|
||||||
//! this is disabled and `encryption` support is enabled the keys will by
|
|
||||||
//! default be stored only in memory and thus lost after the client is
|
|
||||||
//! destroyed.
|
|
||||||
//! * `markdown`: Support for sending markdown formatted messages.
|
|
||||||
//! * `socks`: Enables SOCKS support in reqwest, the default HTTP client.
|
|
||||||
//! * `sso_login`: Enables SSO login with a local http server.
|
|
||||||
//! * `require_auth_for_profile_requests`: Whether to send the access token in
|
|
||||||
//! the authentication header when calling endpoints that retrieve profile
|
|
||||||
//! data. This matches the synapse configuration
|
|
||||||
//! `require_auth_for_profile_requests`. Enabled by default.
|
|
||||||
//! * `appservice`: Enables low-level appservice functionality. For an
|
|
||||||
//! high-level API there's the `matrix-sdk-appservice` crate
|
|
||||||
//! * `anyhow`: Support for returning `anyhow::Result<()>` from event handlers.
|
|
||||||
|
|
||||||
#![deny(
|
#![deny(
|
||||||
missing_debug_implementations,
|
missing_debug_implementations,
|
||||||
missing_docs,
|
missing_docs,
|
||||||
|
|
|
@ -39,7 +39,7 @@ warp = { git = "https://github.com/seanmonstar/warp.git", rev = "629405", option
|
||||||
matrix-sdk = { version = "0.3", path = "../matrix_sdk", default-features = false, features = ["appservice"] }
|
matrix-sdk = { version = "0.3", path = "../matrix_sdk", default-features = false, features = ["appservice"] }
|
||||||
|
|
||||||
[dependencies.ruma]
|
[dependencies.ruma]
|
||||||
version = "0.3.0"
|
version = "0.4.0"
|
||||||
features = ["client-api-c", "appservice-api-s", "unstable-pre-spec"]
|
features = ["client-api-c", "appservice-api-s", "unstable-pre-spec"]
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
|
|
|
@ -20,14 +20,13 @@ encryption = ["matrix-sdk-crypto"]
|
||||||
qrcode = ["matrix-sdk-crypto/qrcode"]
|
qrcode = ["matrix-sdk-crypto/qrcode"]
|
||||||
sled_state_store = ["sled", "pbkdf2", "hmac", "sha2", "rand", "chacha20poly1305"]
|
sled_state_store = ["sled", "pbkdf2", "hmac", "sha2", "rand", "chacha20poly1305"]
|
||||||
sled_cryptostore = ["matrix-sdk-crypto/sled_cryptostore"]
|
sled_cryptostore = ["matrix-sdk-crypto/sled_cryptostore"]
|
||||||
markdown = ["ruma/markdown"]
|
|
||||||
|
|
||||||
docs = ["encryption", "sled_cryptostore"]
|
docs = ["encryption", "sled_cryptostore"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
dashmap = "4.0.2"
|
dashmap = "4.0.2"
|
||||||
lru = "0.6.5"
|
lru = "0.6.5"
|
||||||
ruma = { version = "0.3.0", features = ["client-api-c", "unstable-pre-spec"] }
|
ruma = { version = "0.4.0", features = ["client-api-c", "unstable-pre-spec"] }
|
||||||
serde = { version = "1.0.126", features = ["rc"] }
|
serde = { version = "1.0.126", features = ["rc"] }
|
||||||
serde_json = "1.0.64"
|
serde_json = "1.0.64"
|
||||||
tracing = "0.1.26"
|
tracing = "0.1.26"
|
||||||
|
@ -42,8 +41,8 @@ zeroize = { version = "1.3.0", features = ["zeroize_derive"] }
|
||||||
|
|
||||||
# Deps for the sled state store
|
# Deps for the sled state store
|
||||||
sled = { version = "0.34.6", optional = true }
|
sled = { version = "0.34.6", optional = true }
|
||||||
chacha20poly1305 = { version = "0.8.0", optional = true }
|
chacha20poly1305 = { version = "0.9.0", optional = true }
|
||||||
pbkdf2 = { version = "0.8.0", default-features = false, optional = true }
|
pbkdf2 = { version = "0.9.0", default-features = false, optional = true }
|
||||||
hmac = { version = "0.11.0", optional = true }
|
hmac = { version = "0.11.0", optional = true }
|
||||||
sha2 = { version = "0.9.5", optional = true }
|
sha2 = { version = "0.9.5", optional = true }
|
||||||
rand = { version = "0.8.4", optional = true }
|
rand = { version = "0.8.4", optional = true }
|
||||||
|
@ -60,8 +59,8 @@ http = "0.2.4"
|
||||||
[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
|
[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
|
||||||
tokio = { version = "1.7.1", default-features = false, features = ["rt-multi-thread", "macros"] }
|
tokio = { version = "1.7.1", default-features = false, features = ["rt-multi-thread", "macros"] }
|
||||||
tempfile = "3.2.0"
|
tempfile = "3.2.0"
|
||||||
rustyline = "8.2.0"
|
rustyline = "9.0.0"
|
||||||
rustyline-derive = "0.4.0"
|
rustyline-derive = "0.5.0"
|
||||||
atty = "0.2.14"
|
atty = "0.2.14"
|
||||||
clap = "2.33.3"
|
clap = "2.33.3"
|
||||||
syntect = "4.5.0"
|
syntect = "4.5.0"
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
[![Build Status](https://img.shields.io/travis/matrix-org/matrix-rust-sdk.svg?style=flat-square)](https://travis-ci.org/matrix-org/matrix-rust-sdk)
|
This crate implements the base to build a [Matrix](https://matrix.org/) client
|
||||||
[![codecov](https://img.shields.io/codecov/c/github/matrix-org/matrix-rust-sdk/master.svg?style=flat-square)](https://codecov.io/gh/matrix-org/matrix-rust-sdk)
|
library.
|
||||||
[![License](https://img.shields.io/badge/License-Apache%202.0-yellowgreen.svg?style=flat-square)](https://opensource.org/licenses/Apache-2.0)
|
|
||||||
[![#matrix-rust-sdk](https://img.shields.io/badge/matrix-%23matrix--rust--sdk-blue?style=flat-square)](https://matrix.to/#/#matrix-rust-sdk:matrix.org)
|
|
||||||
|
|
||||||
# matrix-sdk-base
|
## Crate Feature Flags
|
||||||
|
|
||||||
**matrix-rust-sdk** is an implementation of a [Matrix][] client-server library in [Rust][].
|
The following crate feature flags are available:
|
||||||
|
|
||||||
**NOTE:** This is the no IO client state machine, you're
|
* `encryption`: Enables end-to-end encryption support in the library.
|
||||||
probably interested in the main
|
* `sled_cryptostore`: Enables a Sled based store for the encryption
|
||||||
[rust-sdk](https://github.com/matrix-org/matrix-rust-sdk/) crate.
|
keys. If this is disabled and `encryption` support is enabled the keys will
|
||||||
|
by default be stored only in memory and thus lost after the client is
|
||||||
[Matrix]: https://matrix.org/
|
destroyed.
|
||||||
[Rust]: https://www.rust-lang.org/
|
* `sled_state_store`: Enables a Sled based store for the storage of the local
|
||||||
|
client state.
|
||||||
|
|
|
@ -13,18 +13,8 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
//! This crate implements a [Matrix](https://matrix.org/) client library.
|
#![doc = include_str!("../README.md")]
|
||||||
//!
|
#![cfg_attr(feature = "docs", feature(doc_cfg))]
|
||||||
//! ## Crate Feature Flags
|
|
||||||
//!
|
|
||||||
//! The following crate feature flags are available:
|
|
||||||
//!
|
|
||||||
//! * `encryption`: Enables end-to-end encryption support in the library.
|
|
||||||
//! * `sled_cryptostore`: Enables a Sled based store for the encryption
|
|
||||||
//! keys. If this is disabled and `encryption` support is enabled the keys will
|
|
||||||
//! by default be stored only in memory and thus lost after the client is
|
|
||||||
//! destroyed.
|
|
||||||
//! * `markdown`: Support for sending markdown formatted messages.
|
|
||||||
#![deny(
|
#![deny(
|
||||||
missing_debug_implementations,
|
missing_debug_implementations,
|
||||||
missing_docs,
|
missing_docs,
|
||||||
|
@ -34,7 +24,6 @@
|
||||||
unused_import_braces,
|
unused_import_braces,
|
||||||
unused_qualifications
|
unused_qualifications
|
||||||
)]
|
)]
|
||||||
#![cfg_attr(feature = "docs", feature(doc_cfg))]
|
|
||||||
|
|
||||||
pub use matrix_sdk_common::*;
|
pub use matrix_sdk_common::*;
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ version = "0.3.0"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
async-trait = "0.1.50"
|
async-trait = "0.1.50"
|
||||||
instant = { version = "0.1.9", features = ["wasm-bindgen", "now"] }
|
instant = { version = "0.1.9", features = ["wasm-bindgen", "now"] }
|
||||||
ruma = { version = "0.3.0", features = ["client-api-c"] }
|
ruma = { version = "0.4.0", features = ["client-api-c"] }
|
||||||
serde = "1.0.126"
|
serde = "1.0.126"
|
||||||
|
|
||||||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
||||||
|
|
|
@ -23,9 +23,9 @@ docs = ["sled_cryptostore"]
|
||||||
[dependencies]
|
[dependencies]
|
||||||
matrix-qrcode = { version = "0.1.0", path = "../matrix_qrcode" , optional = true}
|
matrix-qrcode = { version = "0.1.0", path = "../matrix_qrcode" , optional = true}
|
||||||
matrix-sdk-common = { version = "0.3.0", path = "../matrix_sdk_common" }
|
matrix-sdk-common = { version = "0.3.0", path = "../matrix_sdk_common" }
|
||||||
ruma = { version = "0.3.0", features = ["client-api-c", "unstable-pre-spec"] }
|
ruma = { version = "0.4.0", features = ["client-api-c", "unstable-pre-spec"] }
|
||||||
|
|
||||||
olm-rs = { version = "2.0", features = ["serde"] }
|
olm-rs = { version = "2.0.1", features = ["serde"] }
|
||||||
getrandom = "0.2.3"
|
getrandom = "0.2.3"
|
||||||
serde = { version = "1.0.126", features = ["derive", "rc"] }
|
serde = { version = "1.0.126", features = ["derive", "rc"] }
|
||||||
serde_json = "1.0.64"
|
serde_json = "1.0.64"
|
||||||
|
@ -41,7 +41,7 @@ dashmap = "4.0.2"
|
||||||
sha2 = "0.9.5"
|
sha2 = "0.9.5"
|
||||||
aes-gcm = "0.9.2"
|
aes-gcm = "0.9.2"
|
||||||
aes = { version = "0.7.4", features = ["ctr"] }
|
aes = { version = "0.7.4", features = ["ctr"] }
|
||||||
pbkdf2 = { version = "0.8.0", default-features = false }
|
pbkdf2 = { version = "0.9.0", default-features = false }
|
||||||
hmac = "0.11.0"
|
hmac = "0.11.0"
|
||||||
base64 = "0.13.0"
|
base64 = "0.13.0"
|
||||||
byteorder = "1.4.3"
|
byteorder = "1.4.3"
|
||||||
|
|
|
@ -1,14 +1,46 @@
|
||||||
[![Build Status](https://img.shields.io/travis/matrix-org/matrix-rust-sdk.svg?style=flat-square)](https://travis-ci.org/matrix-org/matrix-rust-sdk)
|
A no-io implementation of a state machine that handles E2EE for [Matrix] clients.
|
||||||
[![codecov](https://img.shields.io/codecov/c/github/matrix-org/matrix-rust-sdk/master.svg?style=flat-square)](https://codecov.io/gh/matrix-org/matrix-rust-sdk)
|
|
||||||
[![License](https://img.shields.io/badge/License-Apache%202.0-yellowgreen.svg?style=flat-square)](https://opensource.org/licenses/Apache-2.0)
|
|
||||||
[![#matrix-rust-sdk](https://img.shields.io/badge/matrix-%23matrix--rust--sdk-blue?style=flat-square)](https://matrix.to/#/#matrix-rust-sdk:matrix.org)
|
|
||||||
|
|
||||||
# matrix-sdk-crypto
|
# Usage
|
||||||
|
|
||||||
**matrix-rust-sdk** is an implementation of a [Matrix][] client-server library in [Rust][].
|
This is probably not the crate you are looking for, it’s used internally in the [matrix-sdk].
|
||||||
|
|
||||||
**NOTE:** This is a E2EE implementation for Matrix, you are probably interested in the main
|
If you're still interested in this crate it can be used to introduce E2EE
|
||||||
[rust-sdk](https://github.com/matrix-org/matrix-rust-sdk/) crate.
|
support into your client or client library.
|
||||||
|
|
||||||
|
The state machine works in a push/pull manner, you push state changes and events
|
||||||
|
that we receive from a sync response from the server, and we pull requests that
|
||||||
|
we need to send to the server out of the state machine.
|
||||||
|
|
||||||
|
```rust,no_run
|
||||||
|
use std::{collections::BTreeMap, convert::TryFrom};
|
||||||
|
|
||||||
|
use matrix_sdk_crypto::{OlmMachine, OlmError};
|
||||||
|
use ruma::{UserId, api::client::r0::sync::sync_events::{ToDevice, DeviceLists}};
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() -> Result<(), OlmError> {
|
||||||
|
let alice = UserId::try_from("@alice:example.org").unwrap();
|
||||||
|
let machine = OlmMachine::new(&alice, "DEVICEID".into());
|
||||||
|
|
||||||
|
let to_device_events = ToDevice::default();
|
||||||
|
let changed_devices = DeviceLists::default();
|
||||||
|
let one_time_key_counts = BTreeMap::default();
|
||||||
|
|
||||||
|
// Push changes that the server sent to us in a sync response.
|
||||||
|
let decrypted_to_device = machine.receive_sync_changes(
|
||||||
|
to_device_events,
|
||||||
|
&changed_devices,
|
||||||
|
&one_time_key_counts
|
||||||
|
).await?;
|
||||||
|
|
||||||
|
// Pull requests that we need to send out.
|
||||||
|
let outgoing_requests = machine.outgoing_requests().await?;
|
||||||
|
|
||||||
|
// Send the requests here out and call machine.mark_request_as_sent().
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
[Matrix]: https://matrix.org/
|
[Matrix]: https://matrix.org/
|
||||||
[Rust]: https://www.rust-lang.org/
|
[matrix-sdk]: https://github.com/matrix-org/matrix-rust-sdk/
|
||||||
|
|
|
@ -12,9 +12,8 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
//! This is the encryption part of the matrix-sdk. It contains a state machine
|
#![doc = include_str!("../README.md")]
|
||||||
//! that will aid in adding encryption support to a client library.
|
#![cfg_attr(feature = "docs", feature(doc_cfg))]
|
||||||
|
|
||||||
#![deny(
|
#![deny(
|
||||||
missing_debug_implementations,
|
missing_debug_implementations,
|
||||||
dead_code,
|
dead_code,
|
||||||
|
@ -25,7 +24,6 @@
|
||||||
unused_import_braces,
|
unused_import_braces,
|
||||||
unused_qualifications
|
unused_qualifications
|
||||||
)]
|
)]
|
||||||
#![cfg_attr(feature = "docs", feature(doc_cfg))]
|
|
||||||
|
|
||||||
mod error;
|
mod error;
|
||||||
mod file_encryption;
|
mod file_encryption;
|
||||||
|
|
|
@ -102,7 +102,6 @@ pub struct OlmMachine {
|
||||||
/// State machine handling public user identities and devices, keeping track
|
/// State machine handling public user identities and devices, keeping track
|
||||||
/// of when a key query needs to be done and handling one.
|
/// of when a key query needs to be done and handling one.
|
||||||
identity_manager: IdentityManager,
|
identity_manager: IdentityManager,
|
||||||
cross_signing_request: Arc<Mutex<Option<UploadSignaturesRequest>>>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(tarpaulin_include))]
|
#[cfg(not(tarpaulin_include))]
|
||||||
|
@ -190,7 +189,6 @@ impl OlmMachine {
|
||||||
verification_machine,
|
verification_machine,
|
||||||
key_request_machine,
|
key_request_machine,
|
||||||
identity_manager,
|
identity_manager,
|
||||||
cross_signing_request: Arc::new(Mutex::new(None)),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,6 @@ http = "0.2.4"
|
||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
matrix-sdk-common = { version = "0.3.0", path = "../matrix_sdk_common" }
|
matrix-sdk-common = { version = "0.3.0", path = "../matrix_sdk_common" }
|
||||||
matrix-sdk-test-macros = { version = "0.1.0", path = "../matrix_sdk_test_macros" }
|
matrix-sdk-test-macros = { version = "0.1.0", path = "../matrix_sdk_test_macros" }
|
||||||
ruma = { version = "0.3.0", features = ["client-api-c"] }
|
ruma = { version = "0.4.0", features = ["client-api-c"] }
|
||||||
serde = "1.0.126"
|
serde = "1.0.126"
|
||||||
serde_json = "1.0.64"
|
serde_json = "1.0.64"
|
||||||
|
|
Loading…
Reference in a new issue