package system import ( "context" "strings" "google.golang.org/grpc/metadata" "github.com/netbirdio/netbird/version" ) // DeviceNameCtxKey context key for device name const DeviceNameCtxKey = "deviceName" // OsVersionCtxKey context key for operating system version const OsVersionCtxKey = "OsVersion" // OsNameCtxKey context key for operating system name const OsNameCtxKey = "OsName" // Info is an object that contains machine information // Most of the code is taken from https://github.com/matishsiao/goInfo type Info struct { GoOS string Kernel string Core string Platform string OS string OSVersion string Hostname string CPUs int WiretrusteeVersion string UIVersion string BiosManufacturer string BiosVersion string ChassisType uint ChassisTypeDesc string ConnectionIp string ConnectionMacAddress string CPUSignature string DefaultGatewayIp string ExternalIp string LastReboot string LocalIp string MacAddress string KernelMajorVersion string KernelMinorVersion string OSBuild string OSProductName string ProductTypeDesc string SerialNumber string SystemManufacturer string SystemProductName string } // extractUserAgent extracts Netbird's agent (client) name and version from the outgoing context func extractUserAgent(ctx context.Context) string { md, hasMeta := metadata.FromOutgoingContext(ctx) if hasMeta { agent, ok := md["user-agent"] if ok { nbAgent := strings.Split(agent[0], " ")[0] if strings.HasPrefix(nbAgent, "netbird") { return nbAgent } return "" } } return "" } // extractDeviceName extracts device name from context or returns the default system name func extractDeviceName(ctx context.Context, defaultName string) string { v, ok := ctx.Value(DeviceNameCtxKey).(string) if !ok { return defaultName } return v } // GetDesktopUIUserAgent returns the Desktop ui user agent func GetDesktopUIUserAgent() string { return "netbird-desktop-ui/" + version.NetbirdVersion() }