From c5d51b517434b36a096de79f504cfe756d0ae928 Mon Sep 17 00:00:00 2001 From: Carson McManus Date: Mon, 19 Feb 2024 08:20:43 -0500 Subject: [PATCH] trade: fix `ApiKeyCreation` confirmation getting iterpreted as `Unknown` (#363) --- Cargo.lock | 22 ++++++++++++++++++++++ steamguard/Cargo.toml | 10 +++++++++- steamguard/src/confirmation.rs | 22 ++++++---------------- 3 files changed, 37 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 908cd14..9e364ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1726,6 +1726,27 @@ dependencies = [ "libc", ] +[[package]] +name = "num_enum" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.23", +] + [[package]] name = "numtoa" version = "0.1.0" @@ -3027,6 +3048,7 @@ dependencies = [ "lazy_static 1.4.0", "log", "maplit", + "num_enum", "phonenumber", "protobuf", "protobuf-codegen", diff --git a/steamguard/Cargo.toml b/steamguard/Cargo.toml index 3a7a358..6e42b7f 100644 --- a/steamguard/Cargo.toml +++ b/steamguard/Cargo.toml @@ -14,7 +14,14 @@ license = "MIT OR Apache-2.0" anyhow = "^1.0" sha1 = "^0.10" base64 = "^0.21" -reqwest = { version = "0.11", default-features = false, features = ["blocking", "json", "cookies", "gzip", "rustls-tls", "multipart"] } +reqwest = { version = "0.11", default-features = false, features = [ + "blocking", + "json", + "cookies", + "gzip", + "rustls-tls", + "multipart", +] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" rsa = "0.9.2" @@ -36,6 +43,7 @@ phonenumber = "0.3" serde_path_to_error = "0.1.11" hmac = "^0.12" sha2 = "^0.10" +num_enum = "0.7.2" [build-dependencies] anyhow = "^1.0" diff --git a/steamguard/src/confirmation.rs b/steamguard/src/confirmation.rs index de0b4cf..2f8ed82 100644 --- a/steamguard/src/confirmation.rs +++ b/steamguard/src/confirmation.rs @@ -367,37 +367,27 @@ impl Confirmation { } } -#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, num_enum::FromPrimitive)] #[repr(u32)] #[serde(from = "u32")] -/// Source: +/// Source: https://github.com/SteamDatabase/SteamTracking/blob/6e7797e69b714c59f4b5784780b24753c17732ba/Structs/enums.steamd#L1607-L1616 /// There are also some additional undocumented types. pub enum ConfirmationType { Test = 1, + /// Occurs when sending a trade offer or accepting a received trade offer, only when there is items on the user's side Trade = 2, + /// Occurs when selling an item on the Steam community market MarketSell = 3, FeatureOptOut = 4, + /// Occurs when changing the phone number associated with the account PhoneNumberChange = 5, AccountRecovery = 6, /// Occurs when a new web API key is created via https://steamcommunity.com/dev/apikey ApiKeyCreation = 9, + #[num_enum(catch_all)] Unknown(u32), } -impl From for ConfirmationType { - fn from(text: u32) -> Self { - match text { - 1 => ConfirmationType::Test, - 2 => ConfirmationType::Trade, - 3 => ConfirmationType::MarketSell, - 4 => ConfirmationType::FeatureOptOut, - 5 => ConfirmationType::PhoneNumberChange, - 6 => ConfirmationType::AccountRecovery, - v => ConfirmationType::Unknown(v), - } - } -} - #[derive(Debug, Deserialize)] pub struct ConfirmationListResponse { pub success: bool,