mirror of
https://github.com/confirmedcode/Lockdown-iOS.git
synced 2025-12-21 12:14:02 +01:00
134 lines
5.9 KiB
Swift
134 lines
5.9 KiB
Swift
//
|
|
// VPNRegion.swift
|
|
// LockdowniOS
|
|
//
|
|
// Created by Oleg Dreyman on 28.09.2020.
|
|
// Copyright © 2020 Confirmed Inc. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
struct VPNRegion {
|
|
var regionDisplayName: String = ""
|
|
var regionDisplayNameShort: String = ""
|
|
var regionFlagEmoji: String = ""
|
|
var serverPrefix: String = ""
|
|
}
|
|
|
|
let vpnRegions:[VPNRegion] = [
|
|
VPNRegion(regionDisplayName: NSLocalizedString("United States - West", comment: ""),
|
|
regionDisplayNameShort: NSLocalizedString("USA West", comment: ""),
|
|
regionFlagEmoji: "🇺🇸",
|
|
serverPrefix: "us-west"),
|
|
VPNRegion(regionDisplayName: NSLocalizedString("United States - East", comment: ""),
|
|
regionDisplayNameShort: NSLocalizedString("USA East", comment: ""),
|
|
regionFlagEmoji: "🇺🇸",
|
|
serverPrefix: "us-east"),
|
|
VPNRegion(regionDisplayName: NSLocalizedString("United Kingdom", comment: ""),
|
|
regionDisplayNameShort: NSLocalizedString("United Kingdom", comment: ""),
|
|
regionFlagEmoji: "🇬🇧",
|
|
serverPrefix: "eu-london"),
|
|
VPNRegion(regionDisplayName: NSLocalizedString("France", comment: ""),
|
|
regionDisplayNameShort: NSLocalizedString("France", comment: ""),
|
|
regionFlagEmoji: "🇫🇷",
|
|
serverPrefix: "eu-paris"),
|
|
VPNRegion(regionDisplayName: NSLocalizedString("Ireland", comment: ""),
|
|
regionDisplayNameShort: NSLocalizedString("Ireland", comment: ""),
|
|
regionFlagEmoji: "🇮🇪",
|
|
serverPrefix: "eu-ireland"),
|
|
VPNRegion(regionDisplayName: NSLocalizedString("Germany", comment: ""),
|
|
regionDisplayNameShort: NSLocalizedString("Germany", comment: ""),
|
|
regionFlagEmoji: "🇩🇪",
|
|
serverPrefix: "eu-frankfurt"),
|
|
VPNRegion(regionDisplayName: NSLocalizedString("Canada", comment: ""),
|
|
regionDisplayNameShort: NSLocalizedString("Canada", comment: ""),
|
|
regionFlagEmoji: "🇨🇦",
|
|
serverPrefix: "canada"),
|
|
VPNRegion(regionDisplayName: NSLocalizedString("India", comment: ""),
|
|
regionDisplayNameShort: NSLocalizedString("India", comment: ""),
|
|
regionFlagEmoji: "🇮🇳",
|
|
serverPrefix: "ap-mumbai"),
|
|
VPNRegion(regionDisplayName: NSLocalizedString("Japan", comment: ""),
|
|
regionDisplayNameShort: NSLocalizedString("Japan", comment: ""),
|
|
regionFlagEmoji: "🇯🇵",
|
|
serverPrefix: "ap-tokyo"),
|
|
VPNRegion(regionDisplayName: NSLocalizedString("Australia", comment: ""),
|
|
regionDisplayNameShort: NSLocalizedString("Australia", comment: ""),
|
|
regionFlagEmoji: "🇦🇺",
|
|
serverPrefix: "ap-sydney"),
|
|
VPNRegion(regionDisplayName: NSLocalizedString("South Korea", comment: ""),
|
|
regionDisplayNameShort: NSLocalizedString("South Korea", comment: ""),
|
|
regionFlagEmoji: "🇰🇷",
|
|
serverPrefix: "ap-seoul"),
|
|
VPNRegion(regionDisplayName: NSLocalizedString("Singapore", comment: ""),
|
|
regionDisplayNameShort: NSLocalizedString("Singapore", comment: ""),
|
|
regionFlagEmoji: "🇸🇬",
|
|
serverPrefix: "ap-singapore"),
|
|
VPNRegion(regionDisplayName: NSLocalizedString("Brazil", comment: ""),
|
|
regionDisplayNameShort: NSLocalizedString("Brazil", comment: ""),
|
|
regionFlagEmoji: "🇧🇷",
|
|
serverPrefix: "sa")
|
|
]
|
|
|
|
func getVPNRegionForServerPrefix(serverPrefix: String) -> VPNRegion {
|
|
for vpnRegion in vpnRegions {
|
|
if vpnRegion.serverPrefix == serverPrefix {
|
|
return vpnRegion
|
|
}
|
|
}
|
|
return vpnRegions[0]
|
|
}
|
|
|
|
func getSavedVPNRegion() -> VPNRegion {
|
|
if let savedVPNRegionServerPrefix = defaults.string(forKey: kSavedVPNRegionServerPrefix) {
|
|
return getVPNRegionForServerPrefix(serverPrefix: savedVPNRegionServerPrefix)
|
|
}
|
|
|
|
// get default savedRegion by locale
|
|
let locale = NSLocale.autoupdatingCurrent
|
|
if let regionCode = locale.regionCode {
|
|
switch regionCode {
|
|
case "US":
|
|
if let timezone = TimeZone.autoupdatingCurrent.abbreviation() {
|
|
if timezone == "EST" || timezone == "EDT" || timezone == "CST" {
|
|
return getVPNRegionForServerPrefix(serverPrefix: "us-east")
|
|
}
|
|
}
|
|
else {
|
|
return getVPNRegionForServerPrefix(serverPrefix: "us-west")
|
|
}
|
|
case "FR", "PT":
|
|
return getVPNRegionForServerPrefix(serverPrefix: "eu-paris")
|
|
case "GB":
|
|
return getVPNRegionForServerPrefix(serverPrefix: "eu-london")
|
|
case "IE":
|
|
return getVPNRegionForServerPrefix(serverPrefix: "eu-london")
|
|
case "CA":
|
|
return getVPNRegionForServerPrefix(serverPrefix: "canada")
|
|
case "KO":
|
|
return getVPNRegionForServerPrefix(serverPrefix: "ap-seoul")
|
|
case "ID", "SG", "MY", "PH", "TH", "TW", "VN":
|
|
return getVPNRegionForServerPrefix(serverPrefix: "ap-singapore")
|
|
case "DE", "IT", "ES", "AT", "PL", "RU", "UA", "NG", "TR", "ZA":
|
|
return getVPNRegionForServerPrefix(serverPrefix: "eu-frankfurt")
|
|
case "AU", "NZ":
|
|
return getVPNRegionForServerPrefix(serverPrefix: "ap-sydney")
|
|
case "AE", "IN", "PK", "BD", "QA", "SA":
|
|
return getVPNRegionForServerPrefix(serverPrefix: "ap-mumbai")
|
|
case "EG":
|
|
return getVPNRegionForServerPrefix(serverPrefix: "eu-frankfurt")
|
|
case "JP":
|
|
return getVPNRegionForServerPrefix(serverPrefix: "ap-tokyo")
|
|
case "BR", "CO", "VE", "AR":
|
|
return getVPNRegionForServerPrefix(serverPrefix: "sa")
|
|
default:
|
|
return vpnRegions[0]
|
|
}
|
|
}
|
|
return vpnRegions[0]
|
|
}
|
|
|
|
func setSavedVPNRegion(vpnRegion: VPNRegion) {
|
|
defaults.set(vpnRegion.serverPrefix, forKey: kSavedVPNRegionServerPrefix)
|
|
}
|