Skip to content

Commit ad02945

Browse files
committed
Support TLSConfiguration.trustRoots(.file)...
Support TLSConfiguration.trustRoots(.file) when converting to a `NWProtocolTLS.Options`
1 parent af884fb commit ad02945

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

Sources/AsyncHTTPClient/NIOTransportServices/TLSConfiguration.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,11 @@
128128
secTrustRoots = try certificates.compactMap { certificate in
129129
try SecCertificateCreateWithData(nil, Data(certificate.toDERBytes()) as CFData)
130130
}
131-
case .some(.file):
132-
preconditionFailure("TLSConfiguration.trustRoots.file is not supported")
131+
case .some(.file(let file)):
132+
let certificates = try NIOSSLCertificate.fromPEMFile(file)
133+
secTrustRoots = try certificates.compactMap { certificate in
134+
try SecCertificateCreateWithData(nil, Data(certificate.toDERBytes()) as CFData)
135+
}
133136

134137
case .some(.default), .none:
135138
break

Tests/AsyncHTTPClientTests/HTTPClientNIOTSTests.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,19 @@ class HTTPClientNIOTSTests: XCTestCase {
111111
}
112112
#endif
113113
}
114+
115+
func testTrustRootCertificateLoadFail() {
116+
guard isTestingNIOTS() else { return }
117+
#if canImport(Network)
118+
let tlsConfig = TLSConfiguration.forClient(trustRoots: .file("not/a/certificate"))
119+
XCTAssertThrowsError(try tlsConfig.getNWProtocolTLSOptions()) { error in
120+
switch error {
121+
case let error as NIOSSL.NIOSSLError where error == .failedToLoadCertificate:
122+
break
123+
default:
124+
XCTFail("\(error)")
125+
}
126+
}
127+
#endif
128+
}
114129
}

0 commit comments

Comments
 (0)