From 966fe40ffdaeb0cd267a706afb29d13e58c0a0c6 Mon Sep 17 00:00:00 2001 From: Sergei Fundaev Date: Tue, 19 Oct 2021 22:12:53 +0400 Subject: [PATCH 1/3] Double quoted cookie values are supported now. Motivation: In according to RFC 6265 a cookie value may be placed between double quotes. Modifications: HTTPClient.Cookie ignores now the double quotes at the beginning and the ending of a cookie value. New unit test is added to check it. Result: Quoted cookie values are parsed properly now. --- Sources/AsyncHTTPClient/HTTPClient+HTTPCookie.swift | 13 ++++++++++++- .../HTTPClientCookieTests+XCTest.swift | 1 + .../HTTPClientCookieTests.swift | 12 ++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Sources/AsyncHTTPClient/HTTPClient+HTTPCookie.swift b/Sources/AsyncHTTPClient/HTTPClient+HTTPCookie.swift index ae5d18104..becf8a9e4 100644 --- a/Sources/AsyncHTTPClient/HTTPClient+HTTPCookie.swift +++ b/Sources/AsyncHTTPClient/HTTPClient+HTTPCookie.swift @@ -59,7 +59,7 @@ extension HTTPClient { } self.name = nameAndValue[0] - self.value = nameAndValue[1] + self.value = omittingQuotes(text: nameAndValue[1]) guard !self.name.isEmpty else { return nil @@ -153,6 +153,17 @@ extension HTTPClient { } } +fileprivate func omittingQuotes(text: String) -> String { + let dquote = "\"" + if !text.hasPrefix(dquote) || !text.hasSuffix(dquote) { + return text + } + + let begin = text.index(after: text.startIndex) + let end = text.index(before: text.endIndex) + return String(text[begin.. Date: Wed, 20 Oct 2021 10:46:12 +0400 Subject: [PATCH 2/3] omittingQuotes function has been replaced by private String extension --- .../HTTPClient+HTTPCookie.swift | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/Sources/AsyncHTTPClient/HTTPClient+HTTPCookie.swift b/Sources/AsyncHTTPClient/HTTPClient+HTTPCookie.swift index becf8a9e4..34d2a8b6e 100644 --- a/Sources/AsyncHTTPClient/HTTPClient+HTTPCookie.swift +++ b/Sources/AsyncHTTPClient/HTTPClient+HTTPCookie.swift @@ -59,7 +59,7 @@ extension HTTPClient { } self.name = nameAndValue[0] - self.value = omittingQuotes(text: nameAndValue[1]) + self.value = nameAndValue[1].omittingQuotes() guard !self.name.isEmpty else { return nil @@ -153,15 +153,17 @@ extension HTTPClient { } } -fileprivate func omittingQuotes(text: String) -> String { - let dquote = "\"" - if !text.hasPrefix(dquote) || !text.hasSuffix(dquote) { - return text - } +private extension String { + func omittingQuotes() -> String { + let dquote = "\"" + if !hasPrefix(dquote) || !hasSuffix(dquote) { + return self + } - let begin = text.index(after: text.startIndex) - let end = text.index(before: text.endIndex) - return String(text[begin.. Date: Wed, 20 Oct 2021 11:52:10 +0400 Subject: [PATCH 3/3] Code style --- Sources/AsyncHTTPClient/HTTPClient+HTTPCookie.swift | 2 +- Tests/AsyncHTTPClientTests/HTTPClientCookieTests.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/AsyncHTTPClient/HTTPClient+HTTPCookie.swift b/Sources/AsyncHTTPClient/HTTPClient+HTTPCookie.swift index 34d2a8b6e..94a3536a7 100644 --- a/Sources/AsyncHTTPClient/HTTPClient+HTTPCookie.swift +++ b/Sources/AsyncHTTPClient/HTTPClient+HTTPCookie.swift @@ -159,7 +159,7 @@ private extension String { if !hasPrefix(dquote) || !hasSuffix(dquote) { return self } - + let begin = index(after: startIndex) let end = index(before: endIndex) return String(self[begin..