client-api: Add support for fallback keys
This implements support for MSC2732[1], fallback keys. Only support to upload and get notifications about fallback keys via `/sync` is implemented. [1]: https://github.com/matrix-org/matrix-doc/pull/2732
This commit is contained in:
parent
af0a8f009c
commit
caa3c05db3
@ -29,6 +29,11 @@ ruma_api! {
|
||||
/// One-time public keys for "pre-key" messages.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub one_time_keys: Option<BTreeMap<Box<DeviceKeyId>, Raw<OneTimeKey>>>,
|
||||
|
||||
/// Fallback public keys for "pre-key" messages.
|
||||
#[cfg(feature = "unstable-pre-spec")]
|
||||
#[serde(skip_serializing_if = "Option::is_none", rename = "org.matrix.msc2732.fallback_keys")]
|
||||
pub fallback_keys: Option<BTreeMap<Box<DeviceKeyId>, Raw<OneTimeKey>>>,
|
||||
}
|
||||
|
||||
response: {
|
||||
|
@ -93,6 +93,15 @@ ruma_api! {
|
||||
/// currently held on the server for a device.
|
||||
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
|
||||
pub device_one_time_keys_count: BTreeMap<DeviceKeyAlgorithm, UInt>,
|
||||
|
||||
/// For each key algorithm, the number of unclaimed one-time keys
|
||||
/// currently held on the server for a device.
|
||||
///
|
||||
/// The presence of this field indicates that the server supports
|
||||
/// fallback keys.
|
||||
#[cfg(feature = "unstable-pre-spec")]
|
||||
#[serde(rename = "org.matrix.msc2732.device_unused_fallback_key_types")]
|
||||
pub device_unused_fallback_key_types: Option<Vec<DeviceKeyAlgorithm>>,
|
||||
}
|
||||
|
||||
error: crate::Error
|
||||
@ -116,6 +125,8 @@ impl Response {
|
||||
to_device: Default::default(),
|
||||
device_lists: Default::default(),
|
||||
device_one_time_keys_count: BTreeMap::new(),
|
||||
#[cfg(feature = "unstable-pre-spec")]
|
||||
device_unused_fallback_key_types: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -83,12 +83,28 @@ pub struct SignedKey {
|
||||
|
||||
/// Signatures for the key object.
|
||||
pub signatures: SignedKeySignatures,
|
||||
|
||||
/// Is this key considered to be a fallback key, defaults to false.
|
||||
#[cfg(feature = "unstable-pre-spec")]
|
||||
#[serde(default, skip_serializing_if = "ruma_serde::is_default")]
|
||||
pub fallback: bool,
|
||||
}
|
||||
|
||||
impl SignedKey {
|
||||
/// Creates a new `SignedKey` with the given key and signatures.
|
||||
pub fn new(key: String, signatures: SignedKeySignatures) -> Self {
|
||||
Self { key, signatures }
|
||||
Self {
|
||||
key,
|
||||
signatures,
|
||||
#[cfg(feature = "unstable-pre-spec")]
|
||||
fallback: false,
|
||||
}
|
||||
}
|
||||
|
||||
/// Creates a new fallback `SignedKey` with the given key and signatures.
|
||||
#[cfg(feature = "unstable-pre-spec")]
|
||||
pub fn new_fallback(key: String, signatures: SignedKeySignatures) -> Self {
|
||||
Self { key, signatures, fallback: true }
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user