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()) Toggle(L10n.Global.Strings.automatic, isOn: $settings.isAutomaticProxy.animation())
if !settings.isAutomaticProxy { if !settings.isAutomaticProxy {
Toggle(L10n.Global.Strings.enabled, isOn: $settings.proxy.isProxyEnabled.animation()) themeTextPicker(
// FIXME: l10n, refactor string id to "global.strings.configuration"
if settings.proxy.isProxyEnabled { 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 ?? "") TextField(Unlocalized.Placeholders.address, text: $settings.proxy.proxyAddress ?? "")
.themeIPAddress(settings.proxy.proxyAddress) .themeIPAddress(settings.proxy.proxyAddress)
.withLeadingText(L10n.Global.Strings.address) .withLeadingText(L10n.Global.Strings.address)
@ -226,13 +233,16 @@ extension NetworkSettingsView {
.themeSocketPort() .themeSocketPort()
.withLeadingText(L10n.Global.Strings.port) .withLeadingText(L10n.Global.Strings.port)
case .pac:
TextField(Unlocalized.Placeholders.pacURL, text: $settings.proxy.proxyAutoConfigurationURL.toString()) TextField(Unlocalized.Placeholders.pacURL, text: $settings.proxy.proxyAutoConfigurationURL.toString())
.themeURL(settings.proxy.proxyAutoConfigurationURL?.absoluteString) .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 proxyManualBypassDomains
} }
} }

View File

@ -113,17 +113,27 @@ extension OpenVPN.ConfigurationBuilder {
break break
case .manual: case .manual:
isProxyEnabled = settings.isProxyEnabled isProxyEnabled = settings.configurationType != .disabled
if settings.isProxyEnabled { switch settings.configurationType {
case .manual:
if let proxyServer = settings.proxyServer { if let proxyServer = settings.proxyServer {
httpProxy = proxyServer httpProxy = proxyServer
httpsProxy = proxyServer httpsProxy = proxyServer
} else if let pac = settings.proxyAutoConfigurationURL { proxyAutoConfigurationURL = nil
}
case .pac:
if let pac = settings.proxyAutoConfigurationURL {
httpProxy = nil
httpsProxy = nil
proxyAutoConfigurationURL = pac 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 { extension Network {
public struct ProxySettings: Codable, Equatable, NetworkChoiceRepresentable, ProxySettingsProviding { 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 choice: Network.Choice
public var isProxyEnabled = true public var configurationType: ConfigurationType = .manual
public var proxyAddress: String? 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 { extension Network.MTUSettings {
public static let availableBytes: [Int] = [0, 1500, 1400, 1300, 1200] public static let availableBytes: [Int] = [0, 1500, 1400, 1300, 1200]
} }