Skip to content

Commit 6b0c64a

Browse files
committed
adds generate_token method to session, fixes #12
1 parent 1434c22 commit 6b0c64a

File tree

5 files changed

+41
-9
lines changed

5 files changed

+41
-9
lines changed

opentok/opentok.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def __init__(self, api_key, api_secret, api_url='https://api.opentok.com'):
3737
self.api_secret = api_secret
3838
self.api_url = api_url
3939

40-
def generate_token(self, session_id, role=Roles.publisher, expire_time=None, connection_data=None, **kwargs):
40+
def generate_token(self, session_id, role=Roles.publisher, expire_time=None, data=None):
4141
"""
4242
Generate a token which is passed to the JS API to enable widgets to connect to the Opentok api.
4343
session_id: Specify a session_id to make this token only valid for that session_id.
@@ -69,8 +69,8 @@ def generate_token(self, session_id, role=Roles.publisher, expire_time=None, con
6969
raise OpenTokException(u('Cannot generate token, expire_time is not in the future {0}').format(expire_time))
7070
if expire_time > now + (60*60*24*30): # 30 days
7171
raise OpenTokException(u('Cannot generate token, expire_time is not in the next 30 days {0}').format(expire_time))
72-
if (connection_data is not None) and len(connection_data) > 1000:
73-
raise OpenTokException(u('Cannot generate token, connection_data must be less than 1000 characters').format(connection_data))
72+
if (data is not None) and len(data) > 1000:
73+
raise OpenTokException(u('Cannot generate token, data must be less than 1000 characters').format(data))
7474

7575
# decode session id to verify api_key
7676
sub_session_id = session_id[2:]
@@ -89,7 +89,7 @@ def generate_token(self, session_id, role=Roles.publisher, expire_time=None, con
8989
create_time = now,
9090
expire_time = expire_time,
9191
role = role.value,
92-
connection_data = (connection_data or None),
92+
connection_data = (data or None),
9393
nonce = random.randint(0,999999)
9494
)
9595
data_string = urlencode(data_params, True)
@@ -151,7 +151,7 @@ def create_session(self, location=None, p2p=False):
151151
raise AuthError('Failed to create session (code=%s): %s' % (error.attributes['code'].value, error.firstChild.attributes['message'].value))
152152

153153
session_id = dom.getElementsByTagName('session_id')[0].childNodes[0].nodeValue
154-
return Session(session_id, location=location, p2p=p2p)
154+
return Session(self, session_id, location=location, p2p=p2p)
155155
except Exception as e:
156156
raise OpenTokException('Failed to generate session: %s' % str(e))
157157

opentok/session.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
class Session(object):
2-
def __init__(self, session_id, **kwargs):
2+
def __init__(self, sdk, session_id, **kwargs):
33
self.session_id = session_id
4+
self.sdk = sdk
45
for key, value in kwargs.items():
56
setattr(self, key, value)
7+
8+
def generate_token(self, **kwargs):
9+
return self.sdk.generate_token(self.session_id, **kwargs)

tests/test_archive.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
import datetime
99
import pytz
1010

11-
from opentok import OpenTok, Archive, ArchiveList, __version__
11+
from opentok import OpenTok, Archive, __version__
1212

13-
class OpenTokArchiveApiTest(unittest.TestCase):
13+
class OpenTokArchiveTest(unittest.TestCase):
1414
def setUp(self):
1515
self.api_key = u('123456')
1616
self.api_secret = u('1234567890abcdef1234567890abcdef1234567890')

tests/test_session.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import unittest
2+
from six import text_type, u, b, PY2, PY3
3+
from nose.tools import raises
4+
5+
from opentok import OpenTok, Session, Roles
6+
from .helpers import token_decoder, token_signature_validator
7+
8+
class SessionTest(unittest.TestCase):
9+
def setUp(self):
10+
self.api_key = u('123456')
11+
self.api_secret = u('1234567890abcdef1234567890abcdef1234567890')
12+
self.session_id = u('1_MX4xMjM0NTZ-flNhdCBNYXIgMTUgMTQ6NDI6MjMgUERUIDIwMTR-MC40OTAxMzAyNX4')
13+
self.opentok = OpenTok(self.api_key, self.api_secret)
14+
15+
def test_generate_token(self):
16+
session = Session(self.opentok, self.session_id, p2p=False, location=None)
17+
token = session.generate_token()
18+
assert isinstance(token, text_type)
19+
assert token_decoder(token)[u('session_id')] == self.session_id
20+
assert token_signature_validator(token, self.api_secret)
21+
22+
def test_generate_role_token(self):
23+
session = Session(self.opentok, self.session_id, p2p=False, location=None)
24+
token = session.generate_token(role=Roles.moderator)
25+
assert isinstance(token, text_type)
26+
assert token_decoder(token)[u('session_id')] == self.session_id
27+
assert token_decoder(token)[u('role')] == u('moderator')
28+
assert token_signature_validator(token, self.api_secret)

tests/test_token_generation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def test_generate_expires_token(self):
5959

6060
def test_generate_data_token(self):
6161
data = u('name=Johnny')
62-
token = self.opentok.generate_token(self.session_id, connection_data=data)
62+
token = self.opentok.generate_token(self.session_id, data=data)
6363
assert isinstance(token, text_type)
6464
assert token_decoder(token)[u('connection_data')] == data
6565
assert token_signature_validator(token, self.api_secret)

0 commit comments

Comments
 (0)