Skip to content

Commit 1bc2e1a

Browse files
authored
add another expires date format (#315)
1 parent 5f0a456 commit 1bc2e1a

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

Sources/AsyncHTTPClient/HTTPClient+HTTPCookie.swift

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,30 @@ extension HTTPClient {
8181
case ("domain", .some(let value)):
8282
self.domain = value
8383
case ("expires", let value):
84+
guard let value = value else {
85+
continue
86+
}
87+
8488
let formatter = DateFormatter()
8589
formatter.locale = Locale(identifier: "en_US")
8690
formatter.timeZone = TimeZone(identifier: "GMT")
91+
8792
formatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z"
88-
self.expires = value.flatMap { formatter.date(from: $0) }
93+
if let date = formatter.date(from: value) {
94+
self.expires = date
95+
continue
96+
}
97+
98+
formatter.dateFormat = "EEE, dd-MMM-yy HH:mm:ss z"
99+
if let date = formatter.date(from: value) {
100+
self.expires = date
101+
continue
102+
}
103+
104+
formatter.dateFormat = "EEE MMM d hh:mm:s yyyy"
105+
if let date = formatter.date(from: value) {
106+
self.expires = date
107+
}
89108
case ("max-age", let value):
90109
self.maxAge = value.flatMap(Int.init)
91110
case ("secure", nil):

Tests/AsyncHTTPClientTests/HTTPClientCookieTests+XCTest.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ extension HTTPClientCookieTests {
3030
("testCookieDefaults", testCookieDefaults),
3131
("testCookieInit", testCookieInit),
3232
("testMalformedCookies", testMalformedCookies),
33+
("testCookieExpiresDateParsing", testCookieExpiresDateParsing),
3334
]
3435
}
3536
}

Tests/AsyncHTTPClientTests/HTTPClientCookieTests.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,15 @@ class HTTPClientCookieTests: XCTestCase {
8282
XCTAssertNil(HTTPClient.Cookie(header: "=;", defaultDomain: "exampe.org"))
8383
XCTAssertNil(HTTPClient.Cookie(header: "=value;", defaultDomain: "exampe.org"))
8484
}
85+
86+
func testCookieExpiresDateParsing() {
87+
var c = HTTPClient.Cookie(header: "key=value; eXpIRes=Sun, 06 Nov 1994 08:49:37 GMT;", defaultDomain: "example.org")!
88+
XCTAssertEqual(Date(timeIntervalSince1970: 784_111_777), c.expires)
89+
90+
c = HTTPClient.Cookie(header: "key=value; eXpIRes=Sunday, 06-Nov-94 08:49:37 GMT;", defaultDomain: "example.org")!
91+
XCTAssertEqual(Date(timeIntervalSince1970: 784_111_777), c.expires)
92+
93+
c = HTTPClient.Cookie(header: "key=value; eXpIRes=Sun Nov 6 08:49:37 1994;", defaultDomain: "example.org")!
94+
XCTAssertEqual(Date(timeIntervalSince1970: 784_111_777), c.expires)
95+
}
8596
}

0 commit comments

Comments
 (0)