ipn/ipnlocal: add Expired to PeerStatus

Needed for clients that get information via the /v0/status LocalAPI
endpoint (e.g. to not offer expired exit nodes as options).

Updates tailscale/corp#8702

Signed-off-by: Mihai Parparita <mihai@tailscale.com>
This commit is contained in:
Mihai Parparita 2023-01-13 15:41:11 -08:00 committed by Mihai Parparita
parent f011a0923a
commit 67f82e62a1
2 changed files with 12 additions and 0 deletions

View File

@ -715,6 +715,10 @@ func peerStatusFromNode(ps *ipnstate.PeerStatus, n *tailcfg.Node) {
v := views.IPPrefixSliceOf(n.PrimaryRoutes) v := views.IPPrefixSliceOf(n.PrimaryRoutes)
ps.PrimaryRoutes = &v ps.PrimaryRoutes = &v
} }
if n.Expired {
ps.Expired = true
}
} }
// WhoIs reports the node and user who owns the node with the given IP:port. // WhoIs reports the node and user who owns the node with the given IP:port.

View File

@ -246,6 +246,11 @@ type PeerStatus struct {
// InEngine means that this peer is tracked by the wireguard engine. // InEngine means that this peer is tracked by the wireguard engine.
// In theory, all of InNetworkMap and InMagicSock and InEngine should all be true. // In theory, all of InNetworkMap and InMagicSock and InEngine should all be true.
InEngine bool InEngine bool
// Expired means that this peer's node key has expired, based on either
// information from control or optimisically set on the client if the
// expiration time has passed.
Expired bool `json:",omitempty"`
} }
type StatusBuilder struct { type StatusBuilder struct {
@ -427,6 +432,9 @@ func (sb *StatusBuilder) AddPeer(peer key.NodePublic, st *PeerStatus) {
if st.PeerAPIURL != nil { if st.PeerAPIURL != nil {
e.PeerAPIURL = st.PeerAPIURL e.PeerAPIURL = st.PeerAPIURL
} }
if st.Expired {
e.Expired = true
}
} }
type StatusUpdater interface { type StatusUpdater interface {