src.dualinventive.com/go/dinet/service/uid.go

33 lines
788 B
Go

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)
}