From cc9089388f6d032de8b928d348f86d54fdd6950c Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 29 Oct 2025 04:32:28 -0400 Subject: [PATCH] parse email address from index --- .../grok_client/src/datatypes/mod.rs | 1 + .../grok_client/src/datatypes/user_email.rs | 3 ++ .../requests/index_page/parsers/index/mod.rs | 1 + .../parsers/index/parse_index_user_email.rs | 51 +++++++++++++++++++ 4 files changed, 56 insertions(+) create mode 100644 crates/api_clients/grok_client/src/datatypes/user_email.rs create mode 100644 crates/api_clients/grok_client/src/requests/index_page/parsers/index/parse_index_user_email.rs diff --git a/crates/api_clients/grok_client/src/datatypes/mod.rs b/crates/api_clients/grok_client/src/datatypes/mod.rs index 00a22af064..74b7f3526d 100644 --- a/crates/api_clients/grok_client/src/datatypes/mod.rs +++ b/crates/api_clients/grok_client/src/datatypes/mod.rs @@ -1,3 +1,4 @@ pub mod file_id; pub mod file_upload_spec; +pub mod user_email; pub mod user_id; diff --git a/crates/api_clients/grok_client/src/datatypes/user_email.rs b/crates/api_clients/grok_client/src/datatypes/user_email.rs new file mode 100644 index 0000000000..8524151d88 --- /dev/null +++ b/crates/api_clients/grok_client/src/datatypes/user_email.rs @@ -0,0 +1,3 @@ +/// Type for User Emails +#[derive(Clone, Debug)] +pub struct UserEmail(pub String); diff --git a/crates/api_clients/grok_client/src/requests/index_page/parsers/index/mod.rs b/crates/api_clients/grok_client/src/requests/index_page/parsers/index/mod.rs index 998219a627..b773c91773 100644 --- a/crates/api_clients/grok_client/src/requests/index_page/parsers/index/mod.rs +++ b/crates/api_clients/grok_client/src/requests/index_page/parsers/index/mod.rs @@ -5,3 +5,4 @@ pub mod parse_index_sentry_trace; pub mod parse_index_svg_paths; pub mod parse_index_verification_token; mod parse_index_user_id; +mod parse_index_user_email; diff --git a/crates/api_clients/grok_client/src/requests/index_page/parsers/index/parse_index_user_email.rs b/crates/api_clients/grok_client/src/requests/index_page/parsers/index/parse_index_user_email.rs new file mode 100644 index 0000000000..f4448fcce6 --- /dev/null +++ b/crates/api_clients/grok_client/src/requests/index_page/parsers/index/parse_index_user_email.rs @@ -0,0 +1,51 @@ +use crate::datatypes::user_id::UserId; +use once_cell::sync::Lazy; +use regex::Regex; +use crate::datatypes::user_email::UserEmail; + +/// Find the user email in the index.html payload +/// eg. +static JSON_REGEX: Lazy = Lazy::new(|| { + Regex::new(r#"\\?"email\\?":\s*\\?"([^"\\]+)\\?",?"#) + .expect("Regex should parse") +}); + +/// Parse the user email from the index.html +pub fn parse_index_user_email(html: &str) -> Option { + let maybe_meta = scrape_user_email_via_regex(html); + + if let Some(meta) = maybe_meta { + return Some(UserEmail(meta)) + } + + None +} + +fn scrape_user_email_via_regex(html: &str) -> Option { + let captures = JSON_REGEX.captures(html)?; + let capture = captures.get(1)?; + Some(capture.as_str().to_string()) +} + +#[cfg(test)] +mod tests { + use crate::requests::index_page::get_index_page::{get_index, GetIndexPageArgs}; + use crate::requests::index_page::parsers::index::parse_index_user_email::parse_index_user_email; + use crate::test_utils::get_test_cookies::get_test_cookies; + use errors::AnyhowResult; + + #[tokio::test] + #[ignore] // Manual test invocation + async fn test() -> AnyhowResult<()> { + let cookie = get_test_cookies()?; + let index = get_index(GetIndexPageArgs { + cookie: &cookie, + }).await?; + + let user_email = parse_index_user_email(&index.body); + println!("User Email : {:?}", user_email); + + assert_eq!(1, 2); + Ok(()) + } +}