diff --git a/crates/ruma-identity-service-api/CHANGELOG.md b/crates/ruma-identity-service-api/CHANGELOG.md index 0d00ab24..ae95294b 100644 --- a/crates/ruma-identity-service-api/CHANGELOG.md +++ b/crates/ruma-identity-service-api/CHANGELOG.md @@ -8,7 +8,8 @@ Improvements: association::{ check_3pid_validity::v2, bind_3pid::v2, - } + }, + invitation::sign_invitation_ed25519::v2 ``` # 0.1.0 diff --git a/crates/ruma-identity-service-api/src/invitation.rs b/crates/ruma-identity-service-api/src/invitation.rs new file mode 100644 index 00000000..db034d65 --- /dev/null +++ b/crates/ruma-identity-service-api/src/invitation.rs @@ -0,0 +1,2 @@ +//! Endpoints for ephemeral invitation signing. +pub mod sign_invitation_ed25519; diff --git a/crates/ruma-identity-service-api/src/invitation/sign_invitation_ed25519.rs b/crates/ruma-identity-service-api/src/invitation/sign_invitation_ed25519.rs new file mode 100644 index 00000000..53a64ac1 --- /dev/null +++ b/crates/ruma-identity-service-api/src/invitation/sign_invitation_ed25519.rs @@ -0,0 +1,2 @@ +//! Endpoint to sign invitation details. +pub mod v2; diff --git a/crates/ruma-identity-service-api/src/invitation/sign_invitation_ed25519/v2.rs b/crates/ruma-identity-service-api/src/invitation/sign_invitation_ed25519/v2.rs new file mode 100644 index 00000000..3440a9af --- /dev/null +++ b/crates/ruma-identity-service-api/src/invitation/sign_invitation_ed25519/v2.rs @@ -0,0 +1,54 @@ +//![POST /_matrix/identity/v2/sign-ed25519](https://matrix.org/docs/spec/identity_service/r0.3.0#post-matrix-identity-v2-sign-ed25519) + +use ruma_api::ruma_api; +use ruma_identifiers::{ServerSignatures, UserId}; + +ruma_api! { + metadata: { + description: "Sign invitation details.", + method: POST, + name: "sign_invitation_ed25519", + path: "/_matrix/identity/v2/sign-ed25519", + authentication: AccessToken, + rate_limited: false, + } + + request: { + /// The Matrix user ID of the user accepting the invitation. + pub mxid: UserId, + + /// The token from the call to store-invite. + pub token: &'a str, + + /// The private key, encoded as unpadded base64. + pub private_key: &'a str, + } + + response: { + /// The Matrix user ID of the user accepting the invitation. + pub mxid: UserId, + + /// The Matrix user ID of the user who sent the invitation. + pub sender: UserId, + + /// The signature of the mxid, sender and token. + pub signatures: ServerSignatures, + + /// The token for the invitation. + pub token: String, + } +} + +impl<'a> Request<'a> { + /// Creates a `Request` with the given Matrix user ID, token and private_key. + pub fn new(mxid: UserId, token: &'a str, private_key: &'a str) -> Self { + Self { mxid, token, private_key } + } +} + +impl Response { + /// Creates a `Response` with the given Matrix user ID, sender user ID, signatures and token. + pub fn new(mxid: UserId, sender: UserId, signatures: ServerSignatures, token: String) -> Self { + Self { mxid, sender, signatures, token } + } +} diff --git a/crates/ruma-identity-service-api/src/lib.rs b/crates/ruma-identity-service-api/src/lib.rs index 462cff69..e6a5178c 100644 --- a/crates/ruma-identity-service-api/src/lib.rs +++ b/crates/ruma-identity-service-api/src/lib.rs @@ -9,6 +9,7 @@ pub mod association; pub mod authentication; +pub mod invitation; pub mod keys; pub mod lookup; pub mod status;