package service import ( "bytes" "encoding/hex" "errors" "net" "src.dualinventive.com/go/dinet/rpc" ) // getMacAddr gets the MAC hardware address of the host machine func getMacAddr() (string, error) { interfaces, err := net.Interfaces() if err == nil { for _, i := range interfaces { if i.Flags&(net.FlagUp|net.FlagLoopback) == net.FlagUp && !bytes.Equal(i.HardwareAddr, nil) { return hex.EncodeToString([]byte(i.HardwareAddr)), nil } } } return "", errors.New("no MAC address found") } // GenerateUIDFromMac generates a device UID based on the MAC address of the host machine func GenerateUIDFromMac(prefix string) (string, error) { mac, err := getMacAddr() if err != nil { return rpc.DeviceUIDInvalid, err } return rpc.GenerateDeviceUID(prefix, mac) }