From a3722ca08c78a767cecc93ee7eeee35a30b4ad90 Mon Sep 17 00:00:00 2001 From: Amanda Graven Date: Tue, 11 Aug 2020 12:09:19 +0200 Subject: [PATCH] Add claim_keys endpoint and changelog entry --- ruma-federation-api/CHANGELOG.md | 1 + ruma-federation-api/src/keys.rs | 3 + .../src/keys/claim_keys/mod.rs | 3 + ruma-federation-api/src/keys/claim_keys/v1.rs | 59 +++++++++++++++++++ ruma-federation-api/src/lib.rs | 1 + 5 files changed, 67 insertions(+) create mode 100644 ruma-federation-api/src/keys.rs create mode 100644 ruma-federation-api/src/keys/claim_keys/mod.rs create mode 100644 ruma-federation-api/src/keys/claim_keys/v1.rs diff --git a/ruma-federation-api/CHANGELOG.md b/ruma-federation-api/CHANGELOG.md index 71afea7d..f3e49265 100644 --- a/ruma-federation-api/CHANGELOG.md +++ b/ruma-federation-api/CHANGELOG.md @@ -6,6 +6,7 @@ Improvements: ``` device::get_devices::v1, + keys::claim_keys::v1, ``` # 0.0.3 diff --git a/ruma-federation-api/src/keys.rs b/ruma-federation-api/src/keys.rs new file mode 100644 index 00000000..2346cffc --- /dev/null +++ b/ruma-federation-api/src/keys.rs @@ -0,0 +1,3 @@ +//! Endpoints for handling keys for end-to-end encryption + +pub mod claim_keys; diff --git a/ruma-federation-api/src/keys/claim_keys/mod.rs b/ruma-federation-api/src/keys/claim_keys/mod.rs new file mode 100644 index 00000000..855ef0ab --- /dev/null +++ b/ruma-federation-api/src/keys/claim_keys/mod.rs @@ -0,0 +1,3 @@ +//! Endpoint to claim one-time keys for use in pre-key messages + +pub mod v1; diff --git a/ruma-federation-api/src/keys/claim_keys/v1.rs b/ruma-federation-api/src/keys/claim_keys/v1.rs new file mode 100644 index 00000000..56cf22ef --- /dev/null +++ b/ruma-federation-api/src/keys/claim_keys/v1.rs @@ -0,0 +1,59 @@ +//! [POST +//! /_matrix/federation/v1/user/keys/claim](https://matrix.org/docs/spec/server_server/r0.1.4#post-matrix-federation-v1-user-keys-claim) + +use std::collections::BTreeMap; + +use ruma_api::ruma_api; +use ruma_identifiers::{DeviceId, DeviceKeyAlgorithm, DeviceKeyId, UserId}; +use serde::{Deserialize, Serialize}; + +ruma_api! { + metadata: { + description: "Claims one-time keys for use in pre-key messages.", + method: POST, + name: "claim_keys", + path: "/_matrix/federation/v1/user/keys/claim", + rate_limited: false, + requires_authentication: true, + } + + request: { + /// The keys to be claimed. + one_time_keys: OneTimeKeyClaims, + } + + response: { + /// One-time keys for the queried devices + one_time_keys: OneTimeKeys, + } +} + +/// A claim for one time keys +pub type OneTimeKeyClaims = BTreeMap, DeviceKeyAlgorithm>>; + +/// One time keys for use in pre-key messages +pub type OneTimeKeys = BTreeMap, BTreeMap>>; + +/// A key and its signature +#[non_exhaustive] +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct KeyObject { + /// The key, encoded using unpadded base64. + key: String, + /// Signature of the key object. + signatures: BTreeMap>, +} + +impl Request { + /// Creates a new `Request` with the given one time key claims. + pub fn new(one_time_keys: OneTimeKeyClaims) -> Self { + Self { one_time_keys } + } +} + +impl Response { + /// Creates a new `Response` with the given one time keys. + pub fn new(one_time_keys: OneTimeKeys) -> Self { + Self { one_time_keys } + } +} diff --git a/ruma-federation-api/src/lib.rs b/ruma-federation-api/src/lib.rs index bf036757..243b36d8 100644 --- a/ruma-federation-api/src/lib.rs +++ b/ruma-federation-api/src/lib.rs @@ -8,6 +8,7 @@ pub mod authorization; pub mod device; pub mod directory; pub mod discovery; +pub mod keys; pub mod membership; pub mod openid; pub mod query;