From 7aa7e0eacb16ef349ac7b274e2b4a41330acfa5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?= Date: Sat, 26 Jun 2021 13:44:41 +0200 Subject: [PATCH] custom ipfetch #63. --- server/internal/types/config/webrtc.go | 14 +++++++++++--- server/internal/utils/ip.go | 4 ++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/server/internal/types/config/webrtc.go b/server/internal/types/config/webrtc.go index 7b8607fa..373481bc 100644 --- a/server/internal/types/config/webrtc.go +++ b/server/internal/types/config/webrtc.go @@ -5,6 +5,7 @@ import ( "strconv" "strings" + "github.com/rs/zerolog/log" "github.com/spf13/cobra" "github.com/spf13/viper" "n.eko.moe/neko/internal/utils" @@ -31,6 +32,11 @@ func (WebRTC) Init(cmd *cobra.Command) error { return err } + cmd.PersistentFlags().String("ipfetch", "http://checkip.amazonaws.com", "automatically fetch IP address from given URL when nat1to1 is not present") + if err := viper.BindPFlag("ipfetch", cmd.PersistentFlags().Lookup("ipfetch")); err != nil { + return err + } + cmd.PersistentFlags().Bool("icelite", false, "configures whether or not the ice agent should be a lite agent") if err := viper.BindPFlag("icelite", cmd.PersistentFlags().Lookup("icelite")); err != nil { return err @@ -68,10 +74,12 @@ func (s *WebRTC) Set() { } if len(s.NAT1To1IPs) == 0 { - ip, err := utils.GetIP() - if err == nil { - s.NAT1To1IPs = append(s.NAT1To1IPs, ip) + ipfetch := viper.GetString("ipfetch") + ip, err := utils.GetIP(ipfetch) + if err != nil { + log.Panic().Err(err).Str("ipfetch", ipfetch).Msg("failed to fetch ip address") } + s.NAT1To1IPs = append(s.NAT1To1IPs, ip) } min := uint16(59000) diff --git a/server/internal/utils/ip.go b/server/internal/utils/ip.go index fbdd1c66..02011c00 100644 --- a/server/internal/utils/ip.go +++ b/server/internal/utils/ip.go @@ -10,7 +10,7 @@ import ( // dig @resolver1.opendns.com ANY myip.opendns.com +short -4 -func GetIP() (string, error) { +func GetIP(serverUrl string) (string, error) { tr := &http.Transport{ Proxy: nil, // ignore proxy DialContext: (&net.Dialer{ @@ -25,7 +25,7 @@ func GetIP() (string, error) { } client := &http.Client{Transport: tr} - rsp, err := client.Get("http://checkip.amazonaws.com") + rsp, err := client.Get(serverUrl) if err != nil { return "", err }