Add invite-by-3pid endpoint
This commit is contained in:
parent
7d677f690e
commit
e16049b5b3
@ -15,6 +15,9 @@ Breaking changes:
|
|||||||
* Fix `r0::session::get_login_types`
|
* Fix `r0::session::get_login_types`
|
||||||
* Add `allow_remote` parameter to `r0::media::get_content`
|
* Add `allow_remote` parameter to `r0::media::get_content`
|
||||||
* Add missing parameters for `r0::room::create_room`
|
* Add missing parameters for `r0::room::create_room`
|
||||||
|
* Moved `r0::room::create_room::Invite3pid` to `r0::membership::Invite3pid`
|
||||||
|
* Replaced `user_id` parameter of `r0::membership::invite_user` with `recipient`
|
||||||
|
to allow invitation of users by either Matrix or third party identifiers.
|
||||||
* Remove deprecated endpoint `r0::contact::create_contact` (deprecated in r0.6.0)
|
* Remove deprecated endpoint `r0::contact::create_contact` (deprecated in r0.6.0)
|
||||||
|
|
||||||
# 0.6.0
|
# 0.6.0
|
||||||
|
@ -16,6 +16,8 @@ use std::collections::HashMap;
|
|||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use crate::r0::thirdparty::Medium;
|
||||||
|
|
||||||
// TODO: spec requires a nesting ThirdPartySigned { signed: Signed { mxid: ..., ... } }
|
// TODO: spec requires a nesting ThirdPartySigned { signed: Signed { mxid: ..., ... } }
|
||||||
// for join_room_by_id_or_alias but not for join_room_by_id, inconsistency?
|
// for join_room_by_id_or_alias but not for join_room_by_id, inconsistency?
|
||||||
|
|
||||||
@ -32,3 +34,16 @@ pub struct ThirdPartySigned {
|
|||||||
/// The state key of the m.third_party_invite event.
|
/// The state key of the m.third_party_invite event.
|
||||||
pub token: String,
|
pub token: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Represents third party IDs to invite to the room.
|
||||||
|
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
|
||||||
|
pub struct Invite3pid {
|
||||||
|
/// Hostname and port of identity server to be used for account lookups.
|
||||||
|
pub id_server: String,
|
||||||
|
/// An access token registered with the identity server.
|
||||||
|
pub id_access_token: String,
|
||||||
|
/// Type of third party ID.
|
||||||
|
pub medium: Medium,
|
||||||
|
/// Third party identifier.
|
||||||
|
pub address: String,
|
||||||
|
}
|
||||||
|
@ -1,7 +1,16 @@
|
|||||||
//! [POST /_matrix/client/r0/rooms/{roomId}/invite](https://matrix.org/docs/spec/client_server/r0.4.0.html#post-matrix-client-r0-rooms-roomid-invite)
|
//! [POST /_matrix/client/r0/rooms/{roomId}/invite][invite-by-user-id]
|
||||||
|
//!
|
||||||
|
//! This endpoint has two forms: one to invite a user
|
||||||
|
//! [by their Matrix identifier][invite-by-user-id], and one to invite a user
|
||||||
|
//! [by their third party identifier][invite-by-3pid].
|
||||||
|
//!
|
||||||
|
//! [invite-by-user-id]: https://matrix.org/docs/spec/client_server/r0.6.0.html#post-matrix-client-r0-rooms-roomid-invite
|
||||||
|
//! [invite-by-3pid]: https://matrix.org/docs/spec/client_server/r0.6.0#id101
|
||||||
use ruma_api::ruma_api;
|
use ruma_api::ruma_api;
|
||||||
use ruma_identifiers::{RoomId, UserId};
|
use ruma_identifiers::{RoomId, UserId};
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use super::Invite3pid;
|
||||||
|
|
||||||
ruma_api! {
|
ruma_api! {
|
||||||
metadata {
|
metadata {
|
||||||
@ -18,8 +27,61 @@ ruma_api! {
|
|||||||
#[ruma_api(path)]
|
#[ruma_api(path)]
|
||||||
pub room_id: RoomId,
|
pub room_id: RoomId,
|
||||||
/// The user to invite.
|
/// The user to invite.
|
||||||
pub user_id: UserId,
|
#[ruma_api(body)]
|
||||||
|
pub recipient: InvitationRecipient,
|
||||||
}
|
}
|
||||||
|
|
||||||
response {}
|
response {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Distinguishes between invititations by Matrix or third party identifiers.
|
||||||
|
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
|
||||||
|
#[serde(untagged)]
|
||||||
|
pub enum InvitationRecipient {
|
||||||
|
/// Used to invite user by their Matrix identifer.
|
||||||
|
UserId {
|
||||||
|
/// Matrix identifier of user.
|
||||||
|
user_id: UserId,
|
||||||
|
},
|
||||||
|
/// Used to invite user by a third party identifer.
|
||||||
|
ThirdPartyId(Invite3pid),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::InvitationRecipient;
|
||||||
|
use crate::r0::{membership::Invite3pid, thirdparty::Medium};
|
||||||
|
use ruma_identifiers::UserId;
|
||||||
|
use std::convert::TryFrom;
|
||||||
|
#[test]
|
||||||
|
fn deserialize_invite_by_user_id() {
|
||||||
|
let incoming =
|
||||||
|
serde_json::from_str::<InvitationRecipient>(r#" { "user_id": "@carl:example.org" } "#)
|
||||||
|
.unwrap();
|
||||||
|
let user_id = UserId::try_from("@carl:example.org").unwrap();
|
||||||
|
let recipient = InvitationRecipient::UserId { user_id };
|
||||||
|
assert_eq!(incoming, recipient);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn deserialize_invite_by_3pid() {
|
||||||
|
let incoming = serde_json::from_str::<InvitationRecipient>(
|
||||||
|
r#"
|
||||||
|
{
|
||||||
|
"id_server": "example.org",
|
||||||
|
"id_access_token": "abcdefghijklmnop",
|
||||||
|
"medium": "email",
|
||||||
|
"address": "carl@example.org"
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
let recipient = InvitationRecipient::ThirdPartyId(Invite3pid {
|
||||||
|
id_server: "example.org".to_string(),
|
||||||
|
id_access_token: "abcdefghijklmnop".to_string(),
|
||||||
|
medium: Medium::Email,
|
||||||
|
address: "carl@example.org".to_string(),
|
||||||
|
});
|
||||||
|
assert_eq!(incoming, recipient);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
|
|
||||||
use super::Visibility;
|
use super::Visibility;
|
||||||
use crate::r0::thirdparty::Medium;
|
use crate::r0::membership::Invite3pid;
|
||||||
|
|
||||||
ruma_api! {
|
ruma_api! {
|
||||||
metadata {
|
metadata {
|
||||||
@ -96,19 +96,6 @@ pub enum RoomPreset {
|
|||||||
TrustedPrivateChat,
|
TrustedPrivateChat,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Represents third party IDs to invite to the room.
|
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
||||||
pub struct Invite3pid {
|
|
||||||
/// Hostname and port of identity server to be used for account lookups.
|
|
||||||
pub id_server: String,
|
|
||||||
/// An access token registered with the identity server.
|
|
||||||
pub id_access_token: String,
|
|
||||||
/// Type of third party ID.
|
|
||||||
pub medium: Medium,
|
|
||||||
/// Third party identifier.
|
|
||||||
pub address: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Represents content of a state event to be used to initalize new room state.
|
/// Represents content of a state event to be used to initalize new room state.
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
pub struct InitialStateEvent {
|
pub struct InitialStateEvent {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user