client-api: Add auth_type and session accessors to AuthData
This commit is contained in:
parent
85fc0b39da
commit
cfb1b9de04
@ -1,5 +1,9 @@
|
|||||||
# [unreleased]
|
# [unreleased]
|
||||||
|
|
||||||
|
Improvements:
|
||||||
|
|
||||||
|
* Add `auth_type` and `session` accessors to `uiaa::AuthData`
|
||||||
|
|
||||||
# 0.12.0
|
# 0.12.0
|
||||||
|
|
||||||
Breaking changes:
|
Breaking changes:
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
//!
|
//!
|
||||||
//! [uiaa]: https://matrix.org/docs/spec/client_server/r0.6.1#user-interactive-authentication-api
|
//! [uiaa]: https://matrix.org/docs/spec/client_server/r0.6.1#user-interactive-authentication-api
|
||||||
|
|
||||||
use std::{borrow::Cow, fmt};
|
use std::{borrow::Cow, collections::BTreeMap, fmt};
|
||||||
|
|
||||||
use bytes::BufMut;
|
use bytes::BufMut;
|
||||||
use ruma_api::{
|
use ruma_api::{
|
||||||
@ -16,7 +16,9 @@ use serde::{
|
|||||||
de::{self, DeserializeOwned},
|
de::{self, DeserializeOwned},
|
||||||
Deserialize, Deserializer, Serialize,
|
Deserialize, Deserializer, Serialize,
|
||||||
};
|
};
|
||||||
use serde_json::{from_slice as from_json_slice, value::RawValue as RawJsonValue};
|
use serde_json::{
|
||||||
|
from_slice as from_json_slice, value::RawValue as RawJsonValue, Value as JsonValue,
|
||||||
|
};
|
||||||
|
|
||||||
use crate::error::{Error as MatrixError, ErrorBody};
|
use crate::error::{Error as MatrixError, ErrorBody};
|
||||||
|
|
||||||
@ -55,7 +57,7 @@ pub enum AuthData<'a> {
|
|||||||
FallbackAcknowledgement(FallbackAcknowledgement<'a>),
|
FallbackAcknowledgement(FallbackAcknowledgement<'a>),
|
||||||
|
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
_Custom,
|
_Custom(CustomAuthData<'a>),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> AuthData<'a> {
|
impl<'a> AuthData<'a> {
|
||||||
@ -63,6 +65,36 @@ impl<'a> AuthData<'a> {
|
|||||||
pub fn fallback_acknowledgement(session: &'a str) -> Self {
|
pub fn fallback_acknowledgement(session: &'a str) -> Self {
|
||||||
Self::FallbackAcknowledgement(FallbackAcknowledgement::new(session))
|
Self::FallbackAcknowledgement(FallbackAcknowledgement::new(session))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the value of the `type` field, if it exists.
|
||||||
|
pub fn auth_type(&self) -> Option<&'a str> {
|
||||||
|
match self {
|
||||||
|
AuthData::Password(_) => Some("m.login.password"),
|
||||||
|
AuthData::ReCaptcha(_) => Some("m.login.recaptcha"),
|
||||||
|
AuthData::Token(_) => Some("m.login.token"),
|
||||||
|
AuthData::OAuth2(_) => Some("m.login.oauth2"),
|
||||||
|
AuthData::EmailIdentity(_) => Some("m.login.email.identity"),
|
||||||
|
AuthData::Msisdn(_) => Some("m.login.msisdn"),
|
||||||
|
AuthData::Dummy(_) => Some("m.login.dummy"),
|
||||||
|
AuthData::FallbackAcknowledgement(_) => None,
|
||||||
|
AuthData::_Custom(c) => Some(c.auth_type),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the value of the `session` field, if it exists.
|
||||||
|
pub fn session(&self) -> Option<&'a str> {
|
||||||
|
match self {
|
||||||
|
AuthData::Password(x) => x.session,
|
||||||
|
AuthData::ReCaptcha(x) => x.session,
|
||||||
|
AuthData::Token(x) => x.session,
|
||||||
|
AuthData::OAuth2(x) => x.session,
|
||||||
|
AuthData::EmailIdentity(x) => x.session,
|
||||||
|
AuthData::Msisdn(x) => x.session,
|
||||||
|
AuthData::Dummy(x) => x.session,
|
||||||
|
AuthData::FallbackAcknowledgement(x) => Some(x.session),
|
||||||
|
AuthData::_Custom(x) => x.session,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'de> Deserialize<'de> for IncomingAuthData {
|
impl<'de> Deserialize<'de> for IncomingAuthData {
|
||||||
@ -97,7 +129,7 @@ impl<'de> Deserialize<'de> for IncomingAuthData {
|
|||||||
Some("m.login.msisdn") => from_raw_json_value(&json).map(Self::Msisdn),
|
Some("m.login.msisdn") => from_raw_json_value(&json).map(Self::Msisdn),
|
||||||
Some("m.login.dummy") => from_raw_json_value(&json).map(Self::Dummy),
|
Some("m.login.dummy") => from_raw_json_value(&json).map(Self::Dummy),
|
||||||
None => from_raw_json_value(&json).map(Self::FallbackAcknowledgement),
|
None => from_raw_json_value(&json).map(Self::FallbackAcknowledgement),
|
||||||
Some(_) => Ok(Self::_Custom),
|
Some(_) => from_raw_json_value(&json).map(Self::_Custom),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -273,6 +305,30 @@ impl<'a> FallbackAcknowledgement<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[doc(hidden)]
|
||||||
|
#[derive(Clone, Debug, Serialize)]
|
||||||
|
pub struct CustomAuthData<'a> {
|
||||||
|
#[serde(rename = "type")]
|
||||||
|
pub auth_type: &'a str,
|
||||||
|
pub session: Option<&'a str>,
|
||||||
|
#[serde(flatten)]
|
||||||
|
pub extra: BTreeMap<String, JsonValue>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc(hidden)]
|
||||||
|
#[derive(Clone, Debug, Deserialize)]
|
||||||
|
pub struct IncomingCustomAuthData {
|
||||||
|
#[serde(rename = "type")]
|
||||||
|
pub auth_type: String,
|
||||||
|
pub session: Option<String>,
|
||||||
|
#[serde(flatten)]
|
||||||
|
pub extra: BTreeMap<String, JsonValue>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Outgoing for CustomAuthData<'_> {
|
||||||
|
type Incoming = IncomingCustomAuthData;
|
||||||
|
}
|
||||||
|
|
||||||
/// Identification information for the user.
|
/// Identification information for the user.
|
||||||
#[derive(Clone, Debug, PartialEq, Eq, Outgoing, Serialize)]
|
#[derive(Clone, Debug, PartialEq, Eq, Outgoing, Serialize)]
|
||||||
#[serde(from = "user_serde::IncomingUserIdentifier", into = "user_serde::UserIdentifier<'_>")]
|
#[serde(from = "user_serde::IncomingUserIdentifier", into = "user_serde::UserIdentifier<'_>")]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user