mirror of
https://github.com/EFForg/rayhunter.git
synced 2026-05-30 17:53:35 -07:00
3455adbf95
* client mode added
* Prevent OTA daemons dmclient and upgrade from running and phoning home to Verizon
* Fix workflow
* WIFI changes to support moxee. May need to rebase as delivering refactoring under other PR.
* code changes for rust based wifi client mode docs next
* Doc changes & security fixes
* Added watchdog and recover if crash occurs for wifi.
* Remove changes which were from device UI work (seperate feature which snuck into this branch)
* Add missing wifi and firewall module declarations
* cleaning up the code a bit
* Gate wpa_suplicant in installer and workflow to avoid building binary every push
* fix to check diskspace
* Improved support for subnet colisions, and attempts to rejoin network.
* Add WiFi client support and S01iptables to T-Mobile and Wingtech installers
Both installers now deploy wpa_supplicant, wpa_cli, udhcpc-hook.sh, and
the S01iptables boot-time firewall script. Config generation uses the
shared install_config/install_wifi_creds helpers instead of manual string
replacement.
* Revert "Add WiFi client support and S01iptables to T-Mobile and Wingtech installers"
This reverts commit 944b369c4f.
* Fix build: ignore unused wifi_ssid/wifi_password fields in T-Mobile and Wingtech installers
* Moved to a wifi crate
* Add host route and arp_filter to prevent subnet collisions
* add wakelock so kernel doesn't shut down wifi on battery when wifi is enabled
* Move wifi to external wifi-station crate, remove wifi from installer, extract OTA blocking
* fixed outdated info, moved udhcpc hook to wifi-station crate.
* Update to new version of wifi-station
* Address PR review feedback: replace Docker wpa build, add iw, remove OTA, revert unrelated changes
- Replace Docker-based wpa_supplicant build with shell script (scripts/build-wpa-supplicant.sh)
- Add iw cross-compilation and deployment to Orbic installer
- Skip wifi tool install if binary already exists on device
- Remove OTA daemon blocker (extracted for separate PR)
- Revert unrelated UZ801 and T-Mobile installer changes
- Remove connection.rs test scaffolding
- Rewrite S01iptables init script to read config.toml directly
- Pin url crate to 2.5.4 to fix MSRV
* Fix build script: use bash for parameter substitution
The ${VAR//pattern/replacement} syntax is a bash extension that
doesn't work in dash (Ubuntu's /bin/sh).
* Fix iw build: export PKG_CONFIG_LIBDIR as env var
Passing PKG_CONFIG_LIBDIR as a make variable doesn't export it to
$(shell pkg-config ...) calls. Set it as an environment variable
so pkg-config finds the cross-compiled libnl.
* Point wifi-station to GitHub rev 97c579a
* add comment
* Update daemon/src/config.rs
Add decorators
Co-authored-by: Andrej Walilko <walilkoa@gmail.com>
* Update daemon/src/server.rs
add utopia doc support
Co-authored-by: Andrej Walilko <walilkoa@gmail.com>
* Update daemon/src/server.rs
add utopia doc support
Co-authored-by: Andrej Walilko <walilkoa@gmail.com>
* Update to wifi-station with utoipa doc strings
* add utoipa to wifi-station
* added WPA3 support
* fix firewall port detection, update wifi-station to c267d37
fix ntfy port_or_known_default, comment out ntfy_url in config
template, update wifi-station with resolv.conf bind mount
fallback, udhcpc_bin config, and module path fix for UZ801
* show wifi UI for tmobile and wingtech, add udhcpc_bin config
both devices have wifi hardware and backend support. wingtech
verified on hardware (QCA6174 via PCIe). uz801 excluded for now
due to driver scan limitations with hostapd active.
* install wifi tools from orbic-usb installer, fix DNS default to Quad9, bump wifi-station rev
* fix Modal scroll listener leak, correct file transfer timeout math, document firewall fail-open, clarify UZ801 wifi status
* build-dev.sh: build wifi tools so install-dev works for orbic-family devices
* update Cargo.lock for wifi-station e8ec5b4
* fix setup_timeout_server crypto provider install, apply rustfmt
* Update installer/src/connection.rs
Co-authored-by: Cooper Quintin <cooperq@users.noreply.github.com>
* Update installer/src/orbic.rs
Co-authored-by: Cooper Quintin <cooperq@users.noreply.github.com>
* apply rustfmt to AdbConnection::run_command
---------
Co-authored-by: Andrej Walilko <walilkoa@gmail.com>
Co-authored-by: Cooper Quintin <cooperq@users.noreply.github.com>
163 lines
5.3 KiB
Rust
163 lines
5.3 KiB
Rust
use log::warn;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use rayhunter::Device;
|
|
use rayhunter::analysis::analyzer::AnalyzerConfig;
|
|
|
|
use crate::error::RayhunterError;
|
|
use crate::notifications::NotificationType;
|
|
|
|
/// The structure of a valid rayhunter configuration
|
|
#[derive(Debug, Clone, Deserialize, Serialize)]
|
|
#[serde(default)]
|
|
#[cfg_attr(feature = "apidocs", derive(utoipa::ToSchema))]
|
|
pub struct Config {
|
|
/// Path to store QMDL files
|
|
pub qmdl_store_path: String,
|
|
/// Listening port
|
|
pub port: u16,
|
|
/// Debug mode
|
|
pub debug_mode: bool,
|
|
/// Internal device name
|
|
pub device: Device,
|
|
/// UI level
|
|
pub ui_level: u8,
|
|
/// Colorblind mode
|
|
pub colorblind_mode: bool,
|
|
/// Key input mode
|
|
pub key_input_mode: u8,
|
|
/// ntfy.sh URL
|
|
pub ntfy_url: Option<String>,
|
|
/// Vector containing the types of enabled notifications
|
|
pub enabled_notifications: Vec<NotificationType>,
|
|
/// Vector containing the list of enabled analyzers
|
|
pub analyzers: AnalyzerConfig,
|
|
/// Minimum disk space required to start a recording
|
|
pub min_space_to_start_recording_mb: u64,
|
|
/// Minimum disk space required to continue a recording
|
|
pub min_space_to_continue_recording_mb: u64,
|
|
/// Wifi client SSID
|
|
pub wifi_ssid: Option<String>,
|
|
/// Wifi client password
|
|
pub wifi_password: Option<String>,
|
|
/// Wifi security type (wpa_psk or sae)
|
|
pub wifi_security: Option<wifi_station::SecurityType>,
|
|
/// Wifi client mode
|
|
pub wifi_enabled: bool,
|
|
/// Vector containing wifi client DNS servers
|
|
pub dns_servers: Option<Vec<String>>,
|
|
/// Wifi client firewall mode
|
|
pub firewall_restrict_outbound: bool,
|
|
/// Vector containing additional wifi client firewall ports to open
|
|
pub firewall_allowed_ports: Option<Vec<u16>>,
|
|
}
|
|
|
|
impl Default for Config {
|
|
fn default() -> Self {
|
|
Config {
|
|
qmdl_store_path: "/data/rayhunter/qmdl".to_string(),
|
|
port: 8080,
|
|
debug_mode: false,
|
|
device: Device::Orbic,
|
|
ui_level: 1,
|
|
colorblind_mode: false,
|
|
key_input_mode: 0,
|
|
analyzers: AnalyzerConfig::default(),
|
|
ntfy_url: None,
|
|
enabled_notifications: vec![NotificationType::Warning, NotificationType::LowBattery],
|
|
min_space_to_start_recording_mb: 1,
|
|
min_space_to_continue_recording_mb: 1,
|
|
wifi_ssid: None,
|
|
wifi_password: None,
|
|
wifi_security: None,
|
|
wifi_enabled: false,
|
|
dns_servers: None,
|
|
firewall_restrict_outbound: true,
|
|
firewall_allowed_ports: None,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Config {
|
|
pub fn wifi_config(&self) -> wifi_station::WifiConfig {
|
|
let (wpa_bin, hostapd_conf, ctrl_interface) = match self.device {
|
|
Device::Tmobile | Device::Wingtech => (
|
|
Some("/usr/sbin/wpa_supplicant".into()),
|
|
Some("/data/configs/hostapd.conf".into()),
|
|
None,
|
|
),
|
|
Device::Uz801 => (
|
|
Some("/system/bin/wpa_supplicant".into()),
|
|
Some("/data/misc/wifi/hostapd.conf".into()),
|
|
Some("/data/misc/wifi/sockets".into()),
|
|
),
|
|
_ => (None, None, None),
|
|
};
|
|
wifi_station::WifiConfig {
|
|
wifi_enabled: self.wifi_enabled,
|
|
dns_servers: self.dns_servers.clone(),
|
|
wifi_ssid: self.wifi_ssid.clone(),
|
|
wifi_password: self.wifi_password.clone(),
|
|
security_type: self.wifi_security,
|
|
wpa_supplicant_bin: wpa_bin.or_else(|| resolve_bin("wpa_supplicant")),
|
|
hostapd_conf,
|
|
ctrl_interface,
|
|
udhcpc_hook_path: Some("/data/rayhunter/udhcpc-hook.sh".into()),
|
|
dhcp_lease_path: Some("/data/rayhunter/dhcp_lease".into()),
|
|
wpa_conf_path: Some("/data/rayhunter/wpa_sta.conf".into()),
|
|
iw_bin: resolve_bin("iw"),
|
|
udhcpc_bin: resolve_bin("udhcpc"),
|
|
crash_log_dir: Some("/data/rayhunter/crash-logs".into()),
|
|
wakelock_name: Some("rayhunter".into()),
|
|
}
|
|
}
|
|
}
|
|
|
|
fn resolve_bin(name: &str) -> Option<String> {
|
|
let local = format!("/data/rayhunter/bin/{name}");
|
|
if std::path::Path::new(&local).exists() {
|
|
return Some(local);
|
|
}
|
|
None
|
|
}
|
|
|
|
pub async fn parse_config<P>(path: P) -> Result<Config, RayhunterError>
|
|
where
|
|
P: AsRef<std::path::Path>,
|
|
{
|
|
let mut config = if let Ok(config_file) = tokio::fs::read_to_string(&path).await {
|
|
toml::from_str(&config_file).map_err(RayhunterError::ConfigFileParsingError)?
|
|
} else {
|
|
warn!("unable to read config file, using default config");
|
|
Config::default()
|
|
};
|
|
|
|
if let Some((ssid, security)) =
|
|
wifi_station::read_network_from_wpa_conf("/data/rayhunter/wpa_sta.conf")
|
|
{
|
|
config.wifi_ssid = Some(ssid);
|
|
config.wifi_security = Some(security);
|
|
} else {
|
|
config.wifi_ssid = None;
|
|
config.wifi_security = None;
|
|
}
|
|
config.wifi_password = None;
|
|
|
|
Ok(config)
|
|
}
|
|
|
|
pub struct Args {
|
|
pub config_path: String,
|
|
}
|
|
|
|
pub fn parse_args() -> Args {
|
|
let args: Vec<String> = std::env::args().collect();
|
|
if args.len() != 2 {
|
|
println!("Usage: {} /path/to/config/file", args[0]);
|
|
std::process::exit(1);
|
|
}
|
|
Args {
|
|
config_path: args[1].clone(),
|
|
}
|
|
}
|