client-api: add support for appservice login

This commit is contained in:
digital 2023-01-18 15:26:37 +01:00 committed by Jonas Platte
parent 6c00e03c19
commit c79f9a97e1
2 changed files with 25 additions and 0 deletions

View File

@ -71,6 +71,9 @@ pub mod v3 {
/// SSO-based login. /// SSO-based login.
Sso(SsoLoginType), Sso(SsoLoginType),
/// Application Service login.
ApplicationService(ApplicationServiceLoginType),
/// Custom login type. /// Custom login type.
#[doc(hidden)] #[doc(hidden)]
_Custom(Box<CustomLoginType>), _Custom(Box<CustomLoginType>),
@ -91,6 +94,7 @@ pub mod v3 {
"m.login.password" => Self::Password(from_json_object(data)?), "m.login.password" => Self::Password(from_json_object(data)?),
"m.login.token" => Self::Token(from_json_object(data)?), "m.login.token" => Self::Token(from_json_object(data)?),
"m.login.sso" => Self::Sso(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 })) Self::_Custom(Box::new(CustomLoginType { type_: login_type.to_owned(), data }))
} }
@ -103,6 +107,7 @@ pub mod v3 {
Self::Password(_) => "m.login.password", Self::Password(_) => "m.login.password",
Self::Token(_) => "m.login.token", Self::Token(_) => "m.login.token",
Self::Sso(_) => "m.login.sso", Self::Sso(_) => "m.login.sso",
Self::ApplicationService(_) => "m.login.application_service",
Self::_Custom(c) => &c.type_, Self::_Custom(c) => &c.type_,
} }
} }
@ -123,6 +128,7 @@ pub mod v3 {
Self::Password(d) => Cow::Owned(serialize(d)), Self::Password(d) => Cow::Owned(serialize(d)),
Self::Token(d) => Cow::Owned(serialize(d)), Self::Token(d) => Cow::Owned(serialize(d)),
Self::Sso(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), Self::_Custom(c) => Cow::Borrowed(&c.data),
} }
} }
@ -238,6 +244,19 @@ pub mod v3 {
_Custom(PrivOwnedStr), _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. /// A custom login payload.
#[doc(hidden)] #[doc(hidden)]
#[derive(Clone, Debug, Deserialize, Serialize)] #[derive(Clone, Debug, Deserialize, Serialize)]
@ -282,6 +301,9 @@ pub mod v3 {
"m.login.password" => Self::Password(from_raw_json_value(&json)?), "m.login.password" => Self::Password(from_raw_json_value(&json)?),
"m.login.token" => Self::Token(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.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)?), _ => Self::_Custom(from_raw_json_value(&json)?),
}) })
} }

View File

@ -210,6 +210,9 @@ pub mod v3 {
match login_type { match login_type {
"m.login.password" => from_json_value(json).map(Self::Password), "m.login.password" => from_json_value(json).map(Self::Password),
"m.login.token" => from_json_value(json).map(Self::Token), "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), _ => from_json_value(json).map(Self::_Custom),
} }
} }