65 lines
3.3 KiB
Go
65 lines
3.3 KiB
Go
package storage
|
|
|
|
import (
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/qdm12/gluetun/internal/constants/providers"
|
|
"github.com/qdm12/gluetun/internal/models"
|
|
)
|
|
|
|
func (s *Storage) logVersionDiff(provider string, hardcodedVersion, persistedVersion uint16) {
|
|
message := provider + " servers from file discarded because they have version " +
|
|
strconv.Itoa(int(persistedVersion)) +
|
|
" and hardcoded servers have version " +
|
|
strconv.Itoa(int(hardcodedVersion))
|
|
s.logger.Info(message)
|
|
}
|
|
|
|
func (s *Storage) logTimeDiff(provider string, persistedUnix, hardcodedUnix int64) {
|
|
diff := time.Unix(persistedUnix, 0).Sub(time.Unix(hardcodedUnix, 0))
|
|
if diff < 0 {
|
|
diff = -diff
|
|
}
|
|
diff = diff.Truncate(time.Second)
|
|
message := "Using " + provider + " servers from file which are " +
|
|
diff.String() + " more recent"
|
|
s.logger.Info(message)
|
|
}
|
|
|
|
func (s *Storage) mergeServers(hardcoded, persisted models.AllServers) models.AllServers {
|
|
return models.AllServers{
|
|
Version: hardcoded.Version,
|
|
Cyberghost: s.mergeProviderServers(providers.Cyberghost, hardcoded.Cyberghost, persisted.Cyberghost),
|
|
Expressvpn: s.mergeProviderServers(providers.Expressvpn, hardcoded.Expressvpn, persisted.Expressvpn),
|
|
Fastestvpn: s.mergeProviderServers(providers.Fastestvpn, hardcoded.Fastestvpn, persisted.Fastestvpn),
|
|
HideMyAss: s.mergeProviderServers(providers.HideMyAss, hardcoded.HideMyAss, persisted.HideMyAss),
|
|
Ipvanish: s.mergeProviderServers(providers.Ipvanish, hardcoded.Ipvanish, persisted.Ipvanish),
|
|
Ivpn: s.mergeProviderServers(providers.Ivpn, hardcoded.Ivpn, persisted.Ivpn),
|
|
Mullvad: s.mergeProviderServers(providers.Mullvad, hardcoded.Mullvad, persisted.Mullvad),
|
|
Nordvpn: s.mergeProviderServers(providers.Nordvpn, hardcoded.Nordvpn, persisted.Nordvpn),
|
|
Perfectprivacy: s.mergeProviderServers(providers.Perfectprivacy, hardcoded.Perfectprivacy, persisted.Perfectprivacy),
|
|
Privado: s.mergeProviderServers(providers.Privado, hardcoded.Privado, persisted.Privado),
|
|
Pia: s.mergeProviderServers(providers.PrivateInternetAccess, hardcoded.Pia, persisted.Pia),
|
|
Privatevpn: s.mergeProviderServers(providers.Privatevpn, hardcoded.Privatevpn, persisted.Privatevpn),
|
|
Protonvpn: s.mergeProviderServers(providers.Protonvpn, hardcoded.Protonvpn, persisted.Protonvpn),
|
|
Purevpn: s.mergeProviderServers(providers.Purevpn, hardcoded.Purevpn, persisted.Purevpn),
|
|
Surfshark: s.mergeProviderServers(providers.Surfshark, hardcoded.Surfshark, persisted.Surfshark),
|
|
Torguard: s.mergeProviderServers(providers.Torguard, hardcoded.Torguard, persisted.Torguard),
|
|
VPNUnlimited: s.mergeProviderServers(providers.VPNUnlimited, hardcoded.VPNUnlimited, persisted.VPNUnlimited),
|
|
Vyprvpn: s.mergeProviderServers(providers.Vyprvpn, hardcoded.Vyprvpn, persisted.Vyprvpn),
|
|
Wevpn: s.mergeProviderServers(providers.Wevpn, hardcoded.Wevpn, persisted.Wevpn),
|
|
Windscribe: s.mergeProviderServers(providers.Windscribe, hardcoded.Windscribe, persisted.Windscribe),
|
|
}
|
|
}
|
|
|
|
func (s *Storage) mergeProviderServers(provider string,
|
|
hardcoded, persisted models.Servers) (merged models.Servers) {
|
|
if persisted.Timestamp <= hardcoded.Timestamp {
|
|
return hardcoded
|
|
}
|
|
|
|
s.logTimeDiff(provider, persisted.Timestamp, hardcoded.Timestamp)
|
|
return persisted
|
|
}
|