diff --git a/Passepartout-iOS/Providers.xcassets/vyprvpn.imageset/Contents.json b/Passepartout-iOS/Providers.xcassets/vyprvpn.imageset/Contents.json new file mode 100644 index 00000000..34292c4b --- /dev/null +++ b/Passepartout-iOS/Providers.xcassets/vyprvpn.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "vyprvpn@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "vyprvpn@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Passepartout-iOS/Providers.xcassets/vyprvpn.imageset/vyprvpn@2x.png b/Passepartout-iOS/Providers.xcassets/vyprvpn.imageset/vyprvpn@2x.png new file mode 100644 index 00000000..07db8402 Binary files /dev/null and b/Passepartout-iOS/Providers.xcassets/vyprvpn.imageset/vyprvpn@2x.png differ diff --git a/Passepartout-iOS/Providers.xcassets/vyprvpn.imageset/vyprvpn@3x.png b/Passepartout-iOS/Providers.xcassets/vyprvpn.imageset/vyprvpn@3x.png new file mode 100644 index 00000000..1ee302b2 Binary files /dev/null and b/Passepartout-iOS/Providers.xcassets/vyprvpn.imageset/vyprvpn@3x.png differ diff --git a/Passepartout-iOS/Scenes/AccountViewController.swift b/Passepartout-iOS/Scenes/AccountViewController.swift index f254da46..a4a44aff 100644 --- a/Passepartout-iOS/Scenes/AccountViewController.swift +++ b/Passepartout-iOS/Scenes/AccountViewController.swift @@ -77,6 +77,9 @@ class AccountViewController: UIViewController, TableModelHost { case .tunnelBear: return V.tunnelbear(name.rawValue) + case .vyprVPN: + return V.vyprvpn(name.rawValue) + case .windscribe: return V.windscribe(name.rawValue) } diff --git a/Passepartout/Resources/Web/net/vyprvpn.json b/Passepartout/Resources/Web/net/vyprvpn.json new file mode 100644 index 00000000..d69ac5ee --- /dev/null +++ b/Passepartout/Resources/Web/net/vyprvpn.json @@ -0,0 +1 @@ +{"presets":[{"id":"default","name":"Default","comment":"256-bit encryption","cfg":{"ca":"-----BEGIN CERTIFICATE-----\nMIIEpDCCA4ygAwIBAgIJANd2Uwt7SabsMA0GCSqGSIb3DQEBBQUAMIGSMQswCQYD\nVQQGEwJLWTEUMBIGA1UECBMLR3JhbmRDYXltYW4xEzARBgNVBAcTCkdlb3JnZVRv\nd24xFzAVBgNVBAoTDkdvbGRlbkZyb2ctSW5jMRowGAYDVQQDExFHb2xkZW5Gcm9n\nLUluYyBDQTEjMCEGCSqGSIb3DQEJARYUYWRtaW5AZ29sZGVuZnJvZy5jb20wHhcN\nMTAwNDA5MjExOTIxWhcNMjAwNDA2MjExOTIxWjCBkjELMAkGA1UEBhMCS1kxFDAS\nBgNVBAgTC0dyYW5kQ2F5bWFuMRMwEQYDVQQHEwpHZW9yZ2VUb3duMRcwFQYDVQQK\nEw5Hb2xkZW5Gcm9nLUluYzEaMBgGA1UEAxMRR29sZGVuRnJvZy1JbmMgQ0ExIzAh\nBgkqhkiG9w0BCQEWFGFkbWluQGdvbGRlbmZyb2cuY29tMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEA37JesfCwOj69el0AmqwXyiUJ2Bm+q0+eR9hYZEk7\npVoj5dF9RrKirZyCM/9zEvON5z4pZMYjhpzrq6eiLu3j1xV6lX73Hg0dcflweM5i\nqxFAHCwEFIiMpPwOgLV399sfHCuda11boIPE4SRooxUPEju908AGg/i+egntvvR2\nd7pnZl2SCJ1sxlbeAAkYjX6EXmIBFyJdmry1y05BtpdTgPmTlJ0cMj7DlU+2gehP\nss/q6YYRAhrKtlZwxeunc+RD04ieah+boYU0CBZinK2ERRuAjx3hbCE4b0S6eizr\nQmSuGFNu6Ghx+E1xasyl1Tz/fHgHl3P93Jf0tFov7uuygQIDAQABo4H6MIH3MB0G\nA1UdDgQWBBTh9HiMh5RnRVIt/ktXddiGkDkXBTCBxwYDVR0jBIG/MIG8gBTh9HiM\nh5RnRVIt/ktXddiGkDkXBaGBmKSBlTCBkjELMAkGA1UEBhMCS1kxFDASBgNVBAgT\nC0dyYW5kQ2F5bWFuMRMwEQYDVQQHEwpHZW9yZ2VUb3duMRcwFQYDVQQKEw5Hb2xk\nZW5Gcm9nLUluYzEaMBgGA1UEAxMRR29sZGVuRnJvZy1JbmMgQ0ExIzAhBgkqhkiG\n9w0BCQEWFGFkbWluQGdvbGRlbmZyb2cuY29tggkA13ZTC3tJpuwwDAYDVR0TBAUw\nAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAwihrN0QNE19RRvGywBvsYDmzmM5G8ta5\n8yB+02Mzbm0KuVxnPJaoVy4L4WocAnqLeKfmpYWUid1MPwDPtwtQ00U7QmRBRNLU\nhS6Bth1wXtuDvkRoHgymSvg1+wonJNpv/VquNgwt7XbC9oOjVEd9lbUd+ttxzboI\n8P1ci6+I861PylA0DOv9j5bbn1oE0hP8wDv3bTklEa612zzEVnnfgw+ErVnkrnk8\n8fTiv6NZtHgUOllMq7ymlV7ut+BPp20rjBdOCNn2Q7dNCKIkI45qkwHtXjzFXIxz\nGq3tLVeC54g7XZIc7X0S9avgAE7h9SuRYmsSzvLTtiP1obMCHB5ebQ==\n-----END CERTIFICATE-----\n","frame":1,"ping":10,"eku":true,"ep":["UDP:443"],"cipher":"AES-256-GCM"},"external":{"hostname":"${id}.vpn.goldenfrog.com"}}],"defaults":{"username":"user@mail.com","pool":"us","preset":"default"},"categories":[{"name":"default","groups":[{"country":"AE","area":"Dubai","pools":[{"id":"ae1","country":"AE","area":"Dubai","addrs":[]}]},{"country":"AR","area":"Buenos Aires","pools":[{"id":"ar1","country":"AR","area":"Buenos Aires","addrs":[]}]},{"country":"AT","area":"Vienna","pools":[{"id":"at1","country":"AT","area":"Vienna","addrs":[]}]},{"country":"AU","area":"Sydney","pools":[{"id":"au1","country":"AU","area":"Sydney","addrs":[]}]},{"country":"AU","area":"Melbourne","pools":[{"id":"au2","country":"AU","area":"Melbourne","addrs":[]}]},{"country":"AU","area":"Perth","pools":[{"id":"au3","country":"AU","area":"Perth","addrs":[]}]},{"country":"BE","area":"Brussels","pools":[{"id":"be1","country":"BE","area":"Brussels","addrs":[]}]},{"country":"BG","area":"Sofia","pools":[{"id":"bg1","country":"BG","area":"Sofia","addrs":[]}]},{"country":"BH","area":"Manama","pools":[{"id":"bh1","country":"BH","area":"Manama","addrs":[]}]},{"country":"BR","area":"São Paulo","pools":[{"id":"br1","country":"BR","area":"São Paulo","addrs":[]}]},{"country":"CA","area":"Toronto","pools":[{"id":"ca1","country":"CA","area":"Toronto","addrs":[]}]},{"country":"CH","area":"Zurich","pools":[{"id":"ch1","country":"CH","area":"Zurich","addrs":[]}]},{"country":"CO","area":"Bogotá","pools":[{"id":"co1","country":"CO","area":"Bogotá","addrs":[]}]},{"country":"CR","area":"San José","pools":[{"id":"cr1","country":"CR","area":"San José","addrs":[]}]},{"country":"CZ","area":"Prague","pools":[{"id":"cz1","country":"CZ","area":"Prague","addrs":[]}]},{"country":"DE","area":"Frankfurt","pools":[{"id":"de1","country":"DE","area":"Frankfurt","addrs":[]}]},{"country":"DK","area":"Copenhagen","pools":[{"id":"dk1","country":"DK","area":"Copenhagen","addrs":[]}]},{"country":"DZ","area":"Algiers","pools":[{"id":"dz1","country":"DZ","area":"Algiers","addrs":[]}]},{"country":"EG","area":"Cairo","pools":[{"id":"eg1","country":"EG","area":"Cairo","addrs":[]}]},{"country":"ES","area":"Madrid","pools":[{"id":"es1","country":"ES","area":"Madrid","addrs":[]}]},{"country":"EU","area":"Amsterdam","pools":[{"id":"eu1","country":"EU","area":"Amsterdam","addrs":[]}]},{"country":"FI","area":"Helsinki","pools":[{"id":"fi1","country":"FI","area":"Helsinki","addrs":[]}]},{"country":"FR","area":"Paris","pools":[{"id":"fr1","country":"FR","area":"Paris","addrs":[]}]},{"country":"GR","area":"Athens","pools":[{"id":"gr1","country":"GR","area":"Athens","addrs":[]}]},{"country":"HK","area":"Hong Kong","pools":[{"id":"hk1","country":"HK","area":"Hong Kong","addrs":[]}]},{"country":"ID","area":"Jakarta","pools":[{"id":"id1","country":"ID","area":"Jakarta","addrs":[]}]},{"country":"IE","area":"Dublin","pools":[{"id":"ie1","country":"IE","area":"Dublin","addrs":[]}]},{"country":"IL","area":"Tel Aviv","pools":[{"id":"il1","country":"IL","area":"Tel Aviv","addrs":[]}]},{"country":"IN","area":"Mumbai","pools":[{"id":"in1","country":"IN","area":"Mumbai","addrs":[]}]},{"country":"IS","area":"Reykjavík","pools":[{"id":"is1","country":"IS","area":"Reykjavík","addrs":[]}]},{"country":"IT","area":"Rome","pools":[{"id":"it1","country":"IT","area":"Rome","addrs":[]}]},{"country":"JP","area":"Tokyo","pools":[{"id":"jp1","country":"JP","area":"Tokyo","addrs":[]}]},{"country":"KR","area":"Seoul","pools":[{"id":"kr1","country":"KR","area":"Seoul","addrs":[]}]},{"country":"LI","area":"Schaan","pools":[{"id":"li1","country":"LI","area":"Schaan","addrs":[]}]},{"country":"LT","area":"Vilnius","pools":[{"id":"lt1","country":"LT","area":"Vilnius","addrs":[]}]},{"country":"LU","area":"Luxembourg City","pools":[{"id":"lu1","country":"LU","area":"Luxembourg City","addrs":[]}]},{"country":"LV","area":"Riga","pools":[{"id":"lv1","country":"LV","area":"Riga","addrs":[]}]},{"country":"MH","area":"Majuro","pools":[{"id":"mh1","country":"MH","area":"Majuro","addrs":[]}]},{"country":"MO","area":"Macao","pools":[{"id":"mo1","country":"MO","area":"Macao","addrs":[]}]},{"country":"MV","area":"Malé","pools":[{"id":"mv1","country":"MV","area":"Malé","addrs":[]}]},{"country":"MX","area":"Mexico City","pools":[{"id":"mx1","country":"MX","area":"Mexico City","addrs":[]}]},{"country":"MY","area":"Kuala Lumpur","pools":[{"id":"my1","country":"MY","area":"Kuala Lumpur","addrs":[]}]},{"country":"NO","area":"Oslo","pools":[{"id":"no1","country":"NO","area":"Oslo","addrs":[]}]},{"country":"NZ","area":"Auckland","pools":[{"id":"nz1","country":"NZ","area":"Auckland","addrs":[]}]},{"country":"PA","area":"Panama City","pools":[{"id":"pa1","country":"PA","area":"Panama City","addrs":[]}]},{"country":"PH","area":"Manila","pools":[{"id":"ph1","country":"PH","area":"Manila","addrs":[]}]},{"country":"PK","area":"Karachi","pools":[{"id":"pk1","country":"PK","area":"Karachi","addrs":[]}]},{"country":"PL","area":"Warsaw","pools":[{"id":"pl1","country":"PL","area":"Warsaw","addrs":[]}]},{"country":"PT","area":"Lisbon","pools":[{"id":"pt1","country":"PT","area":"Lisbon","addrs":[]}]},{"country":"QA","area":"Doha","pools":[{"id":"qa1","country":"QA","area":"Doha","addrs":[]}]},{"country":"RO","area":"Bucharest","pools":[{"id":"ro1","country":"RO","area":"Bucharest","addrs":[]}]},{"country":"RU","area":"Moscow","pools":[{"id":"ru1","country":"RU","area":"Moscow","addrs":[]}]},{"country":"SA","area":"Riyadh","pools":[{"id":"sa1","country":"SA","area":"Riyadh","addrs":[]}]},{"country":"SE","area":"Stockholm","pools":[{"id":"se1","country":"SE","area":"Stockholm","addrs":[]}]},{"country":"SG","area":"Singapore","pools":[{"id":"sg1","country":"SG","area":"Singapore","addrs":[]}]},{"country":"SI","area":"Ljubljana","pools":[{"id":"si1","country":"SI","area":"Ljubljana","addrs":[]}]},{"country":"SK","area":"Bratislava","pools":[{"id":"sk1","country":"SK","area":"Bratislava","addrs":[]}]},{"country":"SV","area":"San Salvador","pools":[{"id":"sv1","country":"SV","area":"San Salvador","addrs":[]}]},{"country":"TH","area":"Bangkok","pools":[{"id":"th1","country":"TH","area":"Bangkok","addrs":[]}]},{"country":"TR","area":"Istanbul","pools":[{"id":"tr1","country":"TR","area":"Istanbul","addrs":[]}]},{"country":"TW","area":"Taipei","pools":[{"id":"tw1","country":"TW","area":"Taipei","addrs":[]}]},{"country":"UA","area":"Kiev","pools":[{"id":"ua1","country":"UA","area":"Kiev","addrs":[]}]},{"country":"GB","area":"London","pools":[{"id":"uk1","country":"GB","area":"London","addrs":[]}]},{"country":"US","area":"Los Angeles","pools":[{"id":"us1","country":"US","area":"Los Angeles","addrs":[]}]},{"country":"US","area":"Washington","pools":[{"id":"us2","country":"US","area":"Washington","addrs":[]}]},{"country":"US","area":"Austin","pools":[{"id":"us3","country":"US","area":"Austin","addrs":[]}]},{"country":"US","area":"Miami","pools":[{"id":"us4","country":"US","area":"Miami","addrs":[]}]},{"country":"US","area":"New York City","pools":[{"id":"us5","country":"US","area":"New York City","addrs":[]}]},{"country":"US","area":"Chicago","pools":[{"id":"us6","country":"US","area":"Chicago","addrs":[]}]},{"country":"US","area":"San Francisco","pools":[{"id":"us7","country":"US","area":"San Francisco","addrs":[]}]},{"country":"US","area":"Seattle","pools":[{"id":"us8","country":"US","area":"Seattle","addrs":[]}]},{"country":"UY","area":"Montevideo","pools":[{"id":"uy1","country":"UY","area":"Montevideo","addrs":[]}]},{"country":"VN","area":"Hanoi","pools":[{"id":"vn1","country":"VN","area":"Hanoi","addrs":[]}]}]}],"build":1766,"name":"VyprVPN"} \ No newline at end of file diff --git a/Passepartout/Resources/de.lproj/Localizable.strings b/Passepartout/Resources/de.lproj/Localizable.strings index 6c50180f..082a7d40 100644 --- a/Passepartout/Resources/de.lproj/Localizable.strings +++ b/Passepartout/Resources/de.lproj/Localizable.strings @@ -142,6 +142,7 @@ "account.sections.guidance.footer.infrastructure.pia" = "Benutze deine %@ Web-Zugangsdaten. Dein Benutzername ist üblicherweise numerischt mit einem \"p\" Präfix."; "account.sections.guidance.footer.infrastructure.protonvpn" = "Deine Zugangsdaten für %@ findest du unter \"Account > OpenVPN / IKEv2 Username\" auf der Webseite."; "account.sections.guidance.footer.infrastructure.tunnelbear" = "Benutze deine %@ Web-Zugangsdaten. Dein Benutzername ist üblicherweise deine Email."; +"account.sections.guidance.footer.infrastructure.vyprvpn" = "Benutze deine %@ Web-Zugangsdaten. Dein Benutzername ist üblicherweise deine Email."; "account.sections.guidance.footer.infrastructure.windscribe" = "Deine Zugangsdaten für %@ findest du im OpenVPN Config Generator auf der Webseite."; "account.sections.registration.footer" = "Beantrage einen Account auf der %@ Webseite."; "account.cells.username.caption" = "Benutzername"; diff --git a/Passepartout/Resources/en.lproj/Localizable.strings b/Passepartout/Resources/en.lproj/Localizable.strings index 2c08d0f9..cd38b50f 100644 --- a/Passepartout/Resources/en.lproj/Localizable.strings +++ b/Passepartout/Resources/en.lproj/Localizable.strings @@ -142,6 +142,7 @@ "account.sections.guidance.footer.infrastructure.pia" = "Use your %@ website credentials. Your username is usually numeric with a \"p\" prefix."; "account.sections.guidance.footer.infrastructure.protonvpn" = "Find your %@ credentials in the \"Account > OpenVPN / IKEv2 Username\" section of the website."; "account.sections.guidance.footer.infrastructure.tunnelbear" = "Use your %@ website credentials. Your username is usually your e-mail."; +"account.sections.guidance.footer.infrastructure.vyprvpn" = "Use your %@ website credentials. Your username is usually your e-mail."; "account.sections.guidance.footer.infrastructure.windscribe" = "Find your %@ credentials in the OpenVPN Config Generator on the website."; "account.sections.registration.footer" = "Go get an account on the %@ website."; "account.cells.username.caption" = "Username"; diff --git a/Passepartout/Resources/it.lproj/Localizable.strings b/Passepartout/Resources/it.lproj/Localizable.strings index 36bc773b..1e446075 100644 --- a/Passepartout/Resources/it.lproj/Localizable.strings +++ b/Passepartout/Resources/it.lproj/Localizable.strings @@ -142,6 +142,7 @@ "account.sections.guidance.footer.infrastructure.pia" = "Usa le credenziali del sito di %@. Il tuo username è generalmente numerico con un prefisso \"p\"."; "account.sections.guidance.footer.infrastructure.protonvpn" = "Trova le tue credenziali nella sezione \"Account > OpenVPN / IKEv2 Username\" del sito di %@."; "account.sections.guidance.footer.infrastructure.tunnelbear" = "Usa le credenziali del sito di %@. Il tuo username è generalmente la tua e-mail."; +"account.sections.guidance.footer.infrastructure.vyprvpn" = "Usa le credenziali del sito di %@. Il tuo username è generalmente la tua e-mail."; "account.sections.guidance.footer.infrastructure.windscribe" = "Trova le tue credenziali nell'OpenVPN Config Generator sul sito di %@."; "account.sections.registration.footer" = "Registra un account sul sito di %@."; "account.cells.username.caption" = "Username"; diff --git a/Passepartout/Resources/pt-br.lproj/Localizable.strings b/Passepartout/Resources/pt-br.lproj/Localizable.strings index 298b0752..39f969fe 100644 --- a/Passepartout/Resources/pt-br.lproj/Localizable.strings +++ b/Passepartout/Resources/pt-br.lproj/Localizable.strings @@ -146,6 +146,7 @@ "account.sections.guidance.footer.infrastructure.pia" = "Utilize %@ credenciais do site. Seu usuário é normalmente numérico com prefixo \"p\"."; "account.sections.guidance.footer.infrastructure.protonvpn" = "Encontre %@ credenciais na sessão \"Account > OpenVPN / IKEv2 Username\" do site."; "account.sections.guidance.footer.infrastructure.tunnelbear" = "Utilize %@ credenciais do site. Seu usuário é normalmente o seu email."; +"account.sections.guidance.footer.infrastructure.vyprvpn" = "Utilize %@ credenciais do site. Seu usuário é normalmente o seu email."; "account.sections.guidance.footer.infrastructure.windscribe" = "Encontre %@ credenciais no gerador de configuração OpenVPN do site."; "account.sections.registration.footer" = "Registrar em %@ website."; "account.cells.username.caption" = "Usuário"; diff --git a/Passepartout/Resources/ru.lproj/Localizable.strings b/Passepartout/Resources/ru.lproj/Localizable.strings index a4f090b1..aba68f9e 100644 --- a/Passepartout/Resources/ru.lproj/Localizable.strings +++ b/Passepartout/Resources/ru.lproj/Localizable.strings @@ -142,6 +142,7 @@ "account.sections.guidance.footer.infrastructure.pia" = "Используйте Ваши данные для входа с веб-сайта %@. Ваш логин обычно числовой с приставкой \"p\"."; "account.sections.guidance.footer.infrastructure.protonvpn" = "Найдите Ваши данные для входа %@ \"Account > OpenVPN / IKEv2 Username\" секции веб-сайта."; "account.sections.guidance.footer.infrastructure.tunnelbear" = "Используйте данные для входа на %@ веб-сайт. Ваш логин обычно Ваш e-mail."; +"account.sections.guidance.footer.infrastructure.vyprvpn" = "Используйте данные для входа на %@ веб-сайт. Ваш логин обычно Ваш e-mail."; "account.sections.guidance.footer.infrastructure.windscribe" = "Найдите Ваши данные для входа %@ в OpenVPN Config Generator на веб-сайте."; "account.sections.registration.footer" = "Создайте аккаунт на %@ веб-сайте."; "account.cells.username.caption" = "Логин"; diff --git a/Passepartout/Sources/Services/Infrastructure.swift b/Passepartout/Sources/Services/Infrastructure.swift index c268ff13..c9122b96 100644 --- a/Passepartout/Sources/Services/Infrastructure.swift +++ b/Passepartout/Sources/Services/Infrastructure.swift @@ -38,6 +38,8 @@ public struct Infrastructure: Codable { case tunnelBear = "TunnelBear" + case vyprVPN = "VyprVPN" + case windscribe = "Windscribe" } diff --git a/Passepartout/Sources/Services/InfrastructureFactory.swift b/Passepartout/Sources/Services/InfrastructureFactory.swift index 57c1b61c..54aee817 100644 --- a/Passepartout/Sources/Services/InfrastructureFactory.swift +++ b/Passepartout/Sources/Services/InfrastructureFactory.swift @@ -64,6 +64,7 @@ public class InfrastructureFactory { .pia, .protonVPN, .tunnelBear, + .vyprVPN, .windscribe ] diff --git a/Passepartout/Sources/SwiftGen+Strings.swift b/Passepartout/Sources/SwiftGen+Strings.swift index 49fb2e55..eb35575e 100644 --- a/Passepartout/Sources/SwiftGen+Strings.swift +++ b/Passepartout/Sources/SwiftGen+Strings.swift @@ -106,6 +106,10 @@ public enum L10n { public static func tunnelbear(_ p1: String) -> String { return L10n.tr("Localizable", "account.sections.guidance.footer.infrastructure.tunnelbear", p1) } + /// Use your %@ website credentials. Your username is usually your e-mail. + public static func vyprvpn(_ p1: String) -> String { + return L10n.tr("Localizable", "account.sections.guidance.footer.infrastructure.vyprvpn", p1) + } /// Find your %@ credentials in the OpenVPN Config Generator on the website. public static func windscribe(_ p1: String) -> String { return L10n.tr("Localizable", "account.sections.guidance.footer.infrastructure.windscribe", p1) @@ -554,18 +558,6 @@ public enum L10n { } public enum Provider { - public enum Pool { - public enum Sections { - public enum Free { - /// Free - public static let header = L10n.tr("Localizable", "provider.pool.sections.free.header") - } - public enum Paid { - /// Paid - public static let header = L10n.tr("Localizable", "provider.pool.sections.paid.header") - } - } - } public enum Preset { public enum Cells { public enum TechDetails {