66use OpenTok \Util \Validators ;
77use OpenTok \Exception \InvalidArgumentException ;
88use OpenTok \Exception \UnexpectedValueException ;
9+ use Vonage \JWT \TokenGenerator ;
910
1011/**
1112* Contains methods for creating OpenTok sessions, generating tokens, and working with archives.
1920*/
2021class OpenTok
2122{
22-
2323 /** @internal */
2424 private $ apiKey ;
2525 /** @internal */
@@ -104,11 +104,37 @@ public function __construct($apiKey, $apiSecret, $options = array())
104104 *
105105 * </ul>
106106 *
107+ * @param bool $legacy By default, OpenTok uses SHA256 JWTs for authentication. Switching
108+ * legacy to true will create a deprecated T1 token for backwards compatibility.
109+ *
107110 * @return string The token string.
108111 */
109- public function generateToken ($ sessionId , $ options = array ())
112+ public function generateToken ($ sessionId , $ options = array (), $ legacy = false )
113+ {
114+ if ($ legacy ) {
115+ return $ this ->returnLegacyToken ($ sessionId , $ options );
116+ }
117+
118+ $ defaults = [
119+ 'sessionId ' => $ sessionId ,
120+ 'role ' => Role::PUBLISHER ,
121+ 'exp ' => null ,
122+ 'data ' => null ,
123+ 'initialLayoutClassList ' => ['' ],
124+ ];
125+
126+ $ options = array_merge ($ defaults , array_intersect_key ($ options , $ defaults ));
127+
128+ $ generator = new TokenGenerator ($ this ->apiKey , $ this ->apiSecret );
129+ foreach ($ options as $ key => $ value ) {
130+ $ generator ->addClaim ($ key , $ value );
131+ }
132+
133+ return $ generator ->generate ();
134+ }
135+
136+ private function returnLegacyToken (string $ sessionId , array $ options = []): string
110137 {
111- // unpack optional arguments (merging with default values) into named variables
112138 $ defaults = array (
113139 'role ' => Role::PUBLISHER ,
114140 'expireTime ' => null ,
@@ -237,7 +263,6 @@ public function createSession($options = array())
237263 }
238264
239265 if (array_key_exists ('e2ee ' , $ options ) && $ options ['e2ee ' ]) {
240-
241266 if (array_key_exists ('mediaMode ' , $ options ) && $ options ['mediaMode ' ] !== MediaMode::ROUTED ) {
242267 throw new InvalidArgumentException ('MediaMode must be routed in order to enable E2EE ' );
243268 }
@@ -875,13 +900,13 @@ public function startBroadcast(string $sessionId, array $options = []): Broadcas
875900 Validators::validateResolution ($ options ['resolution ' ]);
876901 }
877902
878- if (isset ($ options ['outputs ' ]['hls ' ])) {
879- Validators::validateBroadcastOutputOptions ($ options ['outputs ' ]['hls ' ]);
880- }
903+ if (isset ($ options ['outputs ' ]['hls ' ])) {
904+ Validators::validateBroadcastOutputOptions ($ options ['outputs ' ]['hls ' ]);
905+ }
881906
882- if (isset ($ options ['outputs ' ]['rtmp ' ])) {
883- Validators::validateRtmpStreams ($ options ['outputs ' ]['rtmp ' ]);
884- }
907+ if (isset ($ options ['outputs ' ]['rtmp ' ])) {
908+ Validators::validateRtmpStreams ($ options ['outputs ' ]['rtmp ' ]);
909+ }
885910
886911 $ defaults = [
887912 'layout ' => Layout::getBestFit (),
@@ -890,11 +915,11 @@ public function startBroadcast(string $sessionId, array $options = []): Broadcas
890915 'streamMode ' => 'auto ' ,
891916 'resolution ' => '640x480 ' ,
892917 'maxBitRate ' => 2000000 ,
893- 'outputs ' => [
894- 'hls ' => [
895- 'dvr ' => false ,
896- 'lowLatency ' => false
897- ]
918+ 'outputs ' => [
919+ 'hls ' => [
920+ 'dvr ' => false ,
921+ 'lowLatency ' => false
922+ ]
898923 ]
899924 ];
900925
@@ -1306,8 +1331,7 @@ public function startCaptions(
13061331 ?int $ maxDuration = null ,
13071332 ?bool $ partialCaptions = null ,
13081333 ?string $ statusCallbackUrl = null
1309- ): array
1310- {
1334+ ): array {
13111335 return $ this ->client ->startCaptions (
13121336 $ sessionId ,
13131337 $ token ,
0 commit comments