From 89277828ac4c9f6a11a96a7a78bd5d20f4cd3ebd Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Sun, 12 Jun 2022 00:53:39 +0000 Subject: [PATCH] chore(publicip): `internal/publicip/ipinfo` package --- cmd/gluetun/main.go | 3 ++- internal/cli/openvpnconfig.go | 4 ++-- internal/cli/update.go | 4 ++-- internal/provider/common/updater.go | 4 ++-- internal/publicip/interfaces.go | 8 ++++---- internal/publicip/{ => ipinfo}/fetch.go | 8 +++----- .../publicip/{models/ipinfo.go => ipinfo/model.go} | 12 ++++++------ internal/publicip/{ => ipinfo}/multi.go | 10 ++++------ internal/publicip/publicip.go | 8 +++----- internal/publicip/runner.go | 4 ++-- internal/publicip/state/publicip.go | 6 +++--- internal/publicip/state/state.go | 4 ++-- internal/server/interfaces.go | 4 ++-- internal/vpn/cleanup.go | 4 ++-- internal/vpn/interfaces.go | 4 ++-- 15 files changed, 41 insertions(+), 46 deletions(-) rename internal/publicip/{ => ipinfo}/fetch.go (87%) rename internal/publicip/{models/ipinfo.go => ipinfo/model.go} (72%) rename internal/publicip/{ => ipinfo}/multi.go (85%) diff --git a/cmd/gluetun/main.go b/cmd/gluetun/main.go index 4d2f06c6..01d6d84f 100644 --- a/cmd/gluetun/main.go +++ b/cmd/gluetun/main.go @@ -33,6 +33,7 @@ import ( "github.com/qdm12/gluetun/internal/pprof" "github.com/qdm12/gluetun/internal/provider" "github.com/qdm12/gluetun/internal/publicip" + "github.com/qdm12/gluetun/internal/publicip/ipinfo" "github.com/qdm12/gluetun/internal/routing" "github.com/qdm12/gluetun/internal/server" "github.com/qdm12/gluetun/internal/shadowsocks" @@ -364,7 +365,7 @@ func _main(ctx context.Context, buildInfo models.BuildInformation, go unboundLooper.RunRestartTicker(dnsTickerCtx, dnsTickerDone) controlGroupHandler.Add(dnsTickerHandler) - ipFetcher := publicip.NewFetch(httpClient) + ipFetcher := ipinfo.New(httpClient) publicIPLooper := publicip.NewLoop(ipFetcher, logger.New(log.SetComponent("ip getter")), allSettings.PublicIP, puid, pgid) diff --git a/internal/cli/openvpnconfig.go b/internal/cli/openvpnconfig.go index 8dfe3c0a..31223873 100644 --- a/internal/cli/openvpnconfig.go +++ b/internal/cli/openvpnconfig.go @@ -11,7 +11,7 @@ import ( "github.com/qdm12/gluetun/internal/configuration/sources" "github.com/qdm12/gluetun/internal/constants" "github.com/qdm12/gluetun/internal/provider" - publicipmodels "github.com/qdm12/gluetun/internal/publicip/models" + "github.com/qdm12/gluetun/internal/publicip/ipinfo" "github.com/qdm12/gluetun/internal/storage" "github.com/qdm12/gluetun/internal/updater/resolver" ) @@ -32,7 +32,7 @@ type ParallelResolver interface { } type IPFetcher interface { - FetchMultiInfo(ctx context.Context, ips []net.IP) (data []publicipmodels.IPInfoData, err error) + FetchMultiInfo(ctx context.Context, ips []net.IP) (data []ipinfo.Response, err error) } func (c *CLI) OpenvpnConfig(logger OpenvpnConfigLogger, source sources.Source) error { diff --git a/internal/cli/update.go b/internal/cli/update.go index 5a33da94..483b9be7 100644 --- a/internal/cli/update.go +++ b/internal/cli/update.go @@ -13,7 +13,7 @@ import ( "github.com/qdm12/gluetun/internal/constants" "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider" - "github.com/qdm12/gluetun/internal/publicip" + "github.com/qdm12/gluetun/internal/publicip/ipinfo" "github.com/qdm12/gluetun/internal/storage" "github.com/qdm12/gluetun/internal/updater" "github.com/qdm12/gluetun/internal/updater/resolver" @@ -75,7 +75,7 @@ func (c *CLI) Update(ctx context.Context, args []string, logger UpdaterLogger) e httpClient := &http.Client{Timeout: clientTimeout} unzipper := unzip.New(httpClient) parallelResolver := resolver.NewParallelResolver(options.DNSAddress) - ipFetcher := publicip.NewFetch(httpClient) + ipFetcher := ipinfo.New(httpClient) providers := provider.NewProviders(storage, time.Now, logger, httpClient, unzipper, parallelResolver, ipFetcher) diff --git a/internal/provider/common/updater.go b/internal/provider/common/updater.go index 6dd3ef22..2da6eaf3 100644 --- a/internal/provider/common/updater.go +++ b/internal/provider/common/updater.go @@ -6,7 +6,7 @@ import ( "net" "github.com/qdm12/gluetun/internal/models" - publicipmodels "github.com/qdm12/gluetun/internal/publicip/models" + "github.com/qdm12/gluetun/internal/publicip/ipinfo" "github.com/qdm12/gluetun/internal/updater/resolver" ) @@ -31,5 +31,5 @@ type Warner interface { } type IPFetcher interface { - FetchMultiInfo(ctx context.Context, ips []net.IP) (data []publicipmodels.IPInfoData, err error) + FetchMultiInfo(ctx context.Context, ips []net.IP) (data []ipinfo.Response, err error) } diff --git a/internal/publicip/interfaces.go b/internal/publicip/interfaces.go index 031395b7..369fedd2 100644 --- a/internal/publicip/interfaces.go +++ b/internal/publicip/interfaces.go @@ -6,7 +6,7 @@ import ( "github.com/qdm12/gluetun/internal/configuration/settings" "github.com/qdm12/gluetun/internal/models" - publicipmodels "github.com/qdm12/gluetun/internal/publicip/models" + "github.com/qdm12/gluetun/internal/publicip/ipinfo" ) type statusManager interface { @@ -17,13 +17,13 @@ type statusManager interface { } type stateManager interface { - GetData() (data publicipmodels.IPInfoData) - SetData(data publicipmodels.IPInfoData) + GetData() (data ipinfo.Response) + SetData(data ipinfo.Response) GetSettings() (settings settings.PublicIP) SetSettings(ctx context.Context, settings settings.PublicIP) (outcome string) } type Fetcher interface { FetchInfo(ctx context.Context, ip net.IP) ( - result publicipmodels.IPInfoData, err error) + result ipinfo.Response, err error) } diff --git a/internal/publicip/fetch.go b/internal/publicip/ipinfo/fetch.go similarity index 87% rename from internal/publicip/fetch.go rename to internal/publicip/ipinfo/fetch.go index a95828aa..98203ef4 100644 --- a/internal/publicip/fetch.go +++ b/internal/publicip/ipinfo/fetch.go @@ -1,5 +1,4 @@ -// Package publicip defines interfaces to get your public IP address. -package publicip +package ipinfo import ( "context" @@ -11,14 +10,13 @@ import ( "strings" "github.com/qdm12/gluetun/internal/constants" - "github.com/qdm12/gluetun/internal/publicip/models" ) type Fetch struct { client *http.Client } -func NewFetch(client *http.Client) *Fetch { +func New(client *http.Client) *Fetch { return &Fetch{ client: client, } @@ -33,7 +31,7 @@ var ( // using the ipinfo.io API. If the ip is nil, the public IP address // of the machine is used as the IP. func (f *Fetch) FetchInfo(ctx context.Context, ip net.IP) ( - result models.IPInfoData, err error) { + result Response, err error) { const baseURL = "https://ipinfo.io/" url := baseURL if ip != nil { diff --git a/internal/publicip/models/ipinfo.go b/internal/publicip/ipinfo/model.go similarity index 72% rename from internal/publicip/models/ipinfo.go rename to internal/publicip/ipinfo/model.go index 792d126c..e32431d7 100644 --- a/internal/publicip/models/ipinfo.go +++ b/internal/publicip/ipinfo/model.go @@ -1,8 +1,8 @@ -package models +package ipinfo import "net" -type IPInfoData struct { +type Response struct { IP net.IP `json:"ip,omitempty"` Region string `json:"region,omitempty"` Country string `json:"country,omitempty"` @@ -14,9 +14,9 @@ type IPInfoData struct { Timezone string `json:"timezone,omitempty"` } -func (i IPInfoData) Copy() (copied IPInfoData) { - copied = i - copied.IP = make(net.IP, len(i.IP)) - copy(copied.IP, i.IP) +func (r Response) Copy() (copied Response) { + copied = r + copied.IP = make(net.IP, len(r.IP)) + copy(copied.IP, r.IP) return copied } diff --git a/internal/publicip/multi.go b/internal/publicip/ipinfo/multi.go similarity index 85% rename from internal/publicip/multi.go rename to internal/publicip/ipinfo/multi.go index 79108c87..b60e49f0 100644 --- a/internal/publicip/multi.go +++ b/internal/publicip/ipinfo/multi.go @@ -1,10 +1,8 @@ -package publicip +package ipinfo import ( "context" "net" - - "github.com/qdm12/gluetun/internal/publicip/models" ) // FetchMultiInfo obtains the public IP address information for every IP @@ -14,12 +12,12 @@ import ( // an error is returned, so the results returned should be considered // incomplete in this case. func (f *Fetch) FetchMultiInfo(ctx context.Context, ips []net.IP) ( - results []models.IPInfoData, err error) { + results []Response, err error) { ctx, cancel := context.WithCancel(ctx) type asyncResult struct { index int - result models.IPInfoData + result Response err error } resultsCh := make(chan asyncResult) @@ -34,7 +32,7 @@ func (f *Fetch) FetchMultiInfo(ctx context.Context, ips []net.IP) ( }(i, ip) } - results = make([]models.IPInfoData, len(ips)) + results = make([]Response, len(ips)) for i := 0; i < len(ips); i++ { aResult := <-resultsCh if aResult.err != nil { diff --git a/internal/publicip/publicip.go b/internal/publicip/publicip.go index 19efb405..cbc70f10 100644 --- a/internal/publicip/publicip.go +++ b/internal/publicip/publicip.go @@ -1,13 +1,11 @@ package publicip -import ( - "github.com/qdm12/gluetun/internal/publicip/models" -) +import "github.com/qdm12/gluetun/internal/publicip/ipinfo" -func (l *Loop) GetData() (data models.IPInfoData) { +func (l *Loop) GetData() (data ipinfo.Response) { return l.state.GetData() } -func (l *Loop) SetData(data models.IPInfoData) { +func (l *Loop) SetData(data ipinfo.Response) { l.state.SetData(data) } diff --git a/internal/publicip/runner.go b/internal/publicip/runner.go index 1ce73b0c..73b5fbaa 100644 --- a/internal/publicip/runner.go +++ b/internal/publicip/runner.go @@ -5,7 +5,7 @@ import ( "os" "github.com/qdm12/gluetun/internal/constants" - "github.com/qdm12/gluetun/internal/publicip/models" + "github.com/qdm12/gluetun/internal/publicip/ipinfo" ) func (l *Loop) Run(ctx context.Context, done chan<- struct{}) { @@ -21,7 +21,7 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) { getCtx, getCancel := context.WithCancel(ctx) defer getCancel() - resultCh := make(chan models.IPInfoData) + resultCh := make(chan ipinfo.Response) errorCh := make(chan error) go func() { result, err := l.fetcher.FetchInfo(getCtx, nil) diff --git a/internal/publicip/state/publicip.go b/internal/publicip/state/publicip.go index 79d5533d..65f935d4 100644 --- a/internal/publicip/state/publicip.go +++ b/internal/publicip/state/publicip.go @@ -1,16 +1,16 @@ package state import ( - "github.com/qdm12/gluetun/internal/publicip/models" + "github.com/qdm12/gluetun/internal/publicip/ipinfo" ) -func (s *State) GetData() (data models.IPInfoData) { +func (s *State) GetData() (data ipinfo.Response) { s.ipDataMu.RLock() defer s.ipDataMu.RUnlock() return s.ipData.Copy() } -func (s *State) SetData(data models.IPInfoData) { +func (s *State) SetData(data ipinfo.Response) { s.ipDataMu.Lock() defer s.ipDataMu.Unlock() s.ipData = data.Copy() diff --git a/internal/publicip/state/state.go b/internal/publicip/state/state.go index 795f42e3..005e172e 100644 --- a/internal/publicip/state/state.go +++ b/internal/publicip/state/state.go @@ -6,7 +6,7 @@ import ( "github.com/qdm12/gluetun/internal/configuration/settings" "github.com/qdm12/gluetun/internal/models" - publicipmodels "github.com/qdm12/gluetun/internal/publicip/models" + "github.com/qdm12/gluetun/internal/publicip/ipinfo" ) func New(statusApplier StatusApplier, @@ -25,7 +25,7 @@ type State struct { settings settings.PublicIP settingsMu sync.RWMutex - ipData publicipmodels.IPInfoData + ipData ipinfo.Response ipDataMu sync.RWMutex updateTicker chan<- struct{} diff --git a/internal/server/interfaces.go b/internal/server/interfaces.go index 30921765..30490d75 100644 --- a/internal/server/interfaces.go +++ b/internal/server/interfaces.go @@ -5,7 +5,7 @@ import ( "github.com/qdm12/gluetun/internal/configuration/settings" "github.com/qdm12/gluetun/internal/models" - publicipmodels "github.com/qdm12/gluetun/internal/publicip/models" + "github.com/qdm12/gluetun/internal/publicip/ipinfo" ) type VPNLooper interface { @@ -26,5 +26,5 @@ type PortForwardedGetter interface { } type PublicIPLoop interface { - GetData() (data publicipmodels.IPInfoData) + GetData() (data ipinfo.Response) } diff --git a/internal/vpn/cleanup.go b/internal/vpn/cleanup.go index 99ed62de..b6d3bcff 100644 --- a/internal/vpn/cleanup.go +++ b/internal/vpn/cleanup.go @@ -4,7 +4,7 @@ import ( "context" "time" - "github.com/qdm12/gluetun/internal/publicip/models" + "github.com/qdm12/gluetun/internal/publicip/ipinfo" ) func (l *Loop) cleanup(ctx context.Context, pfEnabled bool) { @@ -15,7 +15,7 @@ func (l *Loop) cleanup(ctx context.Context, pfEnabled bool) { } } - l.publicip.SetData(models.IPInfoData{}) // clear public IP address data + l.publicip.SetData(ipinfo.Response{}) // clear public IP address data if pfEnabled { const pfTimeout = 100 * time.Millisecond diff --git a/internal/vpn/interfaces.go b/internal/vpn/interfaces.go index 000b5b5e..7b549990 100644 --- a/internal/vpn/interfaces.go +++ b/internal/vpn/interfaces.go @@ -9,7 +9,7 @@ import ( "github.com/qdm12/gluetun/internal/netlink" "github.com/qdm12/gluetun/internal/portforward" "github.com/qdm12/gluetun/internal/provider" - publicipmodels "github.com/qdm12/gluetun/internal/publicip/models" + "github.com/qdm12/gluetun/internal/publicip/ipinfo" ) type Firewall interface { @@ -71,7 +71,7 @@ type DNSLoop interface { type PublicIPLoop interface { ApplyStatus(ctx context.Context, status models.LoopStatus) ( outcome string, err error) - SetData(data publicipmodels.IPInfoData) + SetData(data ipinfo.Response) } type statusManager interface {