From ce179f72223d69c2e7a877bcc38ff30bdaeabf11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Fr=C3=B6ssman?= Date: Mon, 4 Apr 2016 13:09:02 +0200 Subject: [PATCH] Add Continent[CC] and CountryName[CC] lookup maps --- pkg/shared/geo_codes.go | 541 +++++++++++++++++++++++++++++++++++ pkg/shared/geo_codes_test.go | 19 ++ pkg/shared/types.go | 25 -- 3 files changed, 560 insertions(+), 25 deletions(-) create mode 100644 pkg/shared/geo_codes.go create mode 100644 pkg/shared/geo_codes_test.go diff --git a/pkg/shared/geo_codes.go b/pkg/shared/geo_codes.go new file mode 100644 index 0000000..9d332ae --- /dev/null +++ b/pkg/shared/geo_codes.go @@ -0,0 +1,541 @@ +package shared + +import ( + "sort" +) + +func init() { + for cc := range CountryCodeNames { + CountryCodes = append(CountryCodes, cc) + } + sort.Strings(CountryCodes) +} + +// CountryCodes is the list of valid country codes. +var ( + CountryCodes []string + + CountryCodeNames = map[string]string{ + // Special entries (maxmind geoip defined) + "A1": "Anonymous Proxy", + "A2": "Satellite Provider", + "AP": "Asia/Pacific Region", + "EU": "Europe", + "O1": "Other Country", + + // Legacy entries (removed from iso 3166 -1 and/or -2) + "AN": "Netherlands Antilles (legacy)", // deleted + "CS": "Serbia and Montenegro (legacy)", // deleted + "TP": "Timor-Leste (legacy)", // changed to TL + + // The rest + "AD": "Andorra", + "AE": "United Arab Emirates", + "AF": "Afghanistan", + "AG": "Antigua and Barbuda", + "AI": "Anguilla", + "AL": "Albania", + "AM": "Armenia", + "AO": "Angola", + "AQ": "Antarctica", + "AR": "Argentina", + "AS": "American Samoa", + "AT": "Austria", + "AU": "Australia", + "AW": "Aruba", + "AX": "Aland Islands", + "AZ": "Azerbaijan", + "BA": "Bosnia and Herzegovina", + "BB": "Barbados", + "BD": "Bangladesh", + "BE": "Belgium", + "BF": "Burkina Faso", + "BG": "Bulgaria", + "BH": "Bahrain", + "BI": "Burundi", + "BJ": "Benin", + "BL": "Saint Bartelemey", + "BM": "Bermuda", + "BN": "Brunei Darussalam", + "BO": "Bolivia", + "BQ": "Bonaire, Saint Eustatius and Saba", + "BR": "Brazil", + "BS": "Bahamas", + "BT": "Bhutan", + "BV": "Bouvet Island", + "BW": "Botswana", + "BY": "Belarus", + "BZ": "Belize", + "CA": "Canada", + "CC": "Cocos (Keeling) Islands", + "CD": "Congo, The Democratic Republic of the", + "CF": "Central African Republic", + "CG": "Congo", + "CH": "Switzerland", + "CI": "Cote d'Ivoire", + "CK": "Cook Islands", + "CL": "Chile", + "CM": "Cameroon", + "CN": "China", + "CO": "Colombia", + "CR": "Costa Rica", + "CU": "Cuba", + "CV": "Cape Verde", + "CW": "Curacao", + "CX": "Christmas Island", + "CY": "Cyprus", + "CZ": "Czech Republic", + "DE": "Germany", + "DJ": "Djibouti", + "DK": "Denmark", + "DM": "Dominica", + "DO": "Dominican Republic", + "DZ": "Algeria", + "EC": "Ecuador", + "EE": "Estonia", + "EG": "Egypt", + "EH": "Western Sahara", + "ER": "Eritrea", + "ES": "Spain", + "ET": "Ethiopia", + "FI": "Finland", + "FJ": "Fiji", + "FK": "Falkland Islands (Malvinas)", + "FM": "Micronesia, Federated States of", + "FO": "Faroe Islands", + "FR": "France", + "GA": "Gabon", + "GB": "United Kingdom", + "GD": "Grenada", + "GE": "Georgia", + "GF": "French Guiana", + "GG": "Guernsey", + "GH": "Ghana", + "GI": "Gibraltar", + "GL": "Greenland", + "GM": "Gambia", + "GN": "Guinea", + "GP": "Guadeloupe", + "GQ": "Equatorial Guinea", + "GR": "Greece", + "GS": "South Georgia and the South Sandwich Islands", + "GT": "Guatemala", + "GU": "Guam", + "GW": "Guinea-Bissau", + "GY": "Guyana", + "HK": "Hong Kong", + "HM": "Heard Island and McDonald Islands", + "HN": "Honduras", + "HR": "Croatia", + "HT": "Haiti", + "HU": "Hungary", + "ID": "Indonesia", + "IE": "Ireland", + "IL": "Israel", + "IM": "Isle of Man", + "IN": "India", + "IO": "British Indian Ocean Territory", + "IQ": "Iraq", + "IR": "Iran, Islamic Republic of", + "IS": "Iceland", + "IT": "Italy", + "JE": "Jersey", + "JM": "Jamaica", + "JO": "Jordan", + "JP": "Japan", + "KE": "Kenya", + "KG": "Kyrgyzstan", + "KH": "Cambodia", + "KI": "Kiribati", + "KM": "Comoros", + "KN": "Saint Kitts and Nevis", + "KP": "Korea, Democratic People's Republic of", + "KR": "Korea, Republic of", + "KW": "Kuwait", + "KY": "Cayman Islands", + "KZ": "Kazakhstan", + "LA": "Lao People's Democratic Republic", + "LB": "Lebanon", + "LC": "Saint Lucia", + "LI": "Liechtenstein", + "LK": "Sri Lanka", + "LR": "Liberia", + "LS": "Lesotho", + "LT": "Lithuania", + "LU": "Luxembourg", + "LV": "Latvia", + "LY": "Libyan Arab Jamahiriya", + "MA": "Morocco", + "MC": "Monaco", + "MD": "Moldova, Republic of", + "ME": "Montenegro", + "MF": "Saint Martin", + "MG": "Madagascar", + "MH": "Marshall Islands", + "MK": "Macedonia", + "ML": "Mali", + "MM": "Myanmar", + "MN": "Mongolia", + "MO": "Macao", + "MP": "Northern Mariana Islands", + "MQ": "Martinique", + "MR": "Mauritania", + "MS": "Montserrat", + "MT": "Malta", + "MU": "Mauritius", + "MV": "Maldives", + "MW": "Malawi", + "MX": "Mexico", + "MY": "Malaysia", + "MZ": "Mozambique", + "NA": "Namibia", + "NC": "New Caledonia", + "NE": "Niger", + "NF": "Norfolk Island", + "NG": "Nigeria", + "NI": "Nicaragua", + "NL": "Netherlands", + "NO": "Norway", + "NP": "Nepal", + "NR": "Nauru", + "NU": "Niue", + "NZ": "New Zealand", + "OM": "Oman", + "PA": "Panama", + "PE": "Peru", + "PF": "French Polynesia", + "PG": "Papua New Guinea", + "PH": "Philippines", + "PK": "Pakistan", + "PL": "Poland", + "PM": "Saint Pierre and Miquelon", + "PN": "Pitcairn", + "PR": "Puerto Rico", + "PS": "Palestinian Territory", + "PT": "Portugal", + "PW": "Palau", + "PY": "Paraguay", + "QA": "Qatar", + "RE": "Reunion", + "RO": "Romania", + "RS": "Serbia", + "RU": "Russian Federation", + "RW": "Rwanda", + "SA": "Saudi Arabia", + "SB": "Solomon Islands", + "SC": "Seychelles", + "SD": "Sudan", + "SE": "Sweden", + "SG": "Singapore", + "SH": "Saint Helena", + "SI": "Slovenia", + "SJ": "Svalbard and Jan Mayen", + "SK": "Slovakia", + "SL": "Sierra Leone", + "SM": "San Marino", + "SN": "Senegal", + "SO": "Somalia", + "SR": "Suriname", + "SS": "South Sudan", + "ST": "Sao Tome and Principe", + "SV": "El Salvador", + "SX": "Sint Maarten", + "SY": "Syrian Arab Republic", + "SZ": "Swaziland", + "TC": "Turks and Caicos Islands", + "TD": "Chad", + "TF": "French Southern Territories", + "TG": "Togo", + "TH": "Thailand", + "TJ": "Tajikistan", + "TK": "Tokelau", + "TL": "Timor-Leste", + "TM": "Turkmenistan", + "TN": "Tunisia", + "TO": "Tonga", + "TR": "Turkey", + "TT": "Trinidad and Tobago", + "TV": "Tuvalu", + "TW": "Taiwan", + "TZ": "Tanzania, United Republic of", + "UA": "Ukraine", + "UG": "Uganda", + "UM": "United States Minor Outlying Islands", + "US": "United States", + "UY": "Uruguay", + "UZ": "Uzbekistan", + "VA": "Holy See (Vatican City State)", + "VC": "Saint Vincent and the Grenadines", + "VE": "Venezuela", + "VG": "Virgin Islands, British", + "VI": "Virgin Islands, U.S.", + "VN": "Vietnam", + "VU": "Vanuatu", + "WF": "Wallis and Futuna", + "WS": "Samoa", + "YE": "Yemen", + "YT": "Mayotte", + "ZA": "South Africa", + "ZM": "Zambia", + "ZW": "Zimbabwe", + } + + Continents = map[string]string{ + "A1": "--", + "A2": "--", + "AD": "EU", + "AE": "AS", + "AF": "AS", + "AG": "NA", + "AI": "NA", + "AL": "EU", + "AM": "AS", + "AN": "NA", + "AO": "AF", + "AP": "AS", + "AQ": "AN", + "AR": "SA", + "AS": "OC", + "AT": "EU", + "AU": "OC", + "AW": "NA", + "AX": "EU", + "AZ": "AS", + "BA": "EU", + "BB": "NA", + "BD": "AS", + "BE": "EU", + "BF": "AF", + "BG": "EU", + "BH": "AS", + "BI": "AF", + "BJ": "AF", + "BL": "NA", + "BM": "NA", + "BN": "AS", + "BO": "SA", + "BQ": "AS", + "BR": "SA", + "BS": "NA", + "BT": "AS", + "BV": "AN", + "BW": "AF", + "BY": "EU", + "BZ": "NA", + "CA": "NA", + "CC": "AS", + "CD": "AF", + "CF": "AF", + "CG": "AF", + "CH": "EU", + "CI": "AF", + "CK": "OC", + "CL": "SA", + "CM": "AF", + "CN": "AS", + "CO": "SA", + "CR": "NA", + "CU": "NA", + "CV": "AF", + "CW": "SA", + "CX": "AS", + "CY": "AS", + "CZ": "EU", + "DE": "EU", + "DJ": "AF", + "DK": "EU", + "DM": "NA", + "DO": "NA", + "DZ": "AF", + "EC": "SA", + "EE": "EU", + "EG": "AF", + "EH": "AF", + "ER": "AF", + "ES": "EU", + "ET": "AF", + "EU": "EU", + "FI": "EU", + "FJ": "OC", + "FK": "SA", + "FM": "OC", + "FO": "EU", + "FR": "EU", + "FX": "EU", + "GA": "AF", + "GB": "EU", + "GD": "NA", + "GE": "AS", + "GF": "SA", + "GG": "EU", + "GH": "AF", + "GI": "EU", + "GL": "NA", + "GM": "AF", + "GN": "AF", + "GP": "NA", + "GQ": "AF", + "GR": "EU", + "GS": "AN", + "GT": "NA", + "GU": "OC", + "GW": "AF", + "GY": "SA", + "HK": "AS", + "HM": "AN", + "HN": "NA", + "HR": "EU", + "HT": "NA", + "HU": "EU", + "ID": "AS", + "IE": "EU", + "IL": "AS", + "IM": "EU", + "IN": "AS", + "IO": "AS", + "IQ": "AS", + "IR": "AS", + "IS": "EU", + "IT": "EU", + "JE": "EU", + "JM": "NA", + "JO": "AS", + "JP": "AS", + "KE": "AF", + "KG": "AS", + "KH": "AS", + "KI": "OC", + "KM": "AF", + "KN": "NA", + "KP": "AS", + "KR": "AS", + "KW": "AS", + "KY": "NA", + "KZ": "AS", + "LA": "AS", + "LB": "AS", + "LC": "NA", + "LI": "EU", + "LK": "AS", + "LR": "AF", + "LS": "AF", + "LT": "EU", + "LU": "EU", + "LV": "EU", + "LY": "AF", + "MA": "AF", + "MC": "EU", + "MD": "EU", + "ME": "EU", + "MF": "NA", + "MG": "AF", + "MH": "OC", + "MK": "EU", + "ML": "AF", + "MM": "AS", + "MN": "AS", + "MO": "AS", + "MP": "OC", + "MQ": "NA", + "MR": "AF", + "MS": "NA", + "MT": "EU", + "MU": "AF", + "MV": "AS", + "MW": "AF", + "MX": "NA", + "MY": "AS", + "MZ": "AF", + "NA": "AF", + "NC": "OC", + "NE": "AF", + "NF": "OC", + "NG": "AF", + "NI": "NA", + "NL": "EU", + "NO": "EU", + "NP": "AS", + "NR": "OC", + "NU": "OC", + "NZ": "OC", + "O1": "--", + "OM": "AS", + "PA": "NA", + "PE": "SA", + "PF": "OC", + "PG": "OC", + "PH": "AS", + "PK": "AS", + "PL": "EU", + "PM": "NA", + "PN": "OC", + "PR": "NA", + "PS": "AS", + "PT": "EU", + "PW": "OC", + "PY": "SA", + "QA": "AS", + "RE": "AF", + "RO": "EU", + "RS": "EU", + "RU": "EU", + "RW": "AF", + "SA": "AS", + "SB": "OC", + "SC": "AF", + "SD": "AF", + "SE": "EU", + "SG": "AS", + "SH": "AF", + "SI": "EU", + "SJ": "EU", + "SK": "EU", + "SL": "AF", + "SM": "EU", + "SN": "AF", + "SO": "AF", + "SR": "SA", + "SS": "AF", + "ST": "AF", + "SV": "NA", + "SX": "NA", + "SY": "AS", + "SZ": "AF", + "TC": "NA", + "TD": "AF", + "TF": "AN", + "TG": "AF", + "TH": "AS", + "TJ": "AS", + "TK": "OC", + "TL": "AS", + "TM": "AS", + "TN": "AF", + "TO": "OC", + "TR": "EU", + "TT": "NA", + "TV": "OC", + "TW": "AS", + "TZ": "AF", + "UA": "EU", + "UG": "AF", + "UM": "OC", + "US": "NA", + "UY": "SA", + "UZ": "AS", + "VA": "EU", + "VC": "NA", + "VE": "SA", + "VG": "NA", + "VI": "NA", + "VN": "AS", + "VU": "OC", + "WF": "OC", + "WS": "OC", + "YE": "AS", + "YT": "AF", + "ZA": "AF", + "ZM": "AF", + "ZW": "AF", + } +) diff --git a/pkg/shared/geo_codes_test.go b/pkg/shared/geo_codes_test.go new file mode 100644 index 0000000..aebbe2b --- /dev/null +++ b/pkg/shared/geo_codes_test.go @@ -0,0 +1,19 @@ +package shared + +import "testing" + +func TestGeoCodes(t *testing.T) { + legacyCCs := map[string]bool{ + "AN": true, + "CS": true, + "TP": true, + } + + for _, cc := range CountryCodes { + if _, ok := Continents[cc]; !ok { + if _, ok := legacyCCs[cc]; !ok { + t.Errorf("country code %s not in contientds", cc) + } + } + } +} diff --git a/pkg/shared/types.go b/pkg/shared/types.go index f3c043a..eccb597 100644 --- a/pkg/shared/types.go +++ b/pkg/shared/types.go @@ -7,31 +7,6 @@ import ( "time" ) -// CountryCodes is the list of valid country codes -var CountryCodes = []string{ - "AF", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", - "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", - "BT", "BO", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", - "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", - "CG", "CK", "CR", "HR", "CU", "CY", "CZ", "DK", "DJ", "DM", "DO", "TP", - "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "CS", - "FR", "GF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GB", "GR", "GL", - "GD", "GP", "GU", "GT", "GN", "GW", "GY", "HT", "HM", "HN", "HK", "HU", - "IS", "IN", "ID", "IR", "IQ", "IE", "IL", "IT", "CI", "JM", "JP", "JO", - "KZ", "KE", "KI", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", - "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", - "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "MS", "MA", "MZ", "MM", - "NA", "NR", "NP", "NL", "AN", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", - "KP", "MP", "NO", "OM", "PK", "PW", "PA", "PG", "PY", "PE", "PH", "PN", - "PL", "PF", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "GS", "SH", "KN", - "LC", "PM", "ST", "VC", "WS", "SM", "SA", "SN", "SC", "SL", "SG", "SK", - "SI", "SB", "SO", "ZA", "KR", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", - "CH", "SY", "TJ", "TW", "TZ", "TH", "TG", "TK", "TO", "TT", "TN", "TR", - "TM", "TC", "TV", "UG", "UA", "AE", "US", "UY", "UM", "UZ", "VU", "VA", - "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW", "A1", "A2", "AP", - "AX", "BL", "BQ", "CD", "CW", "EU", "GG", "IM", "JE", "ME", "MF", "O1", - "PS", "RS", "SS", "SX", "TL", -} // BrowserSuggestionTokenRequest goes from browser extension to client type BrowserSuggestionTokenRequest struct {