Browse Source

feat(xmpp): Parses permissions extension from self-presence.

dev0
damencho 6 months ago
parent
commit
31b27f9685

+ 2
- 0
JitsiConferenceEventManager.js View File

@@ -51,6 +51,8 @@ JitsiConferenceEventManager.prototype.setupChatRoomListeners = function() {
51 51
         }
52 52
     });
53 53
 
54
+    this.chatRoomForwarder.forward(XMPPEvents.PERMISSIONS_RECEIVED, JitsiConferenceEvents.PERMISSIONS_RECEIVED);
55
+
54 56
     chatRoom.addListener(XMPPEvents.AUDIO_MUTED_BY_FOCUS,
55 57
         actor => {
56 58
             // TODO: Add a way to differentiate between commands which caused

+ 2
- 0
JitsiConferenceEvents.spec.ts View File

@@ -34,6 +34,7 @@ describe( "/JitsiConferenceEvents members", () => {
34 34
         KICKED,
35 35
         PARTICIPANT_KICKED,
36 36
         PARTICIPANT_SOURCE_UPDATED,
37
+        PERMISSIONS_RECEIVED,
37 38
         LAST_N_ENDPOINTS_CHANGED,
38 39
         FORWARDED_SOURCES_CHANGED,
39 40
         LOCK_STATE_CHANGED,
@@ -119,6 +120,7 @@ describe( "/JitsiConferenceEvents members", () => {
119 120
         expect( KICKED ).toBe( 'conference.kicked' );
120 121
         expect( PARTICIPANT_KICKED ).toBe( 'conference.participant_kicked' );
121 122
         expect( PARTICIPANT_SOURCE_UPDATED ).toBe( 'conference.participant_source_updated' );
123
+        expect( PERMISSIONS_RECEIVED ).toBe( 'conference.permissions_received' );
122 124
         expect( LAST_N_ENDPOINTS_CHANGED ).toBe( 'conference.lastNEndpointsChanged' );
123 125
         expect( FORWARDED_SOURCES_CHANGED ).toBe( 'conference.forwardedSourcesChanged' );
124 126
         expect( LOCK_STATE_CHANGED ).toBe( 'conference.lock_state_changed' );

+ 6
- 0
JitsiConferenceEvents.ts View File

@@ -323,6 +323,11 @@ export enum JitsiConferenceEvents {
323 323
      */
324 324
     PARTICIPANT_SOURCE_UPDATED = 'conference.participant_source_updated',
325 325
 
326
+    /**
327
+     * Indicates that the permissions for the local participant were updated.
328
+     */
329
+    PERMISSIONS_RECEIVED = 'conference.permissions_received',
330
+
326 331
     /**
327 332
      * Indicates that phone number changed.
328 333
      */
@@ -560,6 +565,7 @@ export const NON_PARTICIPANT_MESSAGE_RECEIVED = JitsiConferenceEvents.NON_PARTIC
560 565
 export const P2P_STATUS = JitsiConferenceEvents.P2P_STATUS;
561 566
 export const PARTICIPANT_KICKED = JitsiConferenceEvents.PARTICIPANT_KICKED;
562 567
 export const PARTICIPANT_SOURCE_UPDATED = JitsiConferenceEvents.PARTICIPANT_SOURCE_UPDATED;
568
+export const PERMISSIONS_RECEIVED = JitsiConferenceEvents.PERMISSIONS_RECEIVED;
563 569
 export const PRIVATE_MESSAGE_RECEIVED = JitsiConferenceEvents.PRIVATE_MESSAGE_RECEIVED;
564 570
 export const PARTCIPANT_FEATURES_CHANGED = JitsiConferenceEvents.PARTCIPANT_FEATURES_CHANGED;
565 571
 export const PARTICIPANT_PROPERTY_CHANGED = JitsiConferenceEvents.PARTICIPANT_PROPERTY_CHANGED;

+ 16
- 0
modules/xmpp/ChatRoom.js View File

@@ -676,6 +676,22 @@ export default class ChatRoom extends Listenable {
676 676
                 // meeting Id if any
677 677
                 !this.options.disableDiscoInfo && this.discoRoomInfo();
678 678
             }
679
+
680
+            if (xElement && $(xElement).find('>status[code="110"]').length) {
681
+                // let's check for some backend forced permissions
682
+
683
+                const permissions = $(pres).find('>permissions[xmlns="http://jitsi.org/jitmeet"]>p');
684
+
685
+                if (permissions.length) {
686
+                    const permissionsMap = {};
687
+
688
+                    permissions.each((idx, p) => {
689
+                        permissionsMap[p.getAttribute('name')] = p.getAttribute('val');
690
+                    });
691
+
692
+                    this.eventEmitter.emit(XMPPEvents.PERMISSIONS_RECEIVED, permissionsMap);
693
+                }
694
+            }
679 695
         } else if (jid === undefined) {
680 696
             logger.info('Ignoring member with undefined JID');
681 697
         } else if (this.members[from] === undefined) {

+ 5
- 0
service/xmpp/XMPPEvents.ts View File

@@ -245,6 +245,11 @@ export enum XMPPEvents {
245 245
 
246 246
     PASSWORD_REQUIRED = 'xmpp.password_required',
247 247
 
248
+    /**
249
+     * Event fired when we receive a self-presence with permissions.
250
+     */
251
+    PERMISSIONS_RECEIVED = 'xmpp.permissions_received',
252
+
248 253
     /**
249 254
      * Indicates that phone number changed.
250 255
      */

Loading…
Cancel
Save