auth.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package auth
  2. import (
  3. "encoding/json"
  4. "os"
  5. "path/filepath"
  6. "sync"
  7. "github.com/gravitl/netmaker/logger"
  8. "github.com/gravitl/netmaker/servercfg"
  9. "github.com/pion/turn/v2"
  10. )
  11. var (
  12. AuthMapLock = &sync.RWMutex{}
  13. HostMap = make(map[string][]byte)
  14. authBackUpFile = "auth.json"
  15. )
  16. func RegisterNewHostWithTurn(hostID, hostPass string) {
  17. AuthMapLock.Lock()
  18. HostMap[hostID] = turn.GenerateAuthKey(hostID, servercfg.GetTurnHost(), hostPass)
  19. dumpCredsToFile()
  20. AuthMapLock.Unlock()
  21. }
  22. func UnRegisterNewHostWithTurn(hostID string) {
  23. AuthMapLock.Lock()
  24. delete(HostMap, hostID)
  25. dumpCredsToFile()
  26. AuthMapLock.Unlock()
  27. }
  28. func dumpCredsToFile() {
  29. d, err := json.MarshalIndent(HostMap, "", " ")
  30. if err != nil {
  31. logger.Log(0, "failed to dump creds to file: ", err.Error())
  32. return
  33. }
  34. userHomeDir, err := os.UserHomeDir()
  35. if err != nil {
  36. logger.Log(0, "failed to get user's home directory")
  37. return
  38. }
  39. err = os.WriteFile(filepath.Join(userHomeDir, authBackUpFile), d, os.ModePerm)
  40. if err != nil {
  41. logger.Log(0, "failed to backup auth data: ", userHomeDir, err.Error())
  42. }
  43. }