mirror of
https://github.com/qdm12/gluetun.git
synced 2026-05-07 04:20:12 +02:00
66 lines
1.7 KiB
Go
66 lines
1.7 KiB
Go
package updater
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/qdm12/gluetun/internal/constants"
|
|
)
|
|
|
|
var countryCodeToName = constants.CountryCodes() //nolint:gochecknoglobals
|
|
|
|
//nolint:gochecknoglobals
|
|
var countryCityCodeToCityName = map[string]string{
|
|
"aume": "Melbourne",
|
|
"aupe": "Perth",
|
|
"ausd": "Sydney",
|
|
"ukl": "London",
|
|
"ukm": "Manchester",
|
|
"usca": "Los Angeles",
|
|
"usfl": "Miami",
|
|
"usga": "Atlanta",
|
|
"usil": "Chicago",
|
|
"usnj": "Newark",
|
|
"usny": "New York",
|
|
"uspe": "Perth",
|
|
"usphx": "Phoenix",
|
|
"ussa": "Seattle",
|
|
"ussf": "San Francisco",
|
|
"ustx": "Houston",
|
|
"usut": "Salt Lake City",
|
|
"usva": "Ashburn",
|
|
"uswdc": "Washington DC",
|
|
}
|
|
|
|
func parseHostname(hostname string) (country, city string, warnings []string) {
|
|
const minHostnameLength = 2 + 3 + 2 // 2 country code + 3 city code + "2-"
|
|
if len(hostname) < minHostnameLength {
|
|
warnings = append(warnings,
|
|
fmt.Sprintf("hostname %q is too short to parse country and city codes", hostname))
|
|
}
|
|
countryCode := strings.ToLower(hostname[0:2])
|
|
country, ok := countryCodeToName[countryCode]
|
|
if !ok {
|
|
warnings = append(warnings, fmt.Sprintf("unknown country code %q in hostname %q",
|
|
countryCode, hostname))
|
|
}
|
|
|
|
twoMinusIndex := strings.Index(hostname, "2-")
|
|
switch twoMinusIndex {
|
|
case -1:
|
|
warnings = append(warnings,
|
|
fmt.Sprintf("hostname %q does not contain '2-'", hostname))
|
|
return country, city, warnings
|
|
case 2: //nolint:mnd
|
|
// no city code
|
|
return country, "", warnings
|
|
}
|
|
countryCityCode := strings.ToLower(hostname[:twoMinusIndex])
|
|
city, ok = countryCityCodeToCityName[countryCityCode]
|
|
if !ok {
|
|
warnings = append(warnings, fmt.Sprintf("unknown country-city code %q in hostname %q",
|
|
countryCityCode, hostname))
|
|
}
|
|
return country, city, warnings
|
|
}
|