aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShadab Zafar <dufferzafar0@gmail.com>2016-08-08 12:55:04 +0530
committerShadab Zafar <dufferzafar0@gmail.com>2016-08-15 12:00:23 +0530
commit03e61170424bb92199cff22797135498d5ec8ce5 (patch)
tree21df7a0f46e2688e75329d2973890f1517462537
parent55f1ffe0b100c9aa2a24b041a91091601ea4575d (diff)
downloadmitmproxy-03e61170424bb92199cff22797135498d5ec8ce5.tar.gz
mitmproxy-03e61170424bb92199cff22797135498d5ec8ce5.tar.bz2
mitmproxy-03e61170424bb92199cff22797135498d5ec8ce5.zip
Add a function to get cookie expiration time
-rw-r--r--netlib/http/cookies.py26
-rw-r--r--test/netlib/http/test_cookies.py20
2 files changed, 46 insertions, 0 deletions
diff --git a/netlib/http/cookies.py b/netlib/http/cookies.py
index 389dbb26..7f32eddf 100644
--- a/netlib/http/cookies.py
+++ b/netlib/http/cookies.py
@@ -269,6 +269,32 @@ def refresh_set_cookie_header(c, delta):
return ret
+def get_expiration_ts(cookie_attrs):
+ """
+ Determines the time when the cookie will be expired.
+
+ Considering both 'expires' and 'max-age' parameters.
+
+ Returns: timestamp of when the cookie will expire.
+ None, if no expiration time is set.
+ """
+ if 'expires' in cookie_attrs:
+ e = email.utils.parsedate_tz(cookie_attrs["expires"])
+ if e:
+ return email.utils.mktime_tz(e)
+
+ elif 'max-age' in cookie_attrs:
+ try:
+ max_age = int(cookie_attrs['Max-Age'])
+ except ValueError:
+ pass
+ else:
+ now_ts = time.time()
+ return now_ts + max_age
+
+ return None
+
+
def is_expired(cookie_attrs):
"""
Determines whether a cookie has expired.
diff --git a/test/netlib/http/test_cookies.py b/test/netlib/http/test_cookies.py
index 5a0e264e..cc5115c7 100644
--- a/test/netlib/http/test_cookies.py
+++ b/test/netlib/http/test_cookies.py
@@ -1,6 +1,10 @@
+import time
+
from netlib.http import cookies
from netlib.tutils import raises
+import mock
+
def test_read_token():
tokens = [
@@ -247,6 +251,22 @@ def test_refresh_cookie():
assert cookies.refresh_set_cookie_header(c, 0)
+@mock.patch('time.time')
+def test_get_expiration_ts(*args):
+ # Freeze time
+ now_ts = 17
+ time.time.return_value = now_ts
+
+ CA = cookies.CookieAttrs
+ F = cookies.get_expiration_ts
+
+ assert F(CA([("Expires", "Thu, 01-Jan-1970 00:00:00 GMT")])) == 0
+ assert F(CA([("Expires", "Thu, 24-Aug-2063 00:00:00 GMT")])) == 2955139200
+
+ assert F(CA([("Max-Age", "0")])) == now_ts
+ assert F(CA([("Max-Age", "31")])) == now_ts + 31
+
+
def test_is_expired():
CA = cookies.CookieAttrs