steamguard-cli/src/accountmanager.rs

56 lines
1.7 KiB
Rust
Raw Normal View History

2021-08-01 14:43:18 +02:00
use log::*;
use serde::{Deserialize, Serialize};
2021-03-26 00:47:44 +01:00
use std::fs::File;
use std::io::BufReader;
use std::path::Path;
use steamguard::SteamGuardAccount;
2021-03-25 22:45:41 +01:00
2021-03-26 18:14:59 +01:00
#[derive(Debug, Serialize, Deserialize)]
2021-03-25 22:45:41 +01:00
pub struct Manifest {
2021-08-01 14:43:18 +02:00
pub encrypted: bool,
pub entries: Vec<ManifestEntry>,
pub first_run: bool,
pub periodic_checking: bool,
pub periodic_checking_interval: i32,
pub periodic_checking_checkall: bool,
pub auto_confirm_market_transactions: bool,
pub auto_confirm_trades: bool,
2021-03-25 22:45:41 +01:00
2021-08-01 14:43:18 +02:00
#[serde(skip)]
pub accounts: Vec<SteamGuardAccount>,
#[serde(skip)]
folder: String, // I wanted to use a Path here, but it was too hard to make it work...
2021-03-25 22:45:41 +01:00
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ManifestEntry {
2021-08-01 14:43:18 +02:00
pub encryption_iv: Option<String>,
pub encryption_salt: Option<String>,
pub filename: String,
#[serde(rename = "steamid")]
pub steam_id: u64,
2021-03-25 22:45:41 +01:00
}
2021-03-26 00:47:44 +01:00
impl Manifest {
2021-08-01 15:47:50 +02:00
pub fn load(path: &Path) -> anyhow::Result<Manifest> {
2021-08-01 14:43:18 +02:00
debug!("loading manifest: {:?}", &path);
2021-08-01 15:47:50 +02:00
let file = File::open(path)?;
let reader = BufReader::new(file);
let mut manifest: Manifest = serde_json::from_reader(reader)?;
manifest.folder = String::from(path.parent().unwrap().to_str().unwrap());
return Ok(manifest);
2021-08-01 14:43:18 +02:00
}
2021-03-26 19:05:54 +01:00
2021-08-01 15:47:50 +02:00
pub fn load_accounts(&mut self) -> anyhow::Result<()> {
2021-08-01 14:43:18 +02:00
for entry in &self.entries {
let path = Path::new(&self.folder).join(&entry.filename);
debug!("loading account: {:?}", path);
2021-08-01 15:47:50 +02:00
let file = File::open(path)?;
let reader = BufReader::new(file);
let account: SteamGuardAccount = serde_json::from_reader(reader)?;
self.accounts.push(account);
2021-08-01 14:43:18 +02:00
}
2021-08-01 15:47:50 +02:00
Ok(())
2021-08-01 14:43:18 +02:00
}
2021-03-26 00:47:44 +01:00
}