From 0ed566913d56652d0824af1c6eea63decfabded1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Tue, 24 Feb 2026 12:13:53 +0100 Subject: [PATCH 1/2] Use Desktop deep-link for enrolment --- crates/defguard_mail/src/templates.rs | 5 +- crates/defguard_mail/src/tests.rs | 164 +++++++++++++------------- 2 files changed, 86 insertions(+), 83 deletions(-) diff --git a/crates/defguard_mail/src/templates.rs b/crates/defguard_mail/src/templates.rs index 135f2a191..34111807d 100644 --- a/crates/defguard_mail/src/templates.rs +++ b/crates/defguard_mail/src/templates.rs @@ -221,7 +221,10 @@ pub async fn new_account_mail( context.insert("url", &enrollment_service_url); context.insert("token", enrollment_token); - // prepare enrollment service URL + // Build URL to Proxy's "open desktop" page, with token as query. + if let Ok(mut url) = enrollment_service_url.path_segments_mut() { + url.push("open-desktop"); + } enrollment_service_url .query_pairs_mut() .append_pair("token", enrollment_token); diff --git a/crates/defguard_mail/src/tests.rs b/crates/defguard_mail/src/tests.rs index 562c246be..db4c6673b 100644 --- a/crates/defguard_mail/src/tests.rs +++ b/crates/defguard_mail/src/tests.rs @@ -39,87 +39,87 @@ async fn set_smtp_settings(pool: &PgPool) { set_settings(Some(settings)); } -#[ignore] -#[sqlx::test] -fn send_desktop_start(_: PgPoolOptions, options: PgConnectOptions) { - let pool = setup_pool(options).await; - set_smtp_settings(&pool).await; - - let mut conn = pool.begin().await.unwrap(); - let context = Context::new(); - let url = Url::parse("http://localhost:8000").unwrap(); - let token = "zXc6N1ndXpWFeyBuogiFp1bD1UomAbZc"; - desktop_start_mail( - &env::var("SMTP_TO").unwrap(), - &mut conn, - context, - &url, - token, - ) - .await - .unwrap(); - - // Delay, so send_and_forget() can process the message. - tokio::time::sleep(Duration::from_secs(2)).await; -} - -#[ignore] -#[sqlx::test] -fn send_new_device_added(_: PgPoolOptions, options: PgConnectOptions) { - let pool = setup_pool(options).await; - set_smtp_settings(&pool).await; - - let mut conn = pool.begin().await.unwrap(); - let device_name = "My beloved machine"; - let public_key = "6N8h7HILMcQ6nqEfQMBAYQH26X+y3t/WdWSOW4bNNxw="; - let locations = &[ - TemplateLocation { - name: String::from("Location 1"), - assigned_ips: String::from("192.168.1.42"), - }, - TemplateLocation { - name: String::from("Location 2"), - assigned_ips: String::from("192.168.2.69"), - }, - ]; - new_device_added_mail( - &env::var("SMTP_TO").unwrap(), - &mut conn, - device_name, - public_key, - locations, - Some("1.2.3.4"), - Some("unknown device"), - ) - .await - .unwrap(); - - // Delay, so send_and_forget() can process the message. - tokio::time::sleep(Duration::from_secs(2)).await; -} - -#[ignore] -#[sqlx::test] -fn send_mfa_code(_: PgPoolOptions, options: PgConnectOptions) { - let pool = setup_pool(options).await; - set_smtp_settings(&pool).await; - - let mut conn = pool.begin().await.unwrap(); - let first_name = "Nebuchadnezzar"; - let code = "123456"; - mfa_code_mail( - &env::var("SMTP_TO").unwrap(), - &mut conn, - first_name, - code, - None, - ) - .await - .unwrap(); - - // Delay, so send_and_forget() can process the message. - tokio::time::sleep(Duration::from_secs(2)).await; -} +// #[ignore] +// #[sqlx::test] +// fn send_desktop_start(_: PgPoolOptions, options: PgConnectOptions) { +// let pool = setup_pool(options).await; +// set_smtp_settings(&pool).await; + +// let mut conn = pool.begin().await.unwrap(); +// let context = Context::new(); +// let url = Url::parse("http://localhost:8000").unwrap(); +// let token = "zXc6N1ndXpWFeyBuogiFp1bD1UomAbZc"; +// desktop_start_mail( +// &env::var("SMTP_TO").unwrap(), +// &mut conn, +// context, +// &url, +// token, +// ) +// .await +// .unwrap(); + +// // Delay, so send_and_forget() can process the message. +// tokio::time::sleep(Duration::from_secs(2)).await; +// } + +// #[ignore] +// #[sqlx::test] +// fn send_new_device_added(_: PgPoolOptions, options: PgConnectOptions) { +// let pool = setup_pool(options).await; +// set_smtp_settings(&pool).await; + +// let mut conn = pool.begin().await.unwrap(); +// let device_name = "My beloved machine"; +// let public_key = "6N8h7HILMcQ6nqEfQMBAYQH26X+y3t/WdWSOW4bNNxw="; +// let locations = &[ +// TemplateLocation { +// name: String::from("Location 1"), +// assigned_ips: String::from("192.168.1.42"), +// }, +// TemplateLocation { +// name: String::from("Location 2"), +// assigned_ips: String::from("192.168.2.69"), +// }, +// ]; +// new_device_added_mail( +// &env::var("SMTP_TO").unwrap(), +// &mut conn, +// device_name, +// public_key, +// locations, +// Some("1.2.3.4"), +// Some("unknown device"), +// ) +// .await +// .unwrap(); + +// // Delay, so send_and_forget() can process the message. +// tokio::time::sleep(Duration::from_secs(2)).await; +// } + +// #[ignore] +// #[sqlx::test] +// fn send_mfa_code(_: PgPoolOptions, options: PgConnectOptions) { +// let pool = setup_pool(options).await; +// set_smtp_settings(&pool).await; + +// let mut conn = pool.begin().await.unwrap(); +// let first_name = "Nebuchadnezzar"; +// let code = "123456"; +// mfa_code_mail( +// &env::var("SMTP_TO").unwrap(), +// &mut conn, +// first_name, +// code, +// None, +// ) +// .await +// .unwrap(); + +// // Delay, so send_and_forget() can process the message. +// tokio::time::sleep(Duration::from_secs(2)).await; +// } #[ignore] #[sqlx::test] @@ -128,7 +128,7 @@ fn send_new_account(_: PgPoolOptions, options: PgConnectOptions) { set_smtp_settings(&pool).await; let mut conn = pool.begin().await.unwrap(); - let url = Url::parse("http://localhost:8000").unwrap(); + let url = Url::parse("http://localhost:8001").unwrap(); let context = Context::new(); let token = "zXc6N1ndXpWFeyBuogiFp1bD1UomAbZc"; new_account_mail( From 2352f22460c819f761449bc4f00e0db33ce8b137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Tue, 24 Feb 2026 12:15:31 +0100 Subject: [PATCH 2/2] Uncomment tests --- crates/defguard_mail/src/tests.rs | 162 +++++++++++++++--------------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/crates/defguard_mail/src/tests.rs b/crates/defguard_mail/src/tests.rs index db4c6673b..cbcd01e21 100644 --- a/crates/defguard_mail/src/tests.rs +++ b/crates/defguard_mail/src/tests.rs @@ -39,87 +39,87 @@ async fn set_smtp_settings(pool: &PgPool) { set_settings(Some(settings)); } -// #[ignore] -// #[sqlx::test] -// fn send_desktop_start(_: PgPoolOptions, options: PgConnectOptions) { -// let pool = setup_pool(options).await; -// set_smtp_settings(&pool).await; - -// let mut conn = pool.begin().await.unwrap(); -// let context = Context::new(); -// let url = Url::parse("http://localhost:8000").unwrap(); -// let token = "zXc6N1ndXpWFeyBuogiFp1bD1UomAbZc"; -// desktop_start_mail( -// &env::var("SMTP_TO").unwrap(), -// &mut conn, -// context, -// &url, -// token, -// ) -// .await -// .unwrap(); - -// // Delay, so send_and_forget() can process the message. -// tokio::time::sleep(Duration::from_secs(2)).await; -// } - -// #[ignore] -// #[sqlx::test] -// fn send_new_device_added(_: PgPoolOptions, options: PgConnectOptions) { -// let pool = setup_pool(options).await; -// set_smtp_settings(&pool).await; - -// let mut conn = pool.begin().await.unwrap(); -// let device_name = "My beloved machine"; -// let public_key = "6N8h7HILMcQ6nqEfQMBAYQH26X+y3t/WdWSOW4bNNxw="; -// let locations = &[ -// TemplateLocation { -// name: String::from("Location 1"), -// assigned_ips: String::from("192.168.1.42"), -// }, -// TemplateLocation { -// name: String::from("Location 2"), -// assigned_ips: String::from("192.168.2.69"), -// }, -// ]; -// new_device_added_mail( -// &env::var("SMTP_TO").unwrap(), -// &mut conn, -// device_name, -// public_key, -// locations, -// Some("1.2.3.4"), -// Some("unknown device"), -// ) -// .await -// .unwrap(); - -// // Delay, so send_and_forget() can process the message. -// tokio::time::sleep(Duration::from_secs(2)).await; -// } - -// #[ignore] -// #[sqlx::test] -// fn send_mfa_code(_: PgPoolOptions, options: PgConnectOptions) { -// let pool = setup_pool(options).await; -// set_smtp_settings(&pool).await; - -// let mut conn = pool.begin().await.unwrap(); -// let first_name = "Nebuchadnezzar"; -// let code = "123456"; -// mfa_code_mail( -// &env::var("SMTP_TO").unwrap(), -// &mut conn, -// first_name, -// code, -// None, -// ) -// .await -// .unwrap(); - -// // Delay, so send_and_forget() can process the message. -// tokio::time::sleep(Duration::from_secs(2)).await; -// } +#[ignore] +#[sqlx::test] +fn send_desktop_start(_: PgPoolOptions, options: PgConnectOptions) { + let pool = setup_pool(options).await; + set_smtp_settings(&pool).await; + + let mut conn = pool.begin().await.unwrap(); + let context = Context::new(); + let url = Url::parse("http://localhost:8000").unwrap(); + let token = "zXc6N1ndXpWFeyBuogiFp1bD1UomAbZc"; + desktop_start_mail( + &env::var("SMTP_TO").unwrap(), + &mut conn, + context, + &url, + token, + ) + .await + .unwrap(); + + // Delay, so send_and_forget() can process the message. + tokio::time::sleep(Duration::from_secs(2)).await; +} + +#[ignore] +#[sqlx::test] +fn send_new_device_added(_: PgPoolOptions, options: PgConnectOptions) { + let pool = setup_pool(options).await; + set_smtp_settings(&pool).await; + + let mut conn = pool.begin().await.unwrap(); + let device_name = "My beloved machine"; + let public_key = "6N8h7HILMcQ6nqEfQMBAYQH26X+y3t/WdWSOW4bNNxw="; + let locations = &[ + TemplateLocation { + name: String::from("Location 1"), + assigned_ips: String::from("192.168.1.42"), + }, + TemplateLocation { + name: String::from("Location 2"), + assigned_ips: String::from("192.168.2.69"), + }, + ]; + new_device_added_mail( + &env::var("SMTP_TO").unwrap(), + &mut conn, + device_name, + public_key, + locations, + Some("1.2.3.4"), + Some("unknown device"), + ) + .await + .unwrap(); + + // Delay, so send_and_forget() can process the message. + tokio::time::sleep(Duration::from_secs(2)).await; +} + +#[ignore] +#[sqlx::test] +fn send_mfa_code(_: PgPoolOptions, options: PgConnectOptions) { + let pool = setup_pool(options).await; + set_smtp_settings(&pool).await; + + let mut conn = pool.begin().await.unwrap(); + let first_name = "Nebuchadnezzar"; + let code = "123456"; + mfa_code_mail( + &env::var("SMTP_TO").unwrap(), + &mut conn, + first_name, + code, + None, + ) + .await + .unwrap(); + + // Delay, so send_and_forget() can process the message. + tokio::time::sleep(Duration::from_secs(2)).await; +} #[ignore] #[sqlx::test]