From c79f9a97e18f0efb18aa30a71c172a20c4087fcf Mon Sep 17 00:00:00 2001 From: digital Date: Wed, 18 Jan 2023 15:26:37 +0100 Subject: [PATCH] client-api: add support for appservice login --- .../src/session/get_login_types.rs | 22 +++++++++++++++++++ crates/ruma-client-api/src/session/login.rs | 3 +++ 2 files changed, 25 insertions(+) diff --git a/crates/ruma-client-api/src/session/get_login_types.rs b/crates/ruma-client-api/src/session/get_login_types.rs index e078f71f..8f257a01 100644 --- a/crates/ruma-client-api/src/session/get_login_types.rs +++ b/crates/ruma-client-api/src/session/get_login_types.rs @@ -71,6 +71,9 @@ pub mod v3 { /// SSO-based login. Sso(SsoLoginType), + /// Application Service login. + ApplicationService(ApplicationServiceLoginType), + /// Custom login type. #[doc(hidden)] _Custom(Box), @@ -91,6 +94,7 @@ pub mod v3 { "m.login.password" => Self::Password(from_json_object(data)?), "m.login.token" => Self::Token(from_json_object(data)?), "m.login.sso" => Self::Sso(from_json_object(data)?), + "m.login.application_service" => Self::ApplicationService(from_json_object(data)?), _ => { Self::_Custom(Box::new(CustomLoginType { type_: login_type.to_owned(), data })) } @@ -103,6 +107,7 @@ pub mod v3 { Self::Password(_) => "m.login.password", Self::Token(_) => "m.login.token", Self::Sso(_) => "m.login.sso", + Self::ApplicationService(_) => "m.login.application_service", Self::_Custom(c) => &c.type_, } } @@ -123,6 +128,7 @@ pub mod v3 { Self::Password(d) => Cow::Owned(serialize(d)), Self::Token(d) => Cow::Owned(serialize(d)), Self::Sso(d) => Cow::Owned(serialize(d)), + Self::ApplicationService(d) => Cow::Owned(serialize(d)), Self::_Custom(c) => Cow::Borrowed(&c.data), } } @@ -238,6 +244,19 @@ pub mod v3 { _Custom(PrivOwnedStr), } + /// The payload for Application Service login. + #[derive(Clone, Debug, Default, Deserialize, Serialize)] + #[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] + #[serde(tag = "type", rename = "m.login.application_service")] + pub struct ApplicationServiceLoginType {} + + impl ApplicationServiceLoginType { + /// Creates a new `ApplicationServiceLoginType`. + pub fn new() -> Self { + Self::default() + } + } + /// A custom login payload. #[doc(hidden)] #[derive(Clone, Debug, Deserialize, Serialize)] @@ -282,6 +301,9 @@ pub mod v3 { "m.login.password" => Self::Password(from_raw_json_value(&json)?), "m.login.token" => Self::Token(from_raw_json_value(&json)?), "m.login.sso" => Self::Sso(from_raw_json_value(&json)?), + "m.login.application_service" => { + Self::ApplicationService(from_raw_json_value(&json)?) + } _ => Self::_Custom(from_raw_json_value(&json)?), }) } diff --git a/crates/ruma-client-api/src/session/login.rs b/crates/ruma-client-api/src/session/login.rs index b6a4335c..63a304c8 100644 --- a/crates/ruma-client-api/src/session/login.rs +++ b/crates/ruma-client-api/src/session/login.rs @@ -210,6 +210,9 @@ pub mod v3 { match login_type { "m.login.password" => from_json_value(json).map(Self::Password), "m.login.token" => from_json_value(json).map(Self::Token), + "m.login.application_service" => { + from_json_value(json).map(Self::ApplicationService) + } _ => from_json_value(json).map(Self::_Custom), } }