summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@googlemail.com>2018-04-04 22:37:37 +0100
committerGitHub <noreply@github.com>2018-04-04 22:37:37 +0100
commit06a45053051f7eacc9bff30172d84d00d655831f (patch)
tree0ed7b8f3d3eac40bc70db5a68dbe32c2824d54e7
parent58dc8a399efc5849ccc8109e1ee8d26c120a7539 (diff)
parent97565826efbc9e551829531875867c8f78378691 (diff)
downloadNim-06a45053051f7eacc9bff30172d84d00d655831f.tar.gz
Merge pull request #7483 from GULPF/cookies-timezones
Don't assume UTC in cookies.setCookie
-rw-r--r--changelog.md2
-rw-r--r--lib/pure/cookies.nim24
2 files changed, 14 insertions, 12 deletions
diff --git a/changelog.md b/changelog.md
index 4891786b7..a1a893237 100644
--- a/changelog.md
+++ b/changelog.md
@@ -7,6 +7,8 @@
 - ``re.split`` for empty regular expressions now yields every character in
   the string which is what other programming languages chose to do.
 
+- ``cookies.setCookie` no longer assumes UTC for the expiration date.
+
 #### Breaking changes in the compiler
 
 ### Library additions
diff --git a/lib/pure/cookies.nim b/lib/pure/cookies.nim
index 8f16717ac..aca0ac2b4 100644
--- a/lib/pure/cookies.nim
+++ b/lib/pure/cookies.nim
@@ -51,26 +51,26 @@ proc setCookie*(key, value: string, domain = "", path = "",
   if secure: result.add("; Secure")
   if httpOnly: result.add("; HttpOnly")
 
-proc setCookie*(key, value: string, expires: DateTime,
+proc setCookie*(key, value: string, expires: DateTime|Time,
                 domain = "", path = "", noName = false,
                 secure = false, httpOnly = false): string =
   ## Creates a command in the format of
   ## ``Set-Cookie: key=value; Domain=...; ...``
-  ##
-  ## **Note:** UTC is assumed as the timezone for ``expires``.
   return setCookie(key, value, domain, path,
-                   format(expires, "ddd',' dd MMM yyyy HH:mm:ss 'GMT'"),
+                   format(expires.utc, "ddd',' dd MMM yyyy HH:mm:ss 'GMT'"),
                    noname, secure, httpOnly)
 
 when isMainModule:
-  var tim = fromUnix(getTime().toUnix + 76 * (60 * 60 * 24))
+  let expire = fromUnix(0) + 1.seconds
 
-  let cookie = setCookie("test", "value", tim.utc)
-  when not defined(testing):
-    echo cookie
-  let start = "Set-Cookie: test=value; Expires="
-  assert cookie[0..start.high] == start
+  let cookies = [
+    setCookie("test", "value", expire),
+    setCookie("test", "value", expire.local),
+    setCookie("test", "value", expire.utc)
+  ]
+  let expected = "Set-Cookie: test=value; Expires=Thu, 01 Jan 1970 00:00:01 GMT"
+  doAssert cookies == [expected, expected, expected]
 
   let table = parseCookies("uid=1; kp=2")
-  assert table["uid"] == "1"
-  assert table["kp"] == "2"
+  doAssert table["uid"] == "1"
+  doAssert table["kp"] == "2"