diff --git a/Sources/ContainerizationOCI/Client/ProxyConfig.swift b/Sources/ContainerizationOCI/Client/ProxyConfig.swift new file mode 100644 index 00000000..ca7d52cb --- /dev/null +++ b/Sources/ContainerizationOCI/Client/ProxyConfig.swift @@ -0,0 +1,19 @@ +import Foundation +import AsyncHTTPClient + +public struct ProxyConfig { + public static func(for url: URL?) -> HTTPClient.Configuration.Proxy? { + let env = ProcessInfo.processInfo.environment + let proxyEnv = env["HTTPS_PROXY"] ?? env["HTTP_PROXY"] + guard let proxyEnv else { + return nil + } + guard let url.host != env["NO_PROXY"] else { + return nil + } + guard let proxyURL = URL(string: proxyEnv), let host = proxyURL.host(), let port = proxyURL.port else { + return nil + } + return HTTPClient.Configuration.Proxy.server(host: host, port: port) + } +} \ No newline at end of file diff --git a/Sources/ContainerizationOCI/Client/RegistryClient.swift b/Sources/ContainerizationOCI/Client/RegistryClient.swift index e9386468..51959dda 100644 --- a/Sources/ContainerizationOCI/Client/RegistryClient.swift +++ b/Sources/ContainerizationOCI/Client/RegistryClient.swift @@ -109,16 +109,7 @@ public final class RegistryClient: ContentClient { self.retryOptions = retryOptions self.bufferSize = bufferSize var httpConfiguration = HTTPClient.Configuration() - let proxyConfig: HTTPClient.Configuration.Proxy? = { - let proxyEnv = ProcessInfo.processInfo.environment["HTTP_PROXY"] - guard let proxyEnv else { - return nil - } - guard let url = URL(string: proxyEnv), let host = url.host(), let port = url.port else { - return nil - } - return .server(host: host, port: port) - }() + let proxyConfig: ProxyConfig.proxy(for: components.url) httpConfiguration.proxy = proxyConfig if let logger { self.client = HTTPClient(eventLoopGroupProvider: .singleton, configuration: httpConfiguration, backgroundActivityLogger: logger)