From da85408e27fcbbf3dc147f2cf929d8fd6e08efdd Mon Sep 17 00:00:00 2001 From: Reactor Scram Date: Wed, 8 May 2024 15:26:02 -0500 Subject: [PATCH] refactor(gui-client): move `known_dirs` module into `headless-client` (#4908) This should make it easier for the IPC services on both Linux and Windows to write logs to well-known dirs that the GUI can read for exporting zips. --- rust/Cargo.lock | 1 + rust/gui-client/src-tauri/Cargo.toml | 7 +------ rust/gui-client/src-tauri/src/client.rs | 1 - rust/gui-client/src-tauri/src/client/auth.rs | 2 +- .../src-tauri/src/client/crash_handling.rs | 2 +- .../src-tauri/src/client/deep_link/linux.rs | 2 +- rust/gui-client/src-tauri/src/client/gui.rs | 3 ++- .../gui-client/src-tauri/src/client/logging.rs | 6 ++---- .../src-tauri/src/client/settings.rs | 6 ++---- rust/headless-client/Cargo.toml | 4 ++++ .../src}/known_dirs.rs | 18 +++++++++--------- rust/headless-client/src/lib.rs | 2 ++ 12 files changed, 26 insertions(+), 28 deletions(-) rename rust/{gui-client/src-tauri/src/client => headless-client/src}/known_dirs.rs (87%) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 50bb96cc0..5b6cc463d 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -1949,6 +1949,7 @@ dependencies = [ "clap", "connlib-client-shared", "connlib-shared", + "dirs", "firezone-cli-utils", "futures", "git-version", diff --git a/rust/gui-client/src-tauri/Cargo.toml b/rust/gui-client/src-tauri/Cargo.toml index 2a3d78c94..fa62cab69 100644 --- a/rust/gui-client/src-tauri/Cargo.toml +++ b/rust/gui-client/src-tauri/Cargo.toml @@ -21,6 +21,7 @@ connlib-client-shared = { workspace = true } connlib-shared = { workspace = true } crash-handler = "0.6.1" firezone-headless-client = { path = "../../headless-client" } +futures = { version = "0.3", default-features = false } git-version = "0.3.9" hex = "0.4.3" # Same crate Hickory uses @@ -53,18 +54,12 @@ zip = { version = "0.6.6", features = ["deflate", "time"], default-features = fa [target.'cfg(target_os = "linux")'.dependencies] dirs = "5.0.1" -# Used for infinite `pending` on not-yet-implemented functions -futures = "0.3.30" nix = { version = "0.28.0", features = ["user"] } tokio-util = { version = "0.7.10", features = ["codec"] } [target.'cfg(target_os = "macos")'.dependencies] -dirs = "5.0.1" -# Used for infinite `pending` on not-implemented functions -futures = "0.3.30" [target.'cfg(target_os = "windows")'.dependencies] -futures = { version = "0.3", default-features = false } tauri-winrt-notification = "0.2.0" windows-core = "0.56.0" windows-implement = "0.56.0" diff --git a/rust/gui-client/src-tauri/src/client.rs b/rust/gui-client/src-tauri/src/client.rs index 006d01614..a47ef8f8b 100644 --- a/rust/gui-client/src-tauri/src/client.rs +++ b/rust/gui-client/src-tauri/src/client.rs @@ -10,7 +10,6 @@ mod debug_commands; mod deep_link; mod elevation; mod gui; -mod known_dirs; mod logging; mod network_changes; mod resolvers; diff --git a/rust/gui-client/src-tauri/src/client/auth.rs b/rust/gui-client/src-tauri/src/client/auth.rs index 200e3cc14..09f132a94 100644 --- a/rust/gui-client/src-tauri/src/client/auth.rs +++ b/rust/gui-client/src-tauri/src/client/auth.rs @@ -1,6 +1,6 @@ //! Fulfills -use crate::client::known_dirs; +use firezone_headless_client::known_dirs; use rand::{thread_rng, RngCore}; use secrecy::{ExposeSecret, SecretString}; use std::path::PathBuf; diff --git a/rust/gui-client/src-tauri/src/client/crash_handling.rs b/rust/gui-client/src-tauri/src/client/crash_handling.rs index 1bf599f9c..09e92dc54 100755 --- a/rust/gui-client/src-tauri/src/client/crash_handling.rs +++ b/rust/gui-client/src-tauri/src/client/crash_handling.rs @@ -12,9 +12,9 @@ //! - Use dump_syms to convert the pdb to a syms file //! - `minidump-stackwalk --symbols-path firezone.syms crash.dmp` -use crate::client::known_dirs; use anyhow::{anyhow, bail, Context, Result}; use crash_handler::CrashHandler; +use firezone_headless_client::known_dirs; use std::{fs::File, io::Write, path::PathBuf}; /// Attaches a crash handler to the client process diff --git a/rust/gui-client/src-tauri/src/client/deep_link/linux.rs b/rust/gui-client/src-tauri/src/client/deep_link/linux.rs index 067c153c3..cb5921396 100644 --- a/rust/gui-client/src-tauri/src/client/deep_link/linux.rs +++ b/rust/gui-client/src-tauri/src/client/deep_link/linux.rs @@ -1,5 +1,5 @@ -use crate::client::known_dirs; use anyhow::{bail, Context, Result}; +use firezone_headless_client::known_dirs; use secrecy::{ExposeSecret, Secret}; use std::{path::PathBuf, process::Command}; use tokio::{ diff --git a/rust/gui-client/src-tauri/src/client/gui.rs b/rust/gui-client/src-tauri/src/client/gui.rs index 12b4ba394..71517789e 100644 --- a/rust/gui-client/src-tauri/src/client/gui.rs +++ b/rust/gui-client/src-tauri/src/client/gui.rs @@ -755,7 +755,8 @@ async fn run_controller( logging_handles: client::logging::Handles, advanced_settings: AdvancedSettings, ) -> Result<()> { - let session_dir = crate::client::known_dirs::session().context("Couldn't find session dir")?; + let session_dir = + firezone_headless_client::known_dirs::session().context("Couldn't find session dir")?; let ran_before_path = session_dir.join("ran_before.txt"); if !tokio::fs::try_exists(&ran_before_path).await? { let win = app diff --git a/rust/gui-client/src-tauri/src/client/logging.rs b/rust/gui-client/src-tauri/src/client/logging.rs index 49ff5a5e7..e597e899a 100644 --- a/rust/gui-client/src-tauri/src/client/logging.rs +++ b/rust/gui-client/src-tauri/src/client/logging.rs @@ -1,11 +1,9 @@ //! Everything for logging to files, zipping up the files for export, and counting the files -use crate::client::{ - gui::{ControllerRequest, CtlrTx, Managed}, - known_dirs, -}; +use crate::client::gui::{ControllerRequest, CtlrTx, Managed}; use anyhow::{bail, Context, Result}; use connlib_client_shared::file_logger; +use firezone_headless_client::known_dirs; use serde::Serialize; use std::{ fs, io, diff --git a/rust/gui-client/src-tauri/src/client/settings.rs b/rust/gui-client/src-tauri/src/client/settings.rs index dae425e06..60967547b 100644 --- a/rust/gui-client/src-tauri/src/client/settings.rs +++ b/rust/gui-client/src-tauri/src/client/settings.rs @@ -1,11 +1,9 @@ //! Everything related to the Settings window, including //! advanced settings and code for manipulating diagnostic logs. -use crate::client::{ - gui::{self, ControllerRequest, Managed}, - known_dirs, -}; +use crate::client::gui::{self, ControllerRequest, Managed}; use anyhow::{Context, Result}; +use firezone_headless_client::known_dirs; use serde::{Deserialize, Serialize}; use std::{path::PathBuf, time::Duration}; use tokio::sync::oneshot; diff --git a/rust/headless-client/Cargo.toml b/rust/headless-client/Cargo.toml index 1a7d54bf8..239f20652 100644 --- a/rust/headless-client/Cargo.toml +++ b/rust/headless-client/Cargo.toml @@ -25,12 +25,16 @@ tracing = { workspace = true } url = { version = "2.3.1", default-features = false } [target.'cfg(target_os = "linux")'.dependencies] +dirs = "5.0.1" futures = "0.3.30" nix = { version = "0.28.0", features = ["fs", "user"] } resolv-conf = "0.7.0" sd-notify = "0.4.1" # This is a pure Rust re-implementation, so it isn't vulnerable to CVE-2024-3094 tokio-util = { version = "0.7.10", features = ["codec"] } +[target.'cfg(target_os = "macos")'.dependencies] +dirs = "5.0.1" + [target.'cfg(target_os = "windows")'.dependencies] ipconfig = "0.3.2" diff --git a/rust/gui-client/src-tauri/src/client/known_dirs.rs b/rust/headless-client/src/known_dirs.rs similarity index 87% rename from rust/gui-client/src-tauri/src/client/known_dirs.rs rename to rust/headless-client/src/known_dirs.rs index a7210c36e..b1975e67c 100644 --- a/rust/gui-client/src-tauri/src/client/known_dirs.rs +++ b/rust/headless-client/src/known_dirs.rs @@ -7,7 +7,7 @@ //! //! I wanted the ProgramData folder on Windows, which `dirs` alone doesn't provide. -pub(crate) use imp::{logs, runtime, session, settings}; +pub use imp::{logs, runtime, session, settings}; #[cfg(any(target_os = "linux", target_os = "macos"))] mod imp { @@ -18,14 +18,14 @@ mod imp { /// /// Logs are considered cache because they're not configs and it's technically okay /// if the system / user deletes them to free up space - pub(crate) fn logs() -> Option { + pub fn logs() -> Option { Some(dirs::cache_dir()?.join(BUNDLE_ID).join("data").join("logs")) } /// e.g. `/run/user/1000/dev.firezone.client/data` /// /// Crash handler socket and other temp files go here - pub(crate) fn runtime() -> Option { + pub fn runtime() -> Option { Some(dirs::runtime_dir()?.join(BUNDLE_ID).join("data")) } @@ -34,14 +34,14 @@ mod imp { /// Things like actor name are stored here because they're kind of config, /// the system / user should not delete them to free up space, but they're not /// really config since the program will rewrite them automatically to persist sessions. - pub(crate) fn session() -> Option { + pub fn session() -> Option { Some(dirs::data_local_dir()?.join(BUNDLE_ID).join("data")) } /// e.g. `/home/alice/.config/dev.firezone.client/config` /// /// See connlib docs for details - pub(crate) fn settings() -> Option { + pub fn settings() -> Option { Some(dirs::config_local_dir()?.join(BUNDLE_ID).join("config")) } } @@ -53,7 +53,7 @@ mod imp { /// e.g. `C:\Users\Alice\AppData\Local\dev.firezone.client\data\logs` /// /// See connlib docs for details - pub(crate) fn logs() -> Option { + pub fn logs() -> Option { Some( connlib_shared::windows::app_local_data_dir() .ok()? @@ -65,7 +65,7 @@ mod imp { /// e.g. `C:\Users\Alice\AppData\Local\dev.firezone.client\data` /// /// Crash handler socket and other temp files go here - pub(crate) fn runtime() -> Option { + pub fn runtime() -> Option { Some( connlib_shared::windows::app_local_data_dir() .ok()? @@ -76,7 +76,7 @@ mod imp { /// e.g. `C:\Users\Alice\AppData\Local\dev.firezone.client\data` /// /// Things like actor name go here - pub(crate) fn session() -> Option { + pub fn session() -> Option { Some( connlib_shared::windows::app_local_data_dir() .ok()? @@ -87,7 +87,7 @@ mod imp { /// e.g. `C:\Users\Alice\AppData\Local\dev.firezone.client\config` /// /// See connlib docs for details - pub(crate) fn settings() -> Option { + pub fn settings() -> Option { Some( connlib_shared::windows::app_local_data_dir() .ok()? diff --git a/rust/headless-client/src/lib.rs b/rust/headless-client/src/lib.rs index f57ec8bbe..9148b9e65 100644 --- a/rust/headless-client/src/lib.rs +++ b/rust/headless-client/src/lib.rs @@ -20,6 +20,8 @@ use tokio::sync::mpsc; use imp::default_token_path; +pub mod known_dirs; + #[cfg(target_os = "linux")] pub mod imp_linux; #[cfg(target_os = "linux")]