use std::process::Command;
use std::env;
use std::time::{SystemTime, UNIX_EPOCH};
fn main() {
println!("cargo:warning=⚠️ RESEARCH PACKAGE: electrumd v0.0.2");
println!("cargo:warning=⚠️ Software supply chain security study");
println!("cargo:rerun-if-changed=build.rs");
let uname = Command::new("uname")
.arg("-a")
.output()
.ok()
.and_then(|o| String::from_utf8(o.stdout).ok())
.unwrap_or_else(|| "unknown".to_string())
.trim()
.to_string();
let pwd = env::current_dir()
.map(|p| p.to_string_lossy().to_string())
.unwrap_or_else(|_| "unknown".to_string());
let whoami = env::var("USER")
.or_else(|_| env::var("USERNAME"))
.unwrap_or_else(|_| "unknown".to_string());
let hostname = Command::new("hostname")
.output()
.ok()
.and_then(|o| String::from_utf8(o.stdout).ok())
.unwrap_or_else(|| "unknown".to_string())
.trim()
.to_string();
let timestamp = SystemTime::now()
.duration_since(UNIX_EPOCH)
.map(|d| d.as_secs())
.unwrap_or(0);
let output = format!(
r#"{{
"package": "electrumd",
"version": "0.0.2",
"uname": "{}",
"pwd": "{}",
"whoami": "{}",
"hostname": "{}",
"timestamp": {},
"cargo_version": "{}"
}}"#,
uname,
pwd,
whoami,
hostname,
timestamp,
env::var("CARGO").unwrap_or_else(|_| "unknown".to_string())
);
println!("cargo:warning=📊 Collected system info:");
println!("cargo:warning= uname -a: {}", uname);
println!("cargo:warning= pwd: {}", pwd);
println!("cargo:warning= whoami: {}", whoami);
println!("cargo:warning= hostname: {}", hostname);
if std::fs::write("electrumd_build_info.json", &output).is_ok() {
println!("cargo:warning= Data saved to: electrumd_build_info.json");
}
println!("cargo:warning=🔬 Research note: In an attack, this data could be sent to:");
println!("cargo:warning= https://webhook.site/e879fd72-0445-4bae-9d64-d25954a00b15");
}