add Confirmation struct, and improve confirmation parsing
This commit is contained in:
parent
d2bf5478ba
commit
c23db2a5e9
5 changed files with 61 additions and 9 deletions
7
Cargo.lock
generated
7
Cargo.lock
generated
|
@ -24,6 +24,12 @@ dependencies = [
|
|||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.42"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "595d3cfa7a60d4555cb5067b99f07142a08ea778de5cf993f7b75c7d8fabc486"
|
||||
|
||||
[[package]]
|
||||
name = "async-compression"
|
||||
version = "0.3.7"
|
||||
|
@ -1285,6 +1291,7 @@ checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0"
|
|||
name = "steamguard-cli"
|
||||
version = "0.2.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"base64",
|
||||
"clap",
|
||||
"cookie",
|
||||
|
|
|
@ -7,6 +7,7 @@ edition = "2018"
|
|||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
anyhow = "^1.0"
|
||||
hmac-sha1 = "^0.1"
|
||||
base64 = "0.13.0"
|
||||
text_io = "0.1.8"
|
||||
|
|
33
src/confirmation.rs
Normal file
33
src/confirmation.rs
Normal file
|
@ -0,0 +1,33 @@
|
|||
/// A mobile confirmation. There are multiple things that can be confirmed, like trade offers.
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Confirmation {
|
||||
pub id: u64,
|
||||
pub key: u64,
|
||||
/// Comes from the `data-type` attribute in the HTML
|
||||
pub int_type: i32,
|
||||
/// Trade offer ID or market transaction ID
|
||||
pub creator: u64,
|
||||
pub conf_type: ConfirmationType,
|
||||
pub description: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub enum ConfirmationType {
|
||||
Generic = 1,
|
||||
Trade = 2,
|
||||
MarketSell = 3,
|
||||
AccountRecovery = 6,
|
||||
Unknown
|
||||
}
|
||||
|
||||
impl From<&str> for ConfirmationType {
|
||||
fn from(text: &str) -> Self {
|
||||
match text {
|
||||
"1" => ConfirmationType::Generic,
|
||||
"2" => ConfirmationType::Trade,
|
||||
"3" => ConfirmationType::MarketSell,
|
||||
"6" => ConfirmationType::AccountRecovery,
|
||||
_ => ConfirmationType::Unknown,
|
||||
}
|
||||
}
|
||||
}
|
27
src/lib.rs
27
src/lib.rs
|
@ -1,4 +1,5 @@
|
|||
use std::{collections::HashMap, convert::TryInto, thread, time};
|
||||
use confirmation::{Confirmation, ConfirmationType};
|
||||
use hmacsha1::hmac_sha1;
|
||||
use regex::Regex;
|
||||
use reqwest::{Url, cookie::CookieStore, header::{COOKIE, USER_AGENT}};
|
||||
|
@ -6,8 +7,11 @@ use serde::{Serialize, Deserialize};
|
|||
use log::*;
|
||||
#[macro_use]
|
||||
extern crate lazy_static;
|
||||
#[macro_use]
|
||||
extern crate anyhow;
|
||||
|
||||
pub mod steamapi;
|
||||
mod confirmation;
|
||||
|
||||
// const STEAMAPI_BASE: String = "https://api.steampowered.com";
|
||||
// const COMMUNITY_BASE: String = "https://steamcommunity.com";
|
||||
|
@ -130,7 +134,7 @@ impl SteamGuardAccount {
|
|||
return params;
|
||||
}
|
||||
|
||||
pub fn get_trade_confirmations(&self) -> Result<Vec<String>, reqwest::Error> {
|
||||
pub fn get_trade_confirmations(&self) -> Result<Vec<Confirmation>, anyhow::Error> {
|
||||
// uri: "https://steamcommunity.com/mobileconf/conf"
|
||||
// confirmation details:
|
||||
let url = "https://steamcommunity.com".parse::<Url>().unwrap();
|
||||
|
@ -171,12 +175,19 @@ impl SteamGuardAccount {
|
|||
// <div>Nothing to confirm</div>
|
||||
match CONFIRMATION_REGEX.captures(text.as_str()) {
|
||||
Some(caps) => {
|
||||
let conf_id = &caps[1];
|
||||
let conf_key = &caps[2];
|
||||
let conf_type = &caps[3];
|
||||
let conf_creator = &caps[4];
|
||||
debug!("conf_id={} conf_key={} conf_type={} conf_creator={}", conf_id, conf_key, conf_type, conf_creator);
|
||||
return Ok(vec![format!("conf_id={} conf_key={} conf_type={} conf_creator={}", conf_id, conf_key, conf_type, conf_creator)]);
|
||||
let conf_id = caps[1].parse()?;
|
||||
let conf_key = caps[2].parse()?;
|
||||
let conf_type = caps[3].try_into().unwrap_or(ConfirmationType::Unknown);
|
||||
let conf_creator = caps[4].parse()?;
|
||||
debug!("conf_id={} conf_key={} conf_type={:?} conf_creator={}", conf_id, conf_key, conf_type, conf_creator);
|
||||
return Ok(vec![Confirmation {
|
||||
id: conf_id,
|
||||
key: conf_key,
|
||||
conf_type: conf_type,
|
||||
creator: conf_creator,
|
||||
int_type: 0,
|
||||
description: "".into(),
|
||||
}]);
|
||||
}
|
||||
_ => {
|
||||
info!("No confirmations");
|
||||
|
@ -186,7 +197,7 @@ impl SteamGuardAccount {
|
|||
}
|
||||
Err(e) => {
|
||||
error!("error: {:?}", e);
|
||||
return Err(e);
|
||||
bail!(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -134,7 +134,7 @@ fn main() {
|
|||
match account.get_trade_confirmations() {
|
||||
Ok(confs) => {
|
||||
for conf in confs {
|
||||
println!("{}", conf);
|
||||
println!("{:?}", conf);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue