From 96bb617a9c8c412e148fb77087ad3cfd3c5a9ca8 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 18 Jul 2026 11:32:10 -0700 Subject: [PATCH] Match Mullvad hosts by suffix Co-Authored-By: Claude Fable 5 --- shell/plugins/panels/tailscale/Model.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/shell/plugins/panels/tailscale/Model.js b/shell/plugins/panels/tailscale/Model.js index 41075f55..4153067c 100644 --- a/shell/plugins/panels/tailscale/Model.js +++ b/shell/plugins/panels/tailscale/Model.js @@ -35,10 +35,16 @@ function displayHostName(hostName, dnsName) { return shortDnsName(dnsName) || host || "Unknown" } +function isMullvadHost(name) { + var value = String(name || "").toLowerCase() + var suffix = ".mullvad.ts.net" + return value.length > suffix.length && value.indexOf(suffix) === value.length - suffix.length +} + function isMullvadPeer(peer) { - var hostName = String((peer && peer.HostName) || "").toLowerCase() - var dnsName = cleanDnsName((peer && peer.DNSName) || "").toLowerCase() - return dnsName.indexOf(".mullvad.ts.net") !== -1 || hostName.indexOf(".mullvad.ts.net") !== -1 + var hostName = String((peer && peer.HostName) || "") + var dnsName = cleanDnsName((peer && peer.DNSName) || "") + return isMullvadHost(dnsName) || isMullvadHost(hostName) } function osIcon(os) { @@ -120,7 +126,7 @@ function parseExitNodeList(raw) { var country = sliceTableColumn(line, countryStart, cityStart) var city = sliceTableColumn(line, cityStart, statusStart) var status = sliceTableColumn(line, statusStart, -1) - if (host.indexOf(".mullvad.ts.net") === -1) continue + if (!isMullvadHost(host)) continue byHost[host] = { id: "mullvad:" + host,