// Copyright (c) Tailscale Inc & AUTHORS // SPDX-License-Identifier: BSD-3-Clause package com.tailscale.ipn.ui.model import kotlinx.serialization.Serializable class IpnState { @Serializable data class PeerStatusLite( val RxBytes: Long, val TxBytes: Long, val LastHandshake: String, val NodeKey: String, ) @Serializable data class PeerStatus( val ID: StableNodeID, val HostName: String, val DNSName: String, val TailscaleIPs: List? = null, val Tags: List? = null, val PrimaryRoutes: List? = null, val Addrs: List? = null, val Online: Boolean, val ExitNode: Boolean, val ExitNodeOption: Boolean, val PeerAPIURL: List? = null, val Capabilities: List? = null, val SSH_HostKeys: List? = null, val ShareeNode: Boolean? = null, val Expired: Boolean? = null, val Location: Tailcfg.Location? = null, ) { fun computedName(status: Status): String { val name = DNSName val suffix = status.CurrentTailnet?.MagicDNSSuffix suffix ?: return name if (!(name.endsWith("." + suffix + "."))) { return name } return name.dropLast(suffix.count() + 2) } } @Serializable data class ExitNodeStatus( val ID: StableNodeID, val Online: Boolean, val TailscaleIPs: List? = null, ) @Serializable data class TailnetStatus( val Name: String, val MagicDNSSuffix: String, val MagicDNSEnabled: Boolean, ) @Serializable data class Status( val Version: String, val TUN: Boolean, val BackendState: String, val AuthURL: String, val TailscaleIPs: List? = null, val Self: PeerStatus? = null, val ExitNodeStatus: ExitNodeStatus? = null, val Health: List? = null, val CurrentTailnet: TailnetStatus? = null, val CertDomains: List? = null, val Peer: Map? = null, val User: Map? = null, val ClientVersion: Tailcfg.ClientVersion? = null, ) @Serializable data class NetworkLockStatus( var Enabled: Boolean, var PublicKey: String, var NodeKey: String, var NodeKeySigned: Boolean, var FilteredPeers: List? = null, var StateID: ULong? = null, ) @Serializable data class TKAFilteredPeer( var Name: String, var TailscaleIPs: List, var NodeKey: String, ) @Serializable data class PingResult( var IP: Addr, var Err: String, var LatencySeconds: Double, ) } class IpnLocal { @Serializable data class LoginProfile( var ID: String, val Name: String, val Key: String, val UserProfile: Tailcfg.UserProfile, val NetworkProfile: Tailcfg.NetworkProfile? = null, val LocalUserID: String, ) }