idutils.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package main
  2. import (
  3. "crypto/md5"
  4. "encoding/hex"
  5. "encoding/json"
  6. "errors"
  7. "io/ioutil"
  8. )
  9. type Id struct {
  10. Eni string `json:"eni"`
  11. Mac string `json:"mac"`
  12. }
  13. func initId() (*Id, error) {
  14. id := &Id{}
  15. eni, err := getFirstNetInterface()
  16. if err != nil {
  17. return id, errors.New("could not init ID file")
  18. }
  19. id.Eni = eni.Name
  20. id.Mac = eni.HardwareAddr
  21. data, err := json.Marshal(id)
  22. if err != nil {
  23. return id, errors.New("could not init ID file")
  24. }
  25. err = ioutil.WriteFile("id.json", data, 0660)
  26. if err != nil {
  27. return id, errors.New("could not init ID file")
  28. }
  29. return id, nil
  30. }
  31. func loadId() (*Id, error) {
  32. id := &Id{}
  33. data, err := ioutil.ReadFile("id.json")
  34. if err != nil {
  35. return id, errors.New("could not load ID file")
  36. }
  37. err = json.Unmarshal(data, &id)
  38. if err != nil {
  39. return id, errors.New("could not load ID file")
  40. }
  41. return id, nil
  42. }
  43. func getId() (string, error) {
  44. data, err := loadId()
  45. if err != nil {
  46. data, err = initId()
  47. if err != nil {
  48. return "", errors.New("Could not init id!")
  49. }
  50. }
  51. h := md5.New()
  52. h.Write([]byte(data.Eni + data.Mac))
  53. id := hex.EncodeToString(h.Sum(nil))
  54. return id, nil
  55. }