From 5d361b5421e7cd6b2a0d677c726faf4b2da3db08 Mon Sep 17 00:00:00 2001 From: Pascal Fischer <32096965+pascal-fischer@users.noreply.github.com> Date: Tue, 19 Aug 2025 11:35:03 +0200 Subject: [PATCH] [management] add nil handling for route domains (#4366) --- management/server/route.go | 3 +++ route/route.go | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/management/server/route.go b/management/server/route.go index 6adff56b5..b853d9cd6 100644 --- a/management/server/route.go +++ b/management/server/route.go @@ -290,6 +290,9 @@ func (am *DefaultAccountManager) DeleteRoute(ctx context.Context, accountID stri return transaction.DeleteRoute(ctx, accountID, string(routeID)) }) + if err != nil { + return fmt.Errorf("failed to delete route %s: %w", routeID, err) + } am.StoreEvent(ctx, userID, string(route.ID), accountID, activity.RouteRemoved, route.EventMeta()) diff --git a/route/route.go b/route/route.go index bf62bf666..604f8c60f 100644 --- a/route/route.go +++ b/route/route.go @@ -111,7 +111,11 @@ type Route struct { // EventMeta returns activity event meta related to the route func (r *Route) EventMeta() map[string]any { - return map[string]any{"name": r.NetID, "network_range": r.Network.String(), "domains": r.Domains.SafeString(), "peer_id": r.Peer, "peer_groups": r.PeerGroups} + domains := "" + if r.Domains != nil { + domains = r.Domains.SafeString() + } + return map[string]any{"name": r.NetID, "network_range": r.Network.String(), "domains": domains, "peer_id": r.Peer, "peer_groups": r.PeerGroups} } // Copy copies a route object @@ -181,7 +185,7 @@ func (r *Route) GetResourceID() ResID { // If the route is dynamic, it returns the domains as comma-separated punycode-encoded string. // If the route is not dynamic, it returns the network (prefix) string. func (r *Route) NetString() string { - if r.IsDynamic() { + if r.IsDynamic() && r.Domains != nil { return r.Domains.SafeString() } return r.Network.String()