Skip to content

Commit 5789053

Browse files
committed
fixes timestamp issues for expire_time
1 parent 681e784 commit 5789053

File tree

3 files changed

+28
-7
lines changed

3 files changed

+28
-7
lines changed

opentok/opentok.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,21 +102,21 @@ def generate_token(self, session_id, role=Roles.publisher, expire_time=None, con
102102
# after this block it will only be an integer
103103
if expire_time is not None:
104104
if isinstance(expire_time, datetime):
105-
expire_time = calendar.timegm(expire_time.timetuple())
105+
expire_time = calendar.timegm(expire_time.utctimetuple())
106106
else:
107107
try:
108108
expire_time = int(expire_time)
109109
except (ValueError, TypeError):
110110
raise OpenTokException(u('Cannot generate token, invalid expire time {0}').format(expire_time))
111111
else:
112-
expire_time = calendar.timegm(time.gmtime()) + (60*60*24) # 1 day
112+
expire_time = int(time.time()) + (60*60*24) # 1 day
113113

114114
# validations
115115
if not text_type(session_id):
116116
raise OpenTokException(u('Cannot generate token, session_id was not valid {0}').format(session_id))
117117
if not isinstance(role, Roles):
118118
raise OpenTokException(u('Cannot generate token, {0} is not a valid role').format(role))
119-
now = calendar.timegm(time.gmtime())
119+
now = int(time.time())
120120
if expire_time < now:
121121
raise OpenTokException(u('Cannot generate token, expire_time is not in the future {0}').format(expire_time))
122122
if expire_time > now + (60*60*24*30): # 30 days

setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ def find_version(*file_paths):
7272
install_requires=[
7373
'requests>=1,<2',
7474
'enum34',
75-
'six'
75+
'six',
76+
'pytz'
7677
],
7778

7879
# TODO: these aren't in the sample package, but might again become imp

tests/test_token_generation.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import unittest
2-
from six import text_type, u
2+
from six import text_type, u, PY2, PY3
33
from nose.tools import raises
44
import time
5+
import datetime
6+
import calendar
7+
import pytz
58

69
from opentok import OpenTok, Roles, OpenTokException
710

@@ -31,11 +34,28 @@ def test_generate_role_token(self):
3134
assert token_signature_validator(token, self.api_secret)
3235

3336
def test_generate_expires_token(self):
34-
expire_time = time.time()
37+
# an integer is a valid argument
38+
expire_time = int(time.time()) + 100
3539
token = self.opentok.generate_token(self.session_id, expire_time=expire_time)
3640
assert isinstance(token, text_type)
37-
assert token_decoder(token)[u('expire_time')] == text_type(int(expire_time))
41+
assert token_decoder(token)[u('expire_time')] == text_type(expire_time)
3842
assert token_signature_validator(token, self.api_secret)
43+
# anything that can be coerced into an integer is also valid
44+
expire_time = text_type(int(time.time()) + 100)
45+
token = self.opentok.generate_token(self.session_id, expire_time=expire_time)
46+
assert isinstance(token, text_type)
47+
assert token_decoder(token)[u('expire_time')] == expire_time
48+
assert token_signature_validator(token, self.api_secret)
49+
# a datetime object is also valid
50+
if PY2:
51+
expire_time = datetime.datetime.fromtimestamp(time.time(), pytz.UTC) + datetime.timedelta(days=1)
52+
if PY3:
53+
expire_time = datetime.datetime.fromtimestamp(time.time(), datetime.timezone.utc) + datetime.timedelta(days=1)
54+
token = self.opentok.generate_token(self.session_id, expire_time=expire_time)
55+
assert isinstance(token, text_type)
56+
assert token_decoder(token)[u('expire_time')] == text_type(calendar.timegm(expire_time.utctimetuple()))
57+
assert token_signature_validator(token, self.api_secret)
58+
3959

4060
def test_generate_data_token(self):
4161
data = u('name=Johnny')

0 commit comments

Comments
 (0)