Skip to content

Commit a78b906

Browse files
committed
Fixed issue with JWT tokens and connection data and class layout
1 parent 0e5b316 commit a78b906

File tree

2 files changed

+62
-1
lines changed

2 files changed

+62
-1
lines changed

src/OpenTok/OpenTok.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,23 @@ public function generateToken(string $sessionId, array $payload = array(), bool
151151
'role' => Role::PUBLISHER,
152152
'ist' => 'project',
153153
'nonce' => mt_rand(),
154-
'scope' => 'session.connect'
154+
'scope' => 'session.connect',
155+
'data' => null,
156+
'initialLayoutClassList' => [],
155157
];
156158

157159
$payload = array_merge($defaults, array_intersect_key($payload, $defaults));
158160

161+
if (isset($payload['data'])) {
162+
$payload['connection_data'] = $payload['data'];
163+
unset($payload['data']);
164+
}
165+
166+
if (isset($payload['initialLayoutClassList'])) {
167+
$payload['initial_layout_class_list'] = urlencode(join(' ', $payload['initialLayoutClassList']));
168+
unset($payload['initialLayoutClassList']);
169+
}
170+
159171
return JWT::encode($payload, $this->apiSecret, 'HS256');
160172
}
161173

tests/OpenTokTest/OpenTokTest.php

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -828,7 +828,56 @@ public function testWillGenerateSha256Token(): void
828828
$this->assertEquals('project', $decodedArray['ist']);
829829
$this->assertEquals('session.connect', $decodedArray['scope']);
830830
$this->assertEquals('publisher', $decodedArray['role']);
831+
}
832+
833+
/**
834+
* Tests that the JWT Token can be generated with connection data
835+
* @see https://github.com/opentok/OpenTok-PHP-SDK/issues/357
836+
*/
837+
public function testWillGenerateJWTWithConnectionData(): void
838+
{
839+
$openTok = new OpenTok('12345678', 'b60d0b2568f3ea9731bd9d3f71be263ce19f802f');
840+
$token = $openTok->generateToken(
841+
'1_MX4xMjM0NTY3OH4-VGh1IEZlYiAyNyAwNDozODozMSBQU1QgMjAxNH4wLjI0NDgyMjI',
842+
['data' => 'username=bob']
843+
);
844+
845+
$this->assertNotEquals('T1', substr($token, 0, 2));
831846

847+
$decoded = JWT::decode($token, new Key('b60d0b2568f3ea9731bd9d3f71be263ce19f802f', 'HS256'));
848+
$decodedArray = (array) $decoded;
849+
850+
$this->assertEquals('12345678', $decodedArray['iss']);
851+
$this->assertEquals('1_MX4xMjM0NTY3OH4-VGh1IEZlYiAyNyAwNDozODozMSBQU1QgMjAxNH4wLjI0NDgyMjI', $decodedArray['session_id']);
852+
$this->assertEquals('project', $decodedArray['ist']);
853+
$this->assertEquals('session.connect', $decodedArray['scope']);
854+
$this->assertEquals('publisher', $decodedArray['role']);
855+
$this->assertEquals('username=bob', $decodedArray['connection_data']);
856+
}
857+
858+
/**
859+
* Tests that the JWT Token can be generated with the class layout data
860+
* @see https://github.com/opentok/OpenTok-PHP-SDK/issues/357
861+
*/
862+
public function testWillGenerateJWTWithClassLayout(): void
863+
{
864+
$openTok = new OpenTok('12345678', 'b60d0b2568f3ea9731bd9d3f71be263ce19f802f');
865+
$token = $openTok->generateToken(
866+
'1_MX4xMjM0NTY3OH4-VGh1IEZlYiAyNyAwNDozODozMSBQU1QgMjAxNH4wLjI0NDgyMjI',
867+
['initialLayoutClassList' => ['focus', 'main']]
868+
);
869+
870+
$this->assertNotEquals('T1', substr($token, 0, 2));
871+
872+
$decoded = JWT::decode($token, new Key('b60d0b2568f3ea9731bd9d3f71be263ce19f802f', 'HS256'));
873+
$decodedArray = (array) $decoded;
874+
875+
$this->assertEquals('12345678', $decodedArray['iss']);
876+
$this->assertEquals('1_MX4xMjM0NTY3OH4-VGh1IEZlYiAyNyAwNDozODozMSBQU1QgMjAxNH4wLjI0NDgyMjI', $decodedArray['session_id']);
877+
$this->assertEquals('project', $decodedArray['ist']);
878+
$this->assertEquals('session.connect', $decodedArray['scope']);
879+
$this->assertEquals('publisher', $decodedArray['role']);
880+
$this->assertEquals('focus+main', $decodedArray['initial_layout_class_list']);
832881
}
833882

834883
public function testStartsArchive(): void

0 commit comments

Comments
 (0)