From 7459a503717fa85adc44251c471fe6569f73f20b Mon Sep 17 00:00:00 2001 From: RubberDuckShobe <42943070+RubberDuckShobe@users.noreply.github.com> Date: Tue, 27 Feb 2024 20:40:04 +0100 Subject: [PATCH] Grab and store Steam auth ticket --- Cargo.toml | 4 ++-- src/hooking.rs | 22 ++++++++++++++++------ src/state.rs | 3 ++- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 58483b3..beac2b4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wavebreaker_client" -version = "0.1.0" +version = "3.0.0" edition = "2021" [lib] @@ -29,4 +29,4 @@ tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } figment = { version = "0.*", features = ["toml", "env"] } crochet = "0.2.3" lofty = "0.18.2" -urlencoding = "2.1.3" +url_encoded_data = "0.6.1" diff --git a/src/hooking.rs b/src/hooking.rs index 998ab18..971f1a3 100644 --- a/src/hooking.rs +++ b/src/hooking.rs @@ -13,6 +13,7 @@ use lofty::TaggedFileExt; use tracing::debug; use tracing::error; use tracing::trace; +use url_encoded_data::UrlEncodedData; use windows::core::PCSTR; use windows::Win32::Networking::WinInet::INTERNET_FLAG_RELOAD; use windows::Win32::Networking::WinInet::INTERNET_FLAG_SECURE; @@ -108,16 +109,25 @@ unsafe fn send_hook( CString::from_vec_unchecked(headers.as_bytes().to_vec()), data ); + let mut data = UrlEncodedData::parse_str(data); + + let mut global_data = state::GLOBAL_DATA.lock().unwrap(); + + // store ticket for our own uses + if data.exists("ticket") { + let ticket = data.get_first("ticket").unwrap(); + global_data.ticket = Some(ticket.to_string()); + debug!("Ticket found in data: {:?}", ticket); + } // really crude way to find out if this is a score submission - let global_data = state::GLOBAL_DATA.lock().unwrap(); - if data.contains("artist=") - && data.contains("song=") - && data.contains("score=") + if data.exists("artist") + && data.exists("song") + && data.exists("score") && global_data.current_mbid.is_some() { - let encoded_mbid = urlencoding::encode(global_data.current_mbid.as_ref().unwrap()); - let new_data_string = data.to_string() + "&mbid=" + &encoded_mbid; + data.set_one("mbid", global_data.current_mbid.as_ref().unwrap()); + let new_data_string = data.to_string_of_original_order(); debug!("New score submission form data: {:?}", new_data_string); // allocate new string diff --git a/src/state.rs b/src/state.rs index b06166e..53b1565 100644 --- a/src/state.rs +++ b/src/state.rs @@ -2,6 +2,7 @@ use std::sync::Mutex; pub struct GlobalData { pub current_mbid: Option, + pub ticket: Option, } -pub static GLOBAL_DATA: Mutex = Mutex::new(GlobalData { current_mbid: None }); +pub static GLOBAL_DATA: Mutex = Mutex::new(GlobalData { current_mbid: None, ticket: None });