feat: add Request/Response and other necessary objects for MFA implementation

This commit is contained in:
xystrive 2024-07-04 17:58:46 +01:00
parent b4a8082f29
commit 2dcee5cff0
4 changed files with 73 additions and 0 deletions

View File

@ -0,0 +1,7 @@
use chrono::{DateTime, Utc};
#[derive(Debug, Clone)]
pub struct MfaToken {
pub token: String,
pub expires_at: DateTime<Utc>,
}

View File

@ -26,6 +26,7 @@ pub use user::*;
pub use user_settings::*;
pub use voice_state::*;
pub use webhook::*;
pub use mfa_token::*;
use crate::types::Shared;
#[cfg(feature = "client")]
@ -67,6 +68,7 @@ mod user;
mod user_settings;
mod voice_state;
mod webhook;
mod mfa_token;
#[cfg(feature = "client")]
#[async_trait(?Send)]

62
src/types/schema/mfa.rs Normal file
View File

@ -0,0 +1,62 @@
use std::fmt::Display;
use serde::{Serialize, Deserialize};
#[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,
}
impl Display for MfaRequiredSchema {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("MfaRequired")
.field("message", &self.message)
.field("code", &self.code)
.field("mfa", &self.mfa)
.finish()
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "snake_case")]
pub struct MfaVerificationSchema {
pub ticket: String,
pub methods: Vec<MfaMethod>
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "snake_case")]
pub struct MfaMethod {
#[serde(rename = "type")]
pub kind: MfaType,
#[serde(skip_serializing_if = "Option::is_none")]
pub challenge: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub backup_codes_allowed: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "snake_case")]
pub enum MfaType {
TOTP,
SMS,
Backup,
WebAuthn,
Password,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub struct MfaVerifySchema {
pub ticket: String,
pub mfa_type: MfaType,
pub data: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MfaTokenSchema {
pub token: String,
}

View File

@ -4,6 +4,7 @@
pub use apierror::*;
pub use auth::*;
pub use mfa::*;
pub use channel::*;
pub use guild::*;
pub use message::*;
@ -14,6 +15,7 @@ pub use invites::*;
mod apierror;
mod auth;
mod mfa;
mod channel;
mod guild;
mod message;