auth.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package auth
  2. import (
  3. "encoding/base64"
  4. "encoding/json"
  5. "os"
  6. "path/filepath"
  7. "sync"
  8. "github.com/gravitl/netmaker/logger"
  9. "github.com/gravitl/netmaker/turnserver/config"
  10. "github.com/pion/turn/v2"
  11. )
  12. var (
  13. authMapLock = &sync.RWMutex{}
  14. HostMap = make(map[string]string)
  15. authBackUpFile = "auth.json"
  16. backUpFilePath = filepath.Join("/etc/config", authBackUpFile)
  17. )
  18. func init() {
  19. os.MkdirAll("/etc/config", os.ModePerm)
  20. loadCredsFromFile()
  21. }
  22. func RegisterNewHostWithTurn(hostID, hostPass string) {
  23. authMapLock.Lock()
  24. HostMap[hostID] = base64.StdEncoding.EncodeToString(turn.GenerateAuthKey(hostID, config.GetTurnHost(), hostPass))
  25. dumpCredsToFile()
  26. authMapLock.Unlock()
  27. }
  28. func UnRegisterNewHostWithTurn(hostID string) {
  29. authMapLock.Lock()
  30. delete(HostMap, hostID)
  31. dumpCredsToFile()
  32. authMapLock.Unlock()
  33. }
  34. func dumpCredsToFile() {
  35. d, err := json.MarshalIndent(HostMap, "", " ")
  36. if err != nil {
  37. logger.Log(0, "failed to dump creds to file: ", err.Error())
  38. return
  39. }
  40. err = os.WriteFile(backUpFilePath, d, os.ModePerm)
  41. if err != nil {
  42. logger.Log(0, "failed to backup auth data: ", err.Error())
  43. }
  44. }
  45. func loadCredsFromFile() error {
  46. d, err := os.ReadFile(backUpFilePath)
  47. if err != nil {
  48. return err
  49. }
  50. return json.Unmarshal(d, &HostMap)
  51. }