From 16ba9bedfca3214289e630eb8253684a629123cf Mon Sep 17 00:00:00 2001 From: sqlerrorthing <148702857+sqlerrorthing@users.noreply.github.com> Date: Mon, 3 Nov 2025 05:02:51 +0800 Subject: [PATCH 1/7] unnecessary `.unwrap` --- rust/crates/zaprett/src/cli.rs | 2 +- rust/crates/zaprett/src/service.rs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/rust/crates/zaprett/src/cli.rs b/rust/crates/zaprett/src/cli.rs index 8824e9a..ddae220 100644 --- a/rust/crates/zaprett/src/cli.rs +++ b/rust/crates/zaprett/src/cli.rs @@ -1,8 +1,8 @@ pub mod commands; use clap::Parser; -use getset::Getters; use commands::Command; +use getset::Getters; #[derive(Parser, Getters)] #[command(version)] diff --git a/rust/crates/zaprett/src/service.rs b/rust/crates/zaprett/src/service.rs index 9345727..fc84bb0 100644 --- a/rust/crates/zaprett/src/service.rs +++ b/rust/crates/zaprett/src/service.rs @@ -20,7 +20,7 @@ pub async fn start_service() -> anyhow::Result<()> { bail!("Running not from root, exiting"); }; - if service_status().await.unwrap() { + if service_status().await? { bail!("zaprett already started") } @@ -77,8 +77,8 @@ pub async fn stop_service() -> anyhow::Result<()> { bail!("Running not from root, exiting"); }; - if !service_status().await.unwrap() { - bail!("zaprett service alreeady stopped") + if !service_status().await? { + bail!("zaprett service already stopped") } clear_iptables_rules().expect("clear iptables rules"); From 8a1d336e4be70e4d7c1ccef78b279b8a97ba66d7 Mon Sep 17 00:00:00 2001 From: sqlerrorthing <148702857+sqlerrorthing@users.noreply.github.com> Date: Mon, 3 Nov 2025 05:04:05 +0800 Subject: [PATCH 2/7] good struct --- rust/crates/zaprett/src/config.rs | 37 ++++--------------------------- 1 file changed, 4 insertions(+), 33 deletions(-) diff --git a/rust/crates/zaprett/src/config.rs b/rust/crates/zaprett/src/config.rs index ade207f..cdb4ae5 100644 --- a/rust/crates/zaprett/src/config.rs +++ b/rust/crates/zaprett/src/config.rs @@ -2,58 +2,29 @@ use crate::{MODULE_PATH, merge_files}; use getset::Getters; use serde::{Deserialize, Serialize}; -#[derive(Serialize, Deserialize)] +#[derive(Default, Serialize, Deserialize)] #[serde(rename_all = "lowercase")] pub enum ListType { + #[default] Whitelist, Blacklist, } -impl Default for ListType { - fn default() -> Self { - Self::Whitelist - } -} - -#[derive(Serialize, Deserialize, Getters)] +#[derive(Default, Serialize, Deserialize, Getters)] #[getset(get = "pub")] +#[serde(default)] pub struct Config { - #[serde(default)] active_lists: Vec, - #[serde(default)] active_ipsets: Vec, - #[serde(default)] active_exclude_lists: Vec, - #[serde(default)] active_exclude_ipsets: Vec, - #[serde(default)] list_type: ListType, - #[serde(default)] strategy: String, - #[serde(default)] app_list: String, - #[serde(default)] whitelist: Vec, - #[serde(default)] blacklist: Vec, } -impl Default for Config { - fn default() -> Self { - Self { - active_lists: vec![], - active_ipsets: vec![], - active_exclude_lists: vec![], - active_exclude_ipsets: vec![], - list_type: Default::default(), - strategy: String::new(), - app_list: String::new(), - whitelist: vec![], - blacklist: vec![], - } - } -} - impl ListType { /// # Returns /// From aa1788386a0277d8bca5beda1b6a6312026ce2f5 Mon Sep 17 00:00:00 2001 From: sqlerrorthing <148702857+sqlerrorthing@users.noreply.github.com> Date: Mon, 3 Nov 2025 05:10:52 +0800 Subject: [PATCH 3/7] fix shitcode --- rust/crates/zaprett/src/service.rs | 33 ++++++++++++++---------------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/rust/crates/zaprett/src/service.rs b/rust/crates/zaprett/src/service.rs index fc84bb0..3f23fa0 100644 --- a/rust/crates/zaprett/src/service.rs +++ b/rust/crates/zaprett/src/service.rs @@ -8,8 +8,7 @@ use nix::sys::signal::{Signal, kill}; use nix::unistd::{Pid, Uid}; use regex::Regex; use std::borrow::Cow; -use std::path::Path; -use sysctl::Sysctl; +use sysctl::{Ctl, CtlValue, Sysctl}; use sysinfo::{Pid as SysPid, System}; use tokio::fs; use tokio::fs::File; @@ -62,8 +61,8 @@ pub async fn start_service() -> anyhow::Result<()> { .replace_all(&strat_modified, ZAPRETT_DIR_PATH.to_str().unwrap()) .into_owned(); - let ctl = sysctl::Ctl::new("net.netfilter.nf_conntrack_tcp_be_liberal")?; - ctl.set_value(sysctl::CtlValue::String("1".into()))?; + let ctl = Ctl::new("net.netfilter.nf_conntrack_tcp_be_liberal")?; + ctl.set_value(CtlValue::String("1".into()))?; setup_iptables_rules().expect("setup iptables rules"); @@ -106,19 +105,17 @@ pub async fn service_status() -> anyhow::Result { bail!("Running not from root, exiting"); }; - let pid_i32 = match fs::read_to_string(Path::new(*MODULE_PATH).join("tmp/pid.lock")).await { - Ok(s) => match s.trim().parse::() { - Ok(pid) => pid, - Err(_) => return Ok(false), - }, - Err(_) => return Ok(false), + let Ok(Some(pid)) = fs::read_to_string(MODULE_PATH.join("/tmp/pid.lock")) + .await + .map(|s| s.trim().parse::().ok()) + else { + bail!("failed to get pid"); }; - let pid = SysPid::from(pid_i32 as usize); - let system = System::new_all(); - if let Some(process) = system.process(pid) { - if process.name() == "zaprett" { - return Ok(true); - } - } - Ok(false) + + let is_zaprett = System::new_all() + .process(SysPid::from(pid)) + .map(|process| process.name() == "zaprett") + .unwrap_or(false); + + Ok(is_zaprett) } From b5e37044e2de37e71dc507675d1c339379f5c74c Mon Sep 17 00:00:00 2001 From: sqlerrorthing <148702857+sqlerrorthing@users.noreply.github.com> Date: Mon, 3 Nov 2025 05:13:34 +0800 Subject: [PATCH 4/7] right use format macro --- rust/crates/zaprett/src/lib.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/rust/crates/zaprett/src/lib.rs b/rust/crates/zaprett/src/lib.rs index e9d4031..00a5d5a 100644 --- a/rust/crates/zaprett/src/lib.rs +++ b/rust/crates/zaprett/src/lib.rs @@ -66,16 +66,16 @@ pub async fn merge_files( let mut output_file = File::create(output_path).await?; for input in input_paths { - let input_path = input.as_ref(); - let mut input_file = File::open(input_path) + let input = input.as_ref(); + + let mut input_file = File::open(input) .await - .map_err(|e| format!("Failed to open {}: {}", input_path.display(), e))?; + .map_err(|e| format!("Failed to open {}: {e}", input.display()))?; copy(&mut input_file, &mut output_file).await.map_err(|e| { format!( - "Failed to write contents of {}: {}", - input_path.display(), - e + "Failed to write contents of {}: {e}", + input.display() ) })?; } @@ -96,6 +96,7 @@ fn run_nfqws(args_str: &str) -> anyhow::Result<()> { } else { args.extend(args_str.split_whitespace().map(String::from)); } + let c_args: Vec = args .into_iter() .map(|arg| CString::new(arg).unwrap()) From 574bbbd8cc0c236119bdca328c0f1a3945d29ce5 Mon Sep 17 00:00:00 2001 From: sqlerrorthing <148702857+sqlerrorthing@users.noreply.github.com> Date: Mon, 3 Nov 2025 05:13:58 +0800 Subject: [PATCH 5/7] dereference in wrong place --- rust/crates/zaprett/src/cli/commands.rs | 2 +- rust/crates/zaprett/src/lib.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/crates/zaprett/src/cli/commands.rs b/rust/crates/zaprett/src/cli/commands.rs index ed97180..b014fba 100644 --- a/rust/crates/zaprett/src/cli/commands.rs +++ b/rust/crates/zaprett/src/cli/commands.rs @@ -53,7 +53,7 @@ impl Command { ); } Command::SetAutostart { autostart } => { - if let Err(err) = set_autostart(autostart).await { + if let Err(err) = set_autostart(*autostart).await { error!("Failed to set auto start: {err}") } } diff --git a/rust/crates/zaprett/src/lib.rs b/rust/crates/zaprett/src/lib.rs index 00a5d5a..d22d434 100644 --- a/rust/crates/zaprett/src/lib.rs +++ b/rust/crates/zaprett/src/lib.rs @@ -28,10 +28,10 @@ pub static DEFAULT_START: &str = " --filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=6 $hostlist "; -async fn set_autostart(autostart: &bool) -> Result<(), anyhow::Error> { +async fn set_autostart(autostart: bool) -> Result<(), anyhow::Error> { let autostart_path = MODULE_PATH.join("autostart"); - if *autostart { + if autostart { File::create(autostart_path).await?; } else { fs::remove_file(autostart_path).await?; From d1e56df7fc27f733cc375aa982b0675e1502a6cf Mon Sep 17 00:00:00 2001 From: sqlerrorthing <148702857+sqlerrorthing@users.noreply.github.com> Date: Mon, 3 Nov 2025 05:15:40 +0800 Subject: [PATCH 6/7] move module --- rust/crates/zaprett/src/autostart.rs | 20 ++++++++++++++++++++ rust/crates/zaprett/src/cli/commands.rs | 3 ++- rust/crates/zaprett/src/lib.rs | 21 ++------------------- 3 files changed, 24 insertions(+), 20 deletions(-) create mode 100644 rust/crates/zaprett/src/autostart.rs diff --git a/rust/crates/zaprett/src/autostart.rs b/rust/crates/zaprett/src/autostart.rs new file mode 100644 index 0000000..371e1fd --- /dev/null +++ b/rust/crates/zaprett/src/autostart.rs @@ -0,0 +1,20 @@ +use tokio::fs::File; +use tokio::fs; +use crate::MODULE_PATH; + +pub async fn set_autostart(autostart: bool) -> Result<(), anyhow::Error> { + let autostart_path = MODULE_PATH.join("autostart"); + + if autostart { + File::create(autostart_path).await?; + } else { + fs::remove_file(autostart_path).await?; + } + + Ok(()) +} + +pub fn get_autostart() { + let file = MODULE_PATH.join("autostart"); + println!("{}", file.exists()); +} diff --git a/rust/crates/zaprett/src/cli/commands.rs b/rust/crates/zaprett/src/cli/commands.rs index b014fba..abdde1f 100644 --- a/rust/crates/zaprett/src/cli/commands.rs +++ b/rust/crates/zaprett/src/cli/commands.rs @@ -1,7 +1,8 @@ use crate::service::{restart_service, service_status, start_service, stop_service}; -use crate::{bin_version, get_autostart, module_version, set_autostart}; +use crate::{bin_version, module_version}; use clap::Subcommand; use log::error; +use crate::autostart::{get_autostart, set_autostart}; #[derive(Subcommand)] pub enum Command { diff --git a/rust/crates/zaprett/src/lib.rs b/rust/crates/zaprett/src/lib.rs index d22d434..ea66d89 100644 --- a/rust/crates/zaprett/src/lib.rs +++ b/rust/crates/zaprett/src/lib.rs @@ -3,6 +3,7 @@ pub mod config; mod daemon; pub mod iptables_rust; mod service; +mod autostart; use ini::Ini; use libnfqws::nfqws_main; @@ -11,9 +12,8 @@ use std::ffi::CString; use std::os::raw::c_char; use std::path::Path; use std::sync::LazyLock; -use tokio::fs; use tokio::fs::File; -use tokio::io::{AsyncWriteExt, copy}; +use tokio::io::{copy, AsyncWriteExt}; pub static MODULE_PATH: LazyLock<&Path> = LazyLock::new(|| Path::new("/data/adb/modules/zaprett")); pub static ZAPRETT_DIR_PATH: LazyLock<&Path> = @@ -28,23 +28,6 @@ pub static DEFAULT_START: &str = " --filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=6 $hostlist "; -async fn set_autostart(autostart: bool) -> Result<(), anyhow::Error> { - let autostart_path = MODULE_PATH.join("autostart"); - - if autostart { - File::create(autostart_path).await?; - } else { - fs::remove_file(autostart_path).await?; - } - - Ok(()) -} - -fn get_autostart() { - let file = MODULE_PATH.join("autostart"); - println!("{}", file.exists()); -} - fn module_version() { if let Ok(prop) = Ini::load_from_file(MODULE_PATH.join("module.prop")) && let Some(props) = prop.section::(None) From eaf0e6c756397a1a624d60a3505b662b0a2b7503 Mon Sep 17 00:00:00 2001 From: sqlerrorthing <148702857+sqlerrorthing@users.noreply.github.com> Date: Mon, 3 Nov 2025 05:15:53 +0800 Subject: [PATCH 7/7] unnecessary dereference --- rust/crates/zaprett/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/crates/zaprett/src/main.rs b/rust/crates/zaprett/src/main.rs index 5c91630..dcbc32e 100644 --- a/rust/crates/zaprett/src/main.rs +++ b/rust/crates/zaprett/src/main.rs @@ -6,7 +6,7 @@ async fn main() -> anyhow::Result<()> { pretty_env_logger::init(); let cli = CliApp::parse(); - match &cli.cmd() { + match cli.cmd() { Some(cmd) => cmd.exec().await?, None => println!("zaprett installed. Join us: t.me/zaprett_module"), }