Add leave event endpoints
This commit is contained in:
parent
219cea9c1e
commit
192db0371c
@ -3,3 +3,5 @@
|
|||||||
pub mod create_invite;
|
pub mod create_invite;
|
||||||
pub mod create_join_event;
|
pub mod create_join_event;
|
||||||
pub mod create_join_event_template;
|
pub mod create_join_event_template;
|
||||||
|
pub mod create_leave_event;
|
||||||
|
pub mod get_leave_event;
|
||||||
|
4
ruma-federation-api/src/membership/create_leave_event.rs
Normal file
4
ruma-federation-api/src/membership/create_leave_event.rs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
//! Endpoint to submits a signed leave event to the receiving server for it to accept it into the room's graph.
|
||||||
|
|
||||||
|
pub mod v1;
|
||||||
|
pub mod v2;
|
114
ruma-federation-api/src/membership/create_leave_event/v1.rs
Normal file
114
ruma-federation-api/src/membership/create_leave_event/v1.rs
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
//! [PUT /_matrix/federation/v1/send_leave/{roomId}/{eventId}](https://matrix.org/docs/spec/server_server/r0.1.4#put-matrix-federation-v1-send-leave-roomid-eventid)
|
||||||
|
|
||||||
|
use std::time::SystemTime;
|
||||||
|
|
||||||
|
use js_int::UInt;
|
||||||
|
use ruma_api::ruma_api;
|
||||||
|
use ruma_common::Raw;
|
||||||
|
use ruma_events::{room::member::MemberEventContent, EventType};
|
||||||
|
use ruma_identifiers::{EventId, RoomId, ServerName, UserId};
|
||||||
|
use ruma_serde::empty::Empty;
|
||||||
|
|
||||||
|
ruma_api! {
|
||||||
|
metadata: {
|
||||||
|
description: "Submits a signed leave event to the receiving server for it to accept it into the room's graph.",
|
||||||
|
name: "create_leave_event",
|
||||||
|
method: PUT,
|
||||||
|
path: "/_matrix/federation/v1/send_leave/:room_id/:event_id",
|
||||||
|
rate_limited: false,
|
||||||
|
requires_authentication: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
request: {
|
||||||
|
/// The room ID that is about to be left.
|
||||||
|
#[ruma_api(path)]
|
||||||
|
pub room_id: &'a RoomId,
|
||||||
|
|
||||||
|
/// The event ID for the leave event.
|
||||||
|
#[ruma_api(path)]
|
||||||
|
pub event_id: &'a EventId,
|
||||||
|
|
||||||
|
/// The user ID of the leaving member.
|
||||||
|
#[ruma_api(query)]
|
||||||
|
pub sender: &'a UserId,
|
||||||
|
|
||||||
|
/// The name of the leaving homeserver.
|
||||||
|
#[ruma_api(query)]
|
||||||
|
pub origin: &'a ServerName,
|
||||||
|
|
||||||
|
/// A timestamp added by the leaving homeserver.
|
||||||
|
#[ruma_api(query)]
|
||||||
|
#[serde(with = "ruma_serde::time::ms_since_unix_epoch")]
|
||||||
|
pub origin_server_ts: SystemTime,
|
||||||
|
|
||||||
|
/// The value `m.room.member`.
|
||||||
|
#[ruma_api(query)]
|
||||||
|
#[serde(rename = "type")]
|
||||||
|
pub event_type: EventType,
|
||||||
|
|
||||||
|
/// The user ID of the leaving member.
|
||||||
|
#[ruma_api(query)]
|
||||||
|
pub state_key: &'a str,
|
||||||
|
|
||||||
|
/// The content of the event.
|
||||||
|
#[ruma_api(query)]
|
||||||
|
pub content: Raw<MemberEventContent>,
|
||||||
|
|
||||||
|
/// This field must be present but is ignored; it may be 0.
|
||||||
|
#[ruma_api(query)]
|
||||||
|
pub depth: UInt,
|
||||||
|
}
|
||||||
|
|
||||||
|
response: {
|
||||||
|
/// - no description -
|
||||||
|
#[ruma_api(body)]
|
||||||
|
#[serde(with = "crate::serde::v1_pdu")]
|
||||||
|
pub event: Empty,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> Request<'a> {
|
||||||
|
/// Creates a new `Request` with:
|
||||||
|
/// * the room ID that is about to be left.
|
||||||
|
/// * the event ID for the leave event.
|
||||||
|
/// * the user ID of the leaving member.
|
||||||
|
/// * the name of the leaving homeserver.
|
||||||
|
/// * a timestamp added by the leaving homeserver.
|
||||||
|
/// * the value `m.room.member`.
|
||||||
|
/// * the user ID of the leaving member.
|
||||||
|
/// * the content of the event.
|
||||||
|
/// * this field must be present but is ignored; it may be 0.
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
|
pub fn new(
|
||||||
|
room_id: &'a RoomId,
|
||||||
|
event_id: &'a EventId,
|
||||||
|
sender: &'a UserId,
|
||||||
|
origin: &'a ServerName,
|
||||||
|
origin_server_ts: SystemTime,
|
||||||
|
event_type: EventType,
|
||||||
|
state_key: &'a str,
|
||||||
|
content: Raw<MemberEventContent>,
|
||||||
|
depth: UInt,
|
||||||
|
) -> Self {
|
||||||
|
Self {
|
||||||
|
room_id,
|
||||||
|
event_id,
|
||||||
|
sender,
|
||||||
|
origin,
|
||||||
|
origin_server_ts,
|
||||||
|
event_type,
|
||||||
|
state_key,
|
||||||
|
content,
|
||||||
|
depth,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Response {
|
||||||
|
/// Creates a new `Response` with an empty event,
|
||||||
|
/// to indicate the event was accepted into the
|
||||||
|
/// graph by the receiving homeserver.
|
||||||
|
pub fn new(event: Empty) -> Self {
|
||||||
|
Self { event }
|
||||||
|
}
|
||||||
|
}
|
113
ruma-federation-api/src/membership/create_leave_event/v2.rs
Normal file
113
ruma-federation-api/src/membership/create_leave_event/v2.rs
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
//! [PUT /_matrix/federation/v2/send_leave/{roomId}/{eventId}](https://matrix.org/docs/spec/server_server/r0.1.4#put-matrix-federation-v2-send-leave-roomid-eventid)
|
||||||
|
|
||||||
|
use std::time::SystemTime;
|
||||||
|
|
||||||
|
use js_int::UInt;
|
||||||
|
use ruma_api::ruma_api;
|
||||||
|
use ruma_common::Raw;
|
||||||
|
use ruma_events::{room::member::MemberEventContent, EventType};
|
||||||
|
use ruma_identifiers::{EventId, RoomId, ServerName, UserId};
|
||||||
|
use ruma_serde::empty::Empty;
|
||||||
|
|
||||||
|
ruma_api! {
|
||||||
|
metadata: {
|
||||||
|
description: "Submits a signed leave event to the receiving server for it to accept it into the room's graph.",
|
||||||
|
name: "create_leave_event",
|
||||||
|
method: PUT,
|
||||||
|
path: "/_matrix/federation/v1/send_leave/:room_id/:event_id",
|
||||||
|
rate_limited: false,
|
||||||
|
requires_authentication: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
request: {
|
||||||
|
/// The room ID that is about to be left.
|
||||||
|
#[ruma_api(path)]
|
||||||
|
pub room_id: &'a RoomId,
|
||||||
|
|
||||||
|
/// The event ID for the leave event.
|
||||||
|
#[ruma_api(path)]
|
||||||
|
pub event_id: &'a EventId,
|
||||||
|
|
||||||
|
/// The user ID of the leaving member.
|
||||||
|
#[ruma_api(query)]
|
||||||
|
pub sender: &'a UserId,
|
||||||
|
|
||||||
|
/// The name of the leaving homeserver.
|
||||||
|
#[ruma_api(query)]
|
||||||
|
pub origin: &'a ServerName,
|
||||||
|
|
||||||
|
/// A timestamp added by the leaving homeserver.
|
||||||
|
#[ruma_api(query)]
|
||||||
|
#[serde(with = "ruma_serde::time::ms_since_unix_epoch")]
|
||||||
|
pub origin_server_ts: SystemTime,
|
||||||
|
|
||||||
|
/// The value `m.room.member`.
|
||||||
|
#[ruma_api(query)]
|
||||||
|
#[serde(rename = "type")]
|
||||||
|
pub event_type: EventType,
|
||||||
|
|
||||||
|
/// The user ID of the leaving member.
|
||||||
|
#[ruma_api(query)]
|
||||||
|
pub state_key: &'a str,
|
||||||
|
|
||||||
|
/// The content of the event.
|
||||||
|
#[ruma_api(query)]
|
||||||
|
pub content: Raw<MemberEventContent>,
|
||||||
|
|
||||||
|
/// This field must be present but is ignored; it may be 0.
|
||||||
|
#[ruma_api(query)]
|
||||||
|
pub depth: UInt,
|
||||||
|
}
|
||||||
|
|
||||||
|
response: {
|
||||||
|
/// - no description -
|
||||||
|
#[ruma_api(body)]
|
||||||
|
pub event: Empty,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> Request<'a> {
|
||||||
|
/// Creates a new `Request` with:
|
||||||
|
/// * the room ID that is about to be left.
|
||||||
|
/// * the event ID for the leave event.
|
||||||
|
/// * the user ID of the leaving member.
|
||||||
|
/// * the name of the leaving homeserver.
|
||||||
|
/// * a timestamp added by the leaving homeserver.
|
||||||
|
/// * the value `m.room.member`.
|
||||||
|
/// * the user ID of the leaving member.
|
||||||
|
/// * the content of the event.
|
||||||
|
/// * this field must be present but is ignored; it may be 0.
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
|
pub fn new(
|
||||||
|
room_id: &'a RoomId,
|
||||||
|
event_id: &'a EventId,
|
||||||
|
sender: &'a UserId,
|
||||||
|
origin: &'a ServerName,
|
||||||
|
origin_server_ts: SystemTime,
|
||||||
|
event_type: EventType,
|
||||||
|
state_key: &'a str,
|
||||||
|
content: Raw<MemberEventContent>,
|
||||||
|
depth: UInt,
|
||||||
|
) -> Self {
|
||||||
|
Self {
|
||||||
|
room_id,
|
||||||
|
event_id,
|
||||||
|
sender,
|
||||||
|
origin,
|
||||||
|
origin_server_ts,
|
||||||
|
event_type,
|
||||||
|
state_key,
|
||||||
|
content,
|
||||||
|
depth,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Response {
|
||||||
|
/// Creates a new `Response` with an empty event,
|
||||||
|
/// to indicate the event was accepted into the
|
||||||
|
/// graph by the receiving homeserver.
|
||||||
|
pub fn new(event: Empty) -> Self {
|
||||||
|
Self { event }
|
||||||
|
}
|
||||||
|
}
|
3
ruma-federation-api/src/membership/get_leave_event.rs
Normal file
3
ruma-federation-api/src/membership/get_leave_event.rs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
//! Endpoint to asks the receiving server to return information that the sending server will need to prepare a leave event to get out of the room.
|
||||||
|
|
||||||
|
pub mod v1;
|
80
ruma-federation-api/src/membership/get_leave_event/v1.rs
Normal file
80
ruma-federation-api/src/membership/get_leave_event/v1.rs
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
//! [GET /_matrix/federation/v1/make_leave/{roomId}/{userId}](https://matrix.org/docs/spec/server_server/r0.1.4#get-matrix-federation-v1-make-leave-roomid-userid)
|
||||||
|
|
||||||
|
use std::time::SystemTime;
|
||||||
|
|
||||||
|
use ruma_api::ruma_api;
|
||||||
|
use ruma_common::Raw;
|
||||||
|
use ruma_events::{room::member::MemberEventContent, EventType};
|
||||||
|
use ruma_identifiers::{RoomId, RoomVersionId, ServerNameBox, UserId};
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
ruma_api! {
|
||||||
|
metadata: {
|
||||||
|
description: "Asks the receiving server to return information that the sending server will need to prepare a leave event to get out of the room.",
|
||||||
|
name: "get_leave_event",
|
||||||
|
method: GET,
|
||||||
|
path: "/_matrix/federation/v1/make_leave/:room_id/:user_id",
|
||||||
|
rate_limited: false,
|
||||||
|
requires_authentication: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
request: {
|
||||||
|
/// The room ID that is about to be left.
|
||||||
|
#[ruma_api(path)]
|
||||||
|
pub room_id: &'a RoomId,
|
||||||
|
|
||||||
|
/// The user ID the leave event will be for.
|
||||||
|
#[ruma_api(path)]
|
||||||
|
pub user_id: &'a UserId,
|
||||||
|
}
|
||||||
|
|
||||||
|
response: {
|
||||||
|
/// The version of the room where the server is trying to leave. If not provided, the room version is assumed to be either "1" or "2".
|
||||||
|
pub room_version: Option<RoomVersionId>,
|
||||||
|
|
||||||
|
/// An unsigned template event. Note that events have a different format depending on the room version - check the room version specification for precise event formats.
|
||||||
|
pub event: EventTemplate,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// An unsigned template event. Note that events have a different format depending on the room version - check the room version specification for precise event formats.
|
||||||
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||||
|
pub struct EventTemplate {
|
||||||
|
/// The user ID of the leaving member.
|
||||||
|
pub sender: UserId,
|
||||||
|
|
||||||
|
/// The name of the resident homeserver.
|
||||||
|
pub origin: ServerNameBox,
|
||||||
|
|
||||||
|
/// A timestamp added by the resident homeserver.
|
||||||
|
#[serde(with = "ruma_serde::time::ms_since_unix_epoch")]
|
||||||
|
pub origin_server_ts: SystemTime,
|
||||||
|
|
||||||
|
/// The value `m.room.member`.
|
||||||
|
#[serde(rename = "type")]
|
||||||
|
pub event_type: EventType,
|
||||||
|
|
||||||
|
/// The user ID of the leaving member.
|
||||||
|
pub state_key: String,
|
||||||
|
|
||||||
|
/// The content of the event.
|
||||||
|
pub content: Raw<MemberEventContent>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> Request<'a> {
|
||||||
|
/// Creates a new `Request` with:
|
||||||
|
/// * the room ID that is about to be left.
|
||||||
|
/// * the user ID the leave event will be for.
|
||||||
|
pub fn new(room_id: &'a RoomId, user_id: &'a UserId) -> Self {
|
||||||
|
Self { room_id, user_id }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Response {
|
||||||
|
/// Creates a new `Response` with:
|
||||||
|
/// * the version of the room where the server is trying to leave.
|
||||||
|
/// * an unsigned template event.
|
||||||
|
pub fn new(room_version: Option<RoomVersionId>, event: EventTemplate) -> Self {
|
||||||
|
Self { room_version, event }
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user