3
3
Plugin Name: BuddyMeet
4
4
Plugin URI:
5
5
Description: Adds a meeting room with video and audio capabilities to BuddyPress. Powered by <a target="_blank" href="https://jitsi.org/"> Jitsi Meet </a>.
6
- Version: 2.5 .0
6
+ Version: 2.6 .0
7
7
Requires at least: 4.6.0
8
8
Tags: buddypress
9
9
License: GPL V2
21
21
* Main BuddyMeet Class
22
22
*/
23
23
class BuddyMeet {
24
+ public $ version ;
25
+ public $ file ;
26
+ public $ basename ;
27
+ public $ plugin_dir ;
28
+ public $ plugin_url ;
29
+ public $ includes_dir ;
30
+ public $ lang_dir ;
31
+ public $ buddymeet_slug ;
32
+ public $ includes_url ;
33
+ public $ buddymeet_name ;
34
+ public $ domain ;
35
+ public $ errors ;
36
+
24
37
25
38
const USER_ROOMS_PREFIX = 'buddymeet_user_room_ ' ;
26
39
const ROOM_MEMBERS_PREFIX = 'buddymeet_room_members_ ' ;
@@ -37,7 +50,7 @@ class BuddyMeet {
37
50
*
38
51
* @var string
39
52
*/
40
- public static $ required_bp_version = '2.5 .0 ' ;
53
+ public static $ required_bp_version = '2.6 .0 ' ;
41
54
42
55
/**
43
56
* BuddyPress config.
@@ -86,7 +99,7 @@ private function __construct() { /* Do nothing here */ }
86
99
* @uses plugin_dir_url() to build BuddyMeet plugin url
87
100
*/
88
101
private function setup_globals () {
89
- $ this ->version = '2.5 .0 ' ;
102
+ $ this ->version = '2.6 .0 ' ;
90
103
91
104
// Setup some base path and URL information
92
105
$ this ->file = __FILE__ ;
@@ -120,6 +133,7 @@ private function setup_globals() {
120
133
private function includes () {
121
134
require ( $ this ->includes_dir . 'buddymeet-actions.php ' );
122
135
require ( $ this ->includes_dir . 'buddymeet-functions.php ' );
136
+ require ( $ this ->includes_dir . 'buddymeet-jwt-class.php ' );
123
137
124
138
//TODO CHECK ADMIN INTERFACES
125
139
/*if( is_admin() ){
@@ -179,7 +193,25 @@ public function display_admin_menu_page(){ ?>
179
193
<table class="form-table">
180
194
<tr>
181
195
<th scope="row"><?php echo __ ( 'Default Jitsi Domain ' , 'buddymeet ' ); ?> </th>
182
- <td><input type="text" name="buddymeet_jitsi_domain" value="<?php echo BuddyMeet::get_default_jitsi_domain (); ?> "/></td>
196
+ <td><input type="text" style="width: 80%" name="buddymeet_jitsi_domain" value="<?php echo BuddyMeet::get_default_jitsi_domain (); ?> "/></td>
197
+ </tr>
198
+ <tr>
199
+ <th scope="row"><?php echo __ ( 'Application ID ' , 'buddymeet ' ); ?> </th>
200
+ <td><input style="width: 80%" type="text" name="buddymeet_jitsi_appid" value="<?php echo get_option ('buddymeet_jitsi_appid ' , "" ); ?> "/></td>
201
+ </tr>
202
+ <tr>
203
+ <th scope="row"><?php echo __ ( 'Key ID ' , 'buddymeet ' ); ?> </th>
204
+ <td>
205
+ <input style="width: 80%" type="text" name="buddymeet_jitsi_apikeyid" value="<?php echo get_option ('buddymeet_jitsi_apikeyid ' , "" ); ?> "/>
206
+ <p class="description"> <?php esc_html_e ( 'For the 8x8.vc domain, enter your API Key ID here. For self‑hosted servers, you may enter any value. ' , 'buddymeet ' ); ?> </p>
207
+ </td>
208
+ </tr>
209
+ <tr>
210
+ <th scope="row"><?php echo __ ( 'Private Key ' , 'buddymeet ' ); ?> </th>
211
+ <td>
212
+ <textarea style="width: 80%;" rows="10" name="buddymeet_jitsi_privatekey" placeholder="<?php echo get_option ( 'buddymeet_jitsi_privatekey ' , '' ) ? esc_attr__ ( '************************************** (For security reasons the private key is not displayed) ' , 'buddymeet ' ) : '' ;?> "></textarea>
213
+ <p class="description"> <?php esc_html_e ( 'Paste your PEM‑encoded private key here to update it. Leave blank to keep the current key. ' , 'buddymeet ' ); ?> </p>
214
+ </td>
183
215
</tr>
184
216
</table>
185
217
<?php submit_button (); ?>
@@ -188,6 +220,19 @@ public function display_admin_menu_page(){ ?>
188
220
189
221
public function register_settings () {
190
222
register_setting ( 'buddymeet-settings ' , 'buddymeet_jitsi_domain ' );
223
+ register_setting ( 'buddymeet-settings ' , 'buddymeet_jitsi_appid ' );
224
+ register_setting ( 'buddymeet-settings ' , 'buddymeet_jitsi_apikeyid ' );
225
+ register_setting ( 'buddymeet-settings ' , 'buddymeet_jitsi_privatekey ' );
226
+ register_setting ( 'buddymeet-settings ' , 'buddymeet_jitsi_privatekey ' ,
227
+ ['sanitize_callback ' => array ($ this , 'buddymeet_sanitize_privatekey ' ) ]);
228
+ }
229
+
230
+ public function buddymeet_sanitize_privatekey ( $ new_value ) {
231
+ if ( trim ( $ new_value ) === '' ) {
232
+ return get_option ( 'buddymeet_jitsi_privatekey ' , '' );
233
+ }
234
+
235
+ return $ new_value ;
191
236
}
192
237
193
238
public function set_default_groups_nav () {
@@ -257,7 +302,7 @@ public function enqueue_scripts(){
257
302
));
258
303
259
304
$ handle = 'buddymeet-jitsi-js ' ;
260
- wp_enqueue_script ( $ handle , "https://8x8.vc/external_api.js " , array (), buddymeet_get_version (), true );
305
+ wp_enqueue_script ( $ handle , "https://8x8.vc/libs/ external_api.min .js " , array (), buddymeet_get_version (), true );
261
306
}
262
307
}
263
308
@@ -439,12 +484,31 @@ public function add_shortcode($params) {
439
484
return esc_js ($ item );
440
485
}, $ params );
441
486
487
+ $ app_id = get_option ('buddymeet_jitsi_appid ' , "" );
488
+ $ key_id = get_option ('buddymeet_jitsi_apikeyid ' , "" );
489
+ $ private_key = get_option ('buddymeet_jitsi_privatekey ' , "" );
490
+ $ jwt_generator = new BuddyMeet_JWT ($ app_id , $ key_id , $ private_key );
491
+
492
+ $ user_data = [
493
+ 'id ' => isset ($ params ['user_id ' ]) ? $ params ['user_id ' ] : '' ,
494
+ 'name ' => isset ($ params ['user ' ]) ? $ params ['user ' ] : '' ,
495
+ 'avatar ' => isset ($ params ['avatar ' ]) ? $ params ['avatar ' ] : '' ,
496
+ 'email ' => isset ($ params ['email ' ]) ? $ params ['email ' ] : '' ,
497
+ ];
498
+
499
+ $ room_name = $ params ['room ' ];
500
+ $ jwt = $ jwt_generator ->generate_token ($ user_data , $ room_name );
501
+ error_log ($ jwt );
502
+ if (isset ($ jwt ) && isset ($ app_id )) {
503
+ $ room_name = $ app_id . '/ ' . $ room_name ;
504
+ }
505
+
442
506
$ script = sprintf (
443
507
$ this ->get_jitsi_init_template (),
444
508
$ params ['domain ' ],
445
509
$ params ['settings ' ],
446
510
$ params ['toolbar ' ],
447
- $ params [ ' room ' ] ,
511
+ $ room_name ,
448
512
$ params ['width ' ],
449
513
$ params ['height ' ],
450
514
$ params ['parent_node ' ],
@@ -461,7 +525,8 @@ public function add_shortcode($params) {
461
525
isset ($ params ['avatar ' ]) ? $ params ['avatar ' ] : '' ,
462
526
isset ($ params ['password ' ]) ? $ params ['password ' ] : '' ,
463
527
$ hangoutMessage ,
464
- $ params ['mobile_open_in_browser ' ] === "true " || $ params ['mobile_open_in_browser ' ] === true ? 1 : 0
528
+ $ params ['mobile_open_in_browser ' ] === "true " || $ params ['mobile_open_in_browser ' ] === true ? 1 : 0 ,
529
+ $ jwt
465
530
);
466
531
467
532
if (wp_doing_ajax ()){
@@ -470,7 +535,7 @@ public function add_shortcode($params) {
470
535
echo '<script> ' . $ script . '</script> ' ;
471
536
} else {
472
537
$ handle = "buddymeet-jitsi-js " ;
473
- wp_enqueue_script ($ handle , "https://8x8.vc/external_api.js " , array (), buddymeet_get_version (), true );
538
+ wp_enqueue_script ($ handle , "https://8x8.vc/libs/ external_api.min .js " , array (), buddymeet_get_version (), true );
474
539
wp_add_inline_script ($ handle , $ script );
475
540
}
476
541
@@ -486,6 +551,7 @@ public function get_jitsi_init_template(){
486
551
width: "%5$s",
487
552
height: %6$d,
488
553
parentNode: document.querySelector("%7$s"),
554
+ jwt: "%22$s",
489
555
configOverwrite: {
490
556
startAudioOnly: %8$b === 1,
491
557
defaultLanguage: "%9$s",
@@ -533,9 +599,15 @@ public function buddymeet_post_settings($settings){
533
599
if ($ post && has_shortcode ($ post ->post_content , buddymeet_get_slug ())) {
534
600
$ user = wp_get_current_user ();
535
601
if ($ user ->exists ()) {
602
+ if (!array_key_exists ('user_id ' , $ settings )) {
603
+ $ extra ['user_id ' ] = $ user ->ID ;
604
+ }
536
605
if (!array_key_exists ('user ' , $ settings )) {
537
606
$ extra ['user ' ] = $ user ->display_name ;
538
607
}
608
+ if (!array_key_exists ('email ' , $ settings )) {
609
+ $ extra ['email ' ] = $ user ->user_email ;
610
+ }
539
611
if (!array_key_exists ('avatar ' , $ settings )) {
540
612
$ extra ['avatar ' ] = get_avatar_url ($ user ->ID );
541
613
}
0 commit comments