33 lines
788 B
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)
|
|
}
|