utils.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package utils
  2. import (
  3. "errors"
  4. "io"
  5. "net/http"
  6. "time"
  7. )
  8. // GetPublicIP - gets public ip
  9. func GetPublicIP() (string, error) {
  10. iplist := []string{"https://ip.client.gravitl.com", "https://ifconfig.me", "https://api.ipify.org", "https://ipinfo.io/ip"}
  11. //for network, ipService := range global_settings.PublicIPServices {
  12. //logger.Log(3, "User provided public IP service defined for network", network, "is", ipService)
  13. // prepend the user-specified service so it's checked first
  14. // iplist = append([]string{ipService}, iplist...)
  15. //}
  16. endpoint := ""
  17. var err error
  18. for _, ipserver := range iplist {
  19. client := &http.Client{
  20. Timeout: time.Second * 10,
  21. }
  22. resp, err := client.Get(ipserver)
  23. if err != nil {
  24. continue
  25. }
  26. defer resp.Body.Close()
  27. if resp.StatusCode == http.StatusOK {
  28. bodyBytes, err := io.ReadAll(resp.Body)
  29. if err != nil {
  30. continue
  31. }
  32. endpoint = string(bodyBytes)
  33. break
  34. }
  35. }
  36. if err == nil && endpoint == "" {
  37. err = errors.New("public address not found")
  38. }
  39. return endpoint, err
  40. }