use serde::{Deserialize, Serialize};
use super::super::{RemoteSteamUser, RemoteSteamUserError};
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct RemoteLoginResult {
#[serde(default)]
pub steam_id: Option<String>,
#[serde(default)]
pub account_name: Option<String>,
pub access_token: String,
pub refresh_token: String,
pub cookies: Vec<String>,
#[serde(default)]
pub new_guard_data: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(tag = "status", rename_all = "snake_case")]
pub enum BeginLogin {
Completed(RemoteLoginResult),
NeedsEmailCode {
session_id: String,
#[serde(default)]
steam_id: Option<String>,
},
}
impl RemoteSteamUser {
pub async fn begin_login(&self, account_name: &str, password: &str, steam_guard_code: Option<&str>, steam_guard_machine_token: Option<&str>) -> Result<BeginLogin, RemoteSteamUserError> {
self.call_typed(
"/api/auth/begin_login",
serde_json::json!({
"account_name": account_name,
"password": password,
"steam_guard_code": steam_guard_code,
"steam_guard_machine_token": steam_guard_machine_token,
}),
)
.await
}
pub async fn submit_guard(&self, session_id: &str, codes: &[&str]) -> Result<RemoteLoginResult, RemoteSteamUserError> {
self.call_typed(
"/api/auth/submit_guard",
serde_json::json!({
"session_id": session_id,
"codes": codes,
}),
)
.await
}
}