on 94de6bc help sign in
crush/internal/event/identifier.go
49 lines 1.0 kB history raw
1package event
3import (
4 "crypto/hmac"
5 "crypto/sha256"
6 "encoding/hex"
7 "fmt"
8 "net"
10 "github.com/denisbrodbeck/machineid"
13var distinctId string
15const (
16 hashKey = "charm"
17 fallbackId = "unknown"
20func getDistinctId() string {
21 if id, err := machineid.ProtectedID(hashKey); err == nil {
22 return id
23 }
24 if macAddr, err := getMacAddr(); err == nil {
25 return hashString(macAddr)
26 }
27 return fallbackId
30func getMacAddr() (string, error) {
31 interfaces, err := net.Interfaces()
32 if err != nil {
33 return "", err
34 }
35 for _, iface := range interfaces {
36 if iface.Flags&net.FlagUp != 0 && iface.Flags&net.FlagLoopback == 0 && len(iface.HardwareAddr) > 0 {
37 if addrs, err := iface.Addrs(); err == nil && len(addrs) > 0 {
38 return iface.HardwareAddr.String(), nil
39 }
40 }
41 }
42 return "", fmt.Errorf("no active interface with mac address found")
45func hashString(str string) string {
46 hash := hmac.New(sha256.New, []byte(str))
47 hash.Write([]byte(hashKey))
48 return hex.EncodeToString(hash.Sum(nil))