From 6dfdb3445308c40280bf1c071fe14c1c92f98a0d Mon Sep 17 00:00:00 2001 From: Tanner Date: Thu, 28 May 2020 12:28:23 -0400 Subject: [PATCH] support periods in directive keys (#2372) --- Sources/Vapor/HTTP/Headers/HTTPHeaders+Directive.swift | 5 ++++- Tests/VaporTests/HTTPHeaderTests.swift | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Sources/Vapor/HTTP/Headers/HTTPHeaders+Directive.swift b/Sources/Vapor/HTTP/Headers/HTTPHeaders+Directive.swift index 22de516d44..576390a0ba 100644 --- a/Sources/Vapor/HTTP/Headers/HTTPHeaders+Directive.swift +++ b/Sources/Vapor/HTTP/Headers/HTTPHeaders+Directive.swift @@ -224,9 +224,12 @@ private extension Character { static var underscore: Self { .init("_") } + static var period: Self { + .init(".") + } var isDirectiveKey: Bool { - self.isLetter || self.isNumber || self == .dash || self == .underscore + self.isLetter || self.isNumber || self == .dash || self == .underscore || self == .period } } diff --git a/Tests/VaporTests/HTTPHeaderTests.swift b/Tests/VaporTests/HTTPHeaderTests.swift index ca74c29049..26c14ee0cc 100644 --- a/Tests/VaporTests/HTTPHeaderTests.swift +++ b/Tests/VaporTests/HTTPHeaderTests.swift @@ -176,6 +176,15 @@ final class HTTPHeaderValueTests: XCTestCase { XCTAssertEqual(headers.cookie?["oauth2_consent_csrf"]?.string, "MTU4NjkzNzgwMnxEdi1CQkFFQ180SUFBUkFCRUFBQVB2LUNBQUVHYzNSeWFXNW5EQVlBQkdOemNtWUdjM1J5YVc1bkRDSUFJR1ExWVRnM09USmhOamRsWXpSbU4yRmhOR1UwTW1KaU5tRXpPRGczTmpjMHweHbVecAf193ev3_1Tcf60iY9jSsq5-IQxGTyoztRTfg==") } + func testCookie_dotParsing() throws { + let headers = HTTPHeaders([ + ("cookie", "cookie_one=1;cookie.two=2") + ]) + + XCTAssertEqual(headers.cookie?["cookie_one"]?.string, "1") + XCTAssertEqual(headers.cookie?["cookie.two"]?.string, "2") + } + func testMediaTypeMainTypeCaseInsensitive() throws { let lower = HTTPMediaType(type: "foo", subType: "") let upper = HTTPMediaType(type: "FOO", subType: "")