feat: add `complete_mfa_challenge` method to ChorusUser
This commit is contained in:
parent
4920c91e52
commit
85a2878f9a
|
@ -8,16 +8,18 @@ use std::collections::HashMap;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
use std::sync::{Arc, RwLock};
|
use std::sync::{Arc, RwLock};
|
||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
use reqwest::Client;
|
use reqwest::Client;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use chrono::Utc;
|
||||||
|
|
||||||
use crate::errors::ChorusResult;
|
use crate::errors::ChorusResult;
|
||||||
use crate::gateway::{Gateway, GatewayHandle};
|
use crate::gateway::{Gateway, GatewayHandle};
|
||||||
use crate::ratelimiter::ChorusRequest;
|
use crate::ratelimiter::ChorusRequest;
|
||||||
use crate::types::types::subconfigs::limits::rates::RateLimits;
|
use crate::types::types::subconfigs::limits::rates::RateLimits;
|
||||||
use crate::types::{
|
use crate::types::{
|
||||||
GeneralConfiguration, Limit, LimitType, LimitsConfiguration, Shared, User, UserSettings,
|
GeneralConfiguration, Limit, LimitType, LimitsConfiguration, MfaTokenSchema, MfaVerifySchema, Shared, User, UserSettings, MfaToken
|
||||||
};
|
};
|
||||||
use crate::UrlBundle;
|
use crate::UrlBundle;
|
||||||
|
|
||||||
|
@ -232,4 +234,35 @@ impl ChorusUser {
|
||||||
gateway,
|
gateway,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Sends a request to complete an MFA challenge.
|
||||||
|
/// # Reference
|
||||||
|
/// See <https://docs.discord.sex/authentication#verify-mfa>
|
||||||
|
///
|
||||||
|
/// If successful, the MFA verification JWT returned is set on the current [ChorusUser] executing the
|
||||||
|
/// request.
|
||||||
|
///
|
||||||
|
/// The JWT token expires after 5 minutes.
|
||||||
|
pub async fn complete_mfa_challenge(&mut self, mfa_verify_schema: MfaVerifySchema) -> ChorusResult<()> {
|
||||||
|
let endpoint_url = "/mfa/finish";
|
||||||
|
let chorus_request = ChorusRequest {
|
||||||
|
request: Client::new()
|
||||||
|
.post(endpoint_url)
|
||||||
|
.json(&mfa_verify_schema),
|
||||||
|
limit_type: match self.object.is_some() {
|
||||||
|
true => LimitType::Global,
|
||||||
|
false => LimitType::Ip,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let mfa_token_schema = chorus_request
|
||||||
|
.deserialize_response::<MfaTokenSchema>(self).await?;
|
||||||
|
|
||||||
|
self.mfa_token = Some(MfaToken {
|
||||||
|
token: mfa_token_schema.token,
|
||||||
|
expires_at: Utc::now() + Duration::from_secs(60 * 5),
|
||||||
|
});
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue