From 030d50f1a6d488300a12d3c74d37db0eb0bb480e Mon Sep 17 00:00:00 2001 From: NachoSoto Date: Tue, 7 Mar 2023 09:48:15 -0800 Subject: [PATCH] `HTTPClient`: don't verify 4xx/5xx responses (#2322) --- Sources/Misc/Signing+ResponseVerification.swift | 1 + Sources/Networking/HTTPClient/HTTPStatusCode.swift | 2 +- Tests/UnitTests/Networking/HTTPClientTests.swift | 4 ++++ Tests/UnitTests/Networking/HTTPStatusCodeTests.swift | 7 ++++--- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Sources/Misc/Signing+ResponseVerification.swift b/Sources/Misc/Signing+ResponseVerification.swift index 168337a787..715be1f755 100644 --- a/Sources/Misc/Signing+ResponseVerification.swift +++ b/Sources/Misc/Signing+ResponseVerification.swift @@ -65,6 +65,7 @@ extension HTTPResponse where Body == Data { ) -> VerificationResult { guard let nonce = request.nonce, let publicKey = publicKey, + statusCode.isSuccessfulResponse, #available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.2, *) else { return .notRequested } diff --git a/Sources/Networking/HTTPClient/HTTPStatusCode.swift b/Sources/Networking/HTTPClient/HTTPStatusCode.swift index 25d0b3d2f2..7a30421c83 100644 --- a/Sources/Networking/HTTPClient/HTTPStatusCode.swift +++ b/Sources/Networking/HTTPClient/HTTPStatusCode.swift @@ -78,7 +78,7 @@ extension HTTPStatusCode: Codable {} extension HTTPStatusCode { var isSuccessfulResponse: Bool { - return 200...299 ~= self.rawValue + return 200...399 ~= self.rawValue } var isServerError: Bool { diff --git a/Tests/UnitTests/Networking/HTTPClientTests.swift b/Tests/UnitTests/Networking/HTTPClientTests.swift index 352ccde56f..4fa8356816 100644 --- a/Tests/UnitTests/Networking/HTTPClientTests.swift +++ b/Tests/UnitTests/Networking/HTTPClientTests.swift @@ -336,6 +336,8 @@ final class HTTPClientTests: BaseHTTPClientTests { message: "something is broken up in the cloud"), HTTPStatusCode(rawValue: errorCode) ) + + expect(MockSigning.requests).to(beEmpty()) } func testServerSide500s() throws { @@ -367,6 +369,8 @@ final class HTTPClientTests: BaseHTTPClientTests { message: "something is broken up in the cloud"), HTTPStatusCode(rawValue: errorCode) ) + + expect(MockSigning.requests).to(beEmpty()) } func testInvalidJSONAsDataDoesNotFail() { diff --git a/Tests/UnitTests/Networking/HTTPStatusCodeTests.swift b/Tests/UnitTests/Networking/HTTPStatusCodeTests.swift index 14635bd966..e755879fb7 100644 --- a/Tests/UnitTests/Networking/HTTPStatusCodeTests.swift +++ b/Tests/UnitTests/Networking/HTTPStatusCodeTests.swift @@ -46,14 +46,15 @@ class HTTPStatusCodeTests: TestCase { func testIsSuccessfulResponse() { expect(HTTPStatusCode.success.isSuccessfulResponse) == true expect(HTTPStatusCode.createdSuccess.isSuccessfulResponse) == true + expect(HTTPStatusCode.redirect.isSuccessfulResponse) == true + expect(HTTPStatusCode.notModified.isSuccessfulResponse) == true expect(status(202).isSuccessfulResponse) == true expect(status(226).isSuccessfulResponse) == true expect(status(299).isSuccessfulResponse) == true + expect(status(399).isSuccessfulResponse) == true } - func testIsNotValidResponse() { - expect(HTTPStatusCode.redirect.isSuccessfulResponse) == false - expect(HTTPStatusCode.notModified.isSuccessfulResponse) == false + func testIsNotSuccessfulResponse() { expect(HTTPStatusCode.invalidRequest.isSuccessfulResponse) == false expect(HTTPStatusCode.notFoundError.isSuccessfulResponse) == false expect(HTTPStatusCode.internalServerError.isSuccessfulResponse) == false