From cac009e6699b27b38335f69f9ce93d6b6c81f79f Mon Sep 17 00:00:00 2001 From: Tanner Date: Thu, 26 Mar 2020 11:58:02 -0400 Subject: [PATCH] support underscore in HTTP header directive key (#2266) --- Sources/Vapor/HTTP/HTTPHeaders+Directive.swift | 9 ++++++--- ...{HTTPHeaderValueTests.swift => HTTPHeaderTests.swift} | 9 +++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) rename Tests/VaporTests/{HTTPHeaderValueTests.swift => HTTPHeaderTests.swift} (92%) diff --git a/Sources/Vapor/HTTP/HTTPHeaders+Directive.swift b/Sources/Vapor/HTTP/HTTPHeaders+Directive.swift index 9174bab68a..3336849e93 100644 --- a/Sources/Vapor/HTTP/HTTPHeaders+Directive.swift +++ b/Sources/Vapor/HTTP/HTTPHeaders+Directive.swift @@ -5,9 +5,9 @@ extension HTTPHeaders { var description: String { if let parameter = self.parameter { - return "\(self.value)=\(parameter)" + return "Directive(value: \(self.value.debugDescription), parameter: \(parameter.debugDescription))" } else { - return "\(self.value)" + return "Directive(value: \(self.value.debugDescription))" } } @@ -221,9 +221,12 @@ private extension Character { static var comma: Self { .init(",") } + static var underscore: Self { + .init("_") + } var isDirectiveKey: Bool { - self.isLetter || self == .dash + self.isLetter || self == .dash || self == .underscore } } diff --git a/Tests/VaporTests/HTTPHeaderValueTests.swift b/Tests/VaporTests/HTTPHeaderTests.swift similarity index 92% rename from Tests/VaporTests/HTTPHeaderValueTests.swift rename to Tests/VaporTests/HTTPHeaderTests.swift index cd77399411..e5ffdfdc28 100644 --- a/Tests/VaporTests/HTTPHeaderValueTests.swift +++ b/Tests/VaporTests/HTTPHeaderTests.swift @@ -155,4 +155,13 @@ final class HTTPHeaderValueTests: XCTestCase { XCTAssertEqual(headers.contentDisposition?.name, "fieldName") XCTAssertEqual(headers.contentDisposition?.filename, "filename.jpg") } + + func testCookie_parsing() throws { + let headers = HTTPHeaders([ + ("cookie", "vapor-session=0FuTYcHmGw7Bz1G4HiF+EA==; _ga=GA1.1.500315824.1585154561; _gid=GA1.1.500224287.1585154561") + ]) + XCTAssertEqual(headers.cookie?["vapor-session"]?.string, "0FuTYcHmGw7Bz1G4HiF+EA==") + XCTAssertEqual(headers.cookie?["_ga"]?.string, "GA1.1.500315824.1585154561") + XCTAssertEqual(headers.cookie?["_gid"]?.string, "GA1.1.500224287.1585154561") + } }