1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
pub mod event; pub mod fileinfo; pub mod filter; pub mod member; pub mod message; pub mod protocol; pub mod register; pub mod room; pub mod stickers; pub mod sync; pub mod user; use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, Deserialize, Serialize)] pub enum Medium { #[serde(rename = "email")] Email, #[serde(rename = "msisdn")] MsIsdn, } #[derive(Clone, Debug, Serialize)] #[serde(tag = "type")] pub enum UserIdentifier { #[serde(rename = "m.id.user")] User { user: String }, #[serde(rename = "m.id.thirdparty")] ThirdParty { medium: Medium, address: String }, #[serde(rename = "m.id.phone")] Phone { country: String, phone: String }, } #[derive(Clone, Debug, Serialize)] enum LegacyMedium { #[serde(rename = "email")] Email, } #[derive(Clone, Debug, Serialize)] #[serde(untagged)] enum LegacyIdentifier { User { user: String, }, Email { medium: LegacyMedium, address: String, }, } #[derive(Clone, Debug, Serialize)] pub struct Identifier { identifier: UserIdentifier, #[serde(flatten)] legacy_identifier: Option<LegacyIdentifier>, } impl Identifier { pub fn new(identifier: UserIdentifier) -> Self { Self { identifier: identifier.clone(), legacy_identifier: match identifier { UserIdentifier::User { user } => Some(LegacyIdentifier::User { user }), UserIdentifier::ThirdParty { medium: _, address } => { Some(LegacyIdentifier::Email { medium: LegacyMedium::Email, address, }) } UserIdentifier::Phone { .. } => None, }, } } } #[derive(Clone, Debug, Serialize)] pub struct ThreePIDCredentials { pub client_secret: String, pub id_server: String, pub sid: String, } #[derive(Clone, Debug, Serialize)] #[serde(tag = "type")] pub enum AuthenticationData { #[serde(rename = "m.login.password")] Password { #[serde(flatten)] identifier: Identifier, password: String, #[serde(skip_serializing_if = "Option::is_none")] session: Option<String>, }, #[serde(rename = "m.login.recaptcha")] Recaptcha { response: String, #[serde(skip_serializing_if = "Option::is_none")] session: Option<String>, }, #[serde(rename = "m.login.token")] Token { token: String, txn_id: String, #[serde(skip_serializing_if = "Option::is_none")] session: Option<String>, }, #[serde(rename = "m.login.oauth2")] OAuth2 { uri: String }, #[serde(rename = "m.login.email.identity")] Email { threepid_creds: ThreePIDCredentials, #[serde(skip_serializing_if = "Option::is_none")] session: Option<String>, }, #[serde(rename = "m.login.dummy")] Dummy { #[serde(skip_serializing_if = "Option::is_none")] session: Option<String>, }, }