Make proxy configuration a 3-state

- Manual: server, port
- PAC: set PAC URL
- Disabled

BEWARE: breaking change in Profile.
This commit is contained in:
Davide De Rosa 2022-04-13 19:34:43 +02:00
parent 9055fec394
commit addbc181fd
5 changed files with 61 additions and 10 deletions

View File

@ -104,3 +104,18 @@ extension Network.Choice {
}
}
}
extension Network.ProxySettings.ConfigurationType {
var localizedDescription: String {
switch self {
case .manual:
return L10n.Global.Strings.manual
case .pac:
return Unlocalized.Network.proxyAutoConfiguration
case .disabled:
return L10n.Global.Strings.disabled
}
}
}

View File

@ -215,9 +215,16 @@ extension NetworkSettingsView {
Toggle(L10n.Global.Strings.automatic, isOn: $settings.isAutomaticProxy.animation())
if !settings.isAutomaticProxy {
Toggle(L10n.Global.Strings.enabled, isOn: $settings.proxy.isProxyEnabled.animation())
if settings.proxy.isProxyEnabled {
themeTextPicker(
// FIXME: l10n, refactor string id to "global.strings.configuration"
L10n.Profile.Sections.Configuration.header,
selection: $settings.proxy.configurationType,
values: Network.ProxySettings.availableConfigurationTypes,
description: \.localizedDescription
)
switch settings.proxy.configurationType {
case .manual:
TextField(Unlocalized.Placeholders.address, text: $settings.proxy.proxyAddress ?? "")
.themeIPAddress(settings.proxy.proxyAddress)
.withLeadingText(L10n.Global.Strings.address)
@ -226,13 +233,16 @@ extension NetworkSettingsView {
.themeSocketPort()
.withLeadingText(L10n.Global.Strings.port)
case .pac:
TextField(Unlocalized.Placeholders.pacURL, text: $settings.proxy.proxyAutoConfigurationURL.toString())
.themeURL(settings.proxy.proxyAutoConfigurationURL?.absoluteString)
.withLeadingText(Unlocalized.Network.proxyAutoConfiguration)
case .disabled:
EmptyView()
}
}
}
if !settings.isAutomaticProxy && settings.proxy.isProxyEnabled {
if !settings.isAutomaticProxy && settings.proxy.configurationType != .disabled {
proxyManualBypassDomains
}
}

View File

@ -113,17 +113,27 @@ extension OpenVPN.ConfigurationBuilder {
break
case .manual:
isProxyEnabled = settings.isProxyEnabled
isProxyEnabled = settings.configurationType != .disabled
if settings.isProxyEnabled {
switch settings.configurationType {
case .manual:
if let proxyServer = settings.proxyServer {
httpProxy = proxyServer
httpsProxy = proxyServer
} else if let pac = settings.proxyAutoConfigurationURL {
proxyAutoConfigurationURL = nil
}
case .pac:
if let pac = settings.proxyAutoConfigurationURL {
httpProxy = nil
httpsProxy = nil
proxyAutoConfigurationURL = pac
}
proxyBypassDomains = settings.proxyBypassDomains.filter { !$0.isEmpty }
case .disabled:
break
}
proxyBypassDomains = settings.proxyBypassDomains.filter { !$0.isEmpty }
}
}

View File

@ -106,9 +106,17 @@ extension Network {
extension Network {
public struct ProxySettings: Codable, Equatable, NetworkChoiceRepresentable, ProxySettingsProviding {
public enum ConfigurationType: String, Codable {
case manual
case pac
case disabled
}
public var choice: Network.Choice
public var isProxyEnabled = true
public var configurationType: ConfigurationType = .manual
public var proxyAddress: String?

View File

@ -39,6 +39,14 @@ extension Network.DNSSettings {
}
}
extension Network.ProxySettings {
public static let availableConfigurationTypes: [ConfigurationType] = [
.manual,
.pac,
.disabled
]
}
extension Network.MTUSettings {
public static let availableBytes: [Int] = [0, 1500, 1400, 1300, 1200]
}