fix: ISO build freshness, WireGuard startup, VPN status, kiosk remote doubling
Some checks failed
Build Archipelago ISO (dev) / build-iso (push) Failing after 3m38s
Some checks failed
Build Archipelago ISO (dev) / build-iso (push) Failing after 3m38s
- ISO builder: run npm ci before npm run build to prevent stale UI artifacts - Unbundled ISO: clean container-images dir to prevent bundled tars leaking - WireGuard: use After=network.target instead of network-online.target for faster wg0 startup on install - VPN status: check actual nvpn0 interface instead of config tunnel_ip to prevent NostrVPN from showing standalone WireGuard IP - ContainerApps: filter out not-installed bundled apps (fixes Bitcoin Knots appearing on clean unbundled installs) - Kiosk: persist kiosk mode to localStorage before /kiosk redirect so App.vue can skip remote relay (fixes input doubling with companion app) - IndeedHub: fix port mapping and X-Forwarded-Prefix passthrough Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -46,14 +46,37 @@ impl RpcHandler {
|
||||
let wg_pubkey = tokio::fs::read_to_string("/var/lib/archipelago/wireguard/public.key")
|
||||
.await.ok().map(|s| s.trim().to_string());
|
||||
|
||||
// Don't report NostrVPN ip_address if it's the same as WireGuard (means tunnel not up)
|
||||
let nvpn_ip = status.ip_address.as_ref().and_then(|ip| {
|
||||
let clean = ip.split('/').next().unwrap_or(ip);
|
||||
if wg_ip.as_deref() == Some(clean) { None } else { Some(ip.clone()) }
|
||||
// Check if nvpn0 tunnel interface actually exists and has an IP
|
||||
let nvpn0_ip = tokio::process::Command::new("ip")
|
||||
.args(["-4", "addr", "show", "nvpn0"])
|
||||
.output().await
|
||||
.ok()
|
||||
.and_then(|o| {
|
||||
let out = String::from_utf8_lossy(&o.stdout).to_string();
|
||||
out.lines()
|
||||
.find(|l| l.contains("inet "))
|
||||
.and_then(|l| l.split_whitespace().nth(1))
|
||||
.map(|s| s.split('/').next().unwrap_or(s).to_string())
|
||||
});
|
||||
|
||||
// NostrVPN IP: only report if nvpn0 tunnel is actually up with its own IP,
|
||||
// and that IP is distinct from the standalone WireGuard IP
|
||||
let nvpn_ip = nvpn0_ip.as_ref().and_then(|ip| {
|
||||
if wg_ip.as_deref() == Some(ip.as_str()) { None } else { Some(ip.clone()) }
|
||||
});
|
||||
|
||||
// NostrVPN is connected only if its dedicated tunnel (nvpn0) has a distinct IP
|
||||
let nvpn_connected = status.provider.as_deref() == Some("nostr-vpn") && nvpn_ip.is_some();
|
||||
|
||||
// connected = NostrVPN tunnel is up OR another VPN provider is active OR standalone WireGuard is up
|
||||
let is_connected = if status.provider.as_deref() == Some("nostr-vpn") {
|
||||
nvpn_connected || wg_ip.is_some()
|
||||
} else {
|
||||
status.connected || wg_ip.is_some()
|
||||
};
|
||||
|
||||
Ok(serde_json::json!({
|
||||
"connected": status.connected || wg_ip.is_some(),
|
||||
"connected": is_connected,
|
||||
"provider": status.provider,
|
||||
"interface": status.interface,
|
||||
"ip_address": nvpn_ip,
|
||||
|
||||
Reference in New Issue
Block a user