From 561e09016d9d9fdc28beb1ac684cb3eafec5429f Mon Sep 17 00:00:00 2001 From: Keagan McClelland Date: Mon, 13 Sep 2021 11:38:50 -0600 Subject: [PATCH] Feature/wifi sync (#446) * Synchronizes Wifi config during the 'embassy-init' startup sequence * Apply suggestions from code review make directories polymorphic over AsRef Co-authored-by: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> * make resilient to existing symlink * make this more idiomatic Co-authored-by: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Co-authored-by: Aiden McClelland --- appmgr/src/bin/embassy-init.rs | 1 + appmgr/src/net/wifi.rs | 16 ++++++++++++++++ appmgr/src/net/wpa_supplicant.conf.base | 3 +++ 3 files changed, 20 insertions(+) create mode 100644 appmgr/src/net/wpa_supplicant.conf.base diff --git a/appmgr/src/bin/embassy-init.rs b/appmgr/src/bin/embassy-init.rs index 559766107..f1a6a90b4 100644 --- a/appmgr/src/bin/embassy-init.rs +++ b/appmgr/src/bin/embassy-init.rs @@ -110,6 +110,7 @@ async fn init(cfg_path: Option<&str>) -> Result<(), Error> { .await?; } log::info!("Enabled nginx public dir"); + embassy::net::wifi::synchronize_wpa_supplicant_conf(&cfg.datadir().join("main")).await?; Ok(()) } diff --git a/appmgr/src/net/wifi.rs b/appmgr/src/net/wifi.rs index be8574760..f85e9e9e2 100644 --- a/appmgr/src/net/wifi.rs +++ b/appmgr/src/net/wifi.rs @@ -1,4 +1,5 @@ use std::collections::HashMap; +use std::path::Path; use std::time::Duration; use clap::ArgMatches; @@ -517,6 +518,21 @@ pub fn country_code_parse(code: &str, _matches: &ArgMatches<'_>) -> Result>(main_datadir: P) -> Result<(), Error> { + let target = main_datadir.as_ref().join("wpa_supplicant.conf"); + if tokio::fs::metadata(&target).await.is_err() { + tokio::fs::write(&target, include_str!("wpa_supplicant.conf.base")).await?; + } + let link = Path::new("/etc/wpa_supplicant.conf"); + if let Ok(meta) = tokio::fs::symlink_metadata(&link).await { + if meta.file_type().is_symlink() { + tokio::fs::remove_file(&link).await? + } + } + tokio::fs::symlink(&target, link).await?; + Ok(()) +} + #[tokio::test] pub async fn test_interface_connected() { println!("{}", interface_connected("wlp5s0").await.unwrap()); diff --git a/appmgr/src/net/wpa_supplicant.conf.base b/appmgr/src/net/wpa_supplicant.conf.base new file mode 100644 index 000000000..2bd244348 --- /dev/null +++ b/appmgr/src/net/wpa_supplicant.conf.base @@ -0,0 +1,3 @@ +ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev +update_config=1 +country=US \ No newline at end of file