From 530ed901719a757630b6c070ec8b2a0219cebc5f Mon Sep 17 00:00:00 2001 From: xystrive Date: Thu, 25 Jul 2024 13:12:13 +0100 Subject: [PATCH] feat: add Request/Response objects for MFA verification endpoints --- src/types/schema/auth.rs | 23 +++++++++++++++++++++++ src/types/schema/mfa.rs | 38 ++++++++++++++++++++++++++++++++------ 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/src/types/schema/auth.rs b/src/types/schema/auth.rs index fd91a7a..77f1095 100644 --- a/src/types/schema/auth.rs +++ b/src/types/schema/auth.rs @@ -35,3 +35,26 @@ pub struct LoginSchema { pub login_source: Option, pub gift_code_sku_id: Option, } + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub struct VerifyMFALoginSchema { + pub ticket: String, + pub code: String, + pub login_source: Option, + pub gift_code_sku_id: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum VerifyMFALoginResponse { + Success { token: String, user_settings: LoginSettings }, + UserSuspended { suspended_user_token: String } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub struct LoginSettings { + pub locale: String, + pub theme: String, +} diff --git a/src/types/schema/mfa.rs b/src/types/schema/mfa.rs index 10709cf..f3b1e8b 100644 --- a/src/types/schema/mfa.rs +++ b/src/types/schema/mfa.rs @@ -1,13 +1,13 @@ use std::fmt::Display; -use serde::{Serialize, Deserialize}; +use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] #[serde(rename_all = "snake_case")] pub struct MfaRequiredSchema { pub message: String, pub code: i32, - pub mfa: MfaVerificationSchema, + pub mfa: MfaVerificationSchema, } impl Display for MfaRequiredSchema { @@ -24,14 +24,14 @@ impl Display for MfaRequiredSchema { #[serde(rename_all = "snake_case")] pub struct MfaVerificationSchema { pub ticket: String, - pub methods: Vec + pub methods: Vec, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] #[serde(rename_all = "snake_case")] pub struct MfaMethod { #[serde(rename = "type")] - pub kind: MfaType, + pub kind: AuthenticatorType, #[serde(skip_serializing_if = "Option::is_none")] pub challenge: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -40,7 +40,7 @@ pub struct MfaMethod { #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] #[serde(rename_all = "snake_case")] -pub enum MfaType { +pub enum AuthenticatorType { TOTP, SMS, Backup, @@ -48,11 +48,27 @@ pub enum MfaType { Password, } +impl Display for AuthenticatorType { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{}", + match self { + AuthenticatorType::TOTP => "totp", + AuthenticatorType::SMS => "sms", + AuthenticatorType::Backup => "backup", + AuthenticatorType::WebAuthn => "webauthn", + AuthenticatorType::Password => "password", + } + ) + } +} + #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "snake_case")] pub struct MfaVerifySchema { pub ticket: String, - pub mfa_type: MfaType, + pub mfa_type: AuthenticatorType, pub data: String, } @@ -60,3 +76,13 @@ pub struct MfaVerifySchema { pub struct MfaTokenSchema { pub token: String, } + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SendMfaSmsSchema { + pub ticket: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SendMfaSmsResponse { + pub phone: String, +}