From 43c7b4dc0b473b44c6c974798ceb75a5bc74fee8 Mon Sep 17 00:00:00 2001 From: mlsmaycon Date: Thu, 21 May 2026 12:33:48 +0200 Subject: [PATCH] fix(grpc/proxy): persist Private capability on proxy registration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a proxy connects with capabilities, the registerProxyConnection path constructs a *proxy.Capabilities literal but only copies three of the four fields (SupportsCustomPorts, RequireSubdomain, SupportsCrowdsec) — Private is silently dropped. Effect: the DB's proxies.private column stays NULL for every connection, GetClusterSupportsPrivate sees no proxy reported the capability and returns nil, and the cluster API response strips "private" via openapi omitempty. The dashboard then can't tell a private cluster apart from a centralised one. Add the missing field to the struct literal. No schema change — the Capabilities.Private column already exists (gorm:"embedded"); only the write path was broken. After redeploy + a proxy reconnect, /api/reverse-proxies/clusters now returns "private": true for clusters where an embedded `netbird proxy` is connected. --- management/internals/shared/grpc/proxy.go | 1 + 1 file changed, 1 insertion(+) diff --git a/management/internals/shared/grpc/proxy.go b/management/internals/shared/grpc/proxy.go index 401bbbb80..e7155ae09 100644 --- a/management/internals/shared/grpc/proxy.go +++ b/management/internals/shared/grpc/proxy.go @@ -351,6 +351,7 @@ func (s *ProxyServiceServer) registerProxyConnection(ctx context.Context, params SupportsCustomPorts: c.SupportsCustomPorts, RequireSubdomain: c.RequireSubdomain, SupportsCrowdsec: c.SupportsCrowdsec, + Private: c.Private, } }