浏览代码

Newly generated build

JC Brand 7 年之前
父节点
当前提交
5d64f4c704
共有 1 个文件被更改,包括 93 次插入60 次删除
  1. 93 60
      dist/converse.js

+ 93 - 60
dist/converse.js

@@ -76507,13 +76507,39 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
           return _converse.connection.sendIQ(iq, onSuccess, onError);
         },
 
+        verifyRoles(roles) {
+          const me = this.model.occupants.findWhere({
+            'jid': _converse.bare_jid
+          });
+
+          if (!_.includes(roles, me.get('role'))) {
+            this.showErrorMessage(__(`Forbidden: you do not have the necessary role in order to do that.`));
+            return false;
+          }
+
+          return true;
+        },
+
+        verifyAffiliations(affiliations) {
+          const me = this.model.occupants.findWhere({
+            'jid': _converse.bare_jid
+          });
+
+          if (!_.includes(affiliations, me.get('affiliation'))) {
+            this.showErrorMessage(__(`Forbidden: you do not have the necessary affiliation in order to do that.`));
+            return false;
+          }
+
+          return true;
+        },
+
         validateRoleChangeCommand(command, args) {
           /* Check that a command to change a groupchat user's role or
            * affiliation has anough arguments.
            */
           // TODO check if first argument is valid
           if (args.length < 1 || args.length > 2) {
-            this.showErrorMessage(__('Error: the "%1$s" command takes two arguments, the user\'s nickname and optionally a reason.', command), true);
+            this.showErrorMessage(__('Error: the "%1$s" command takes two arguments, the user\'s nickname and optionally a reason.', command));
             return false;
           }
 
@@ -76523,7 +76549,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
         onCommandError(err) {
           _converse.log(err, Strophe.LogLevel.FATAL);
 
-          this.showErrorMessage(__("Sorry, an error happened while running the command. Check your browser's developer console for details."), true);
+          this.showErrorMessage(__("Sorry, an error happened while running the command. Check your browser's developer console for details."));
         },
 
         parseMessageForCommands(text) {
@@ -76543,7 +76569,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
 
           switch (command) {
             case 'admin':
-              if (!this.validateRoleChangeCommand(command, args)) {
+              if (!this.verifyAffiliations(['owner']) || !this.validateRoleChangeCommand(command, args)) {
                 break;
               }
 
@@ -76554,7 +76580,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
               break;
 
             case 'ban':
-              if (!this.validateRoleChangeCommand(command, args)) {
+              if (!this.verifyAffiliations(['owner', 'admin']) || !this.validateRoleChangeCommand(command, args)) {
                 break;
               }
 
@@ -76565,7 +76591,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
               break;
 
             case 'deop':
-              if (!this.validateRoleChangeCommand(command, args)) {
+              if (!this.verifyAffiliations(['admin', 'owner']) || !this.validateRoleChangeCommand(command, args)) {
                 break;
               }
 
@@ -76577,7 +76603,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
               break;
 
             case 'kick':
-              if (!this.validateRoleChangeCommand(command, args)) {
+              if (!this.verifyRoles(['moderator']) || !this.validateRoleChangeCommand(command, args)) {
                 break;
               }
 
@@ -76585,7 +76611,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
               break;
 
             case 'mute':
-              if (!this.validateRoleChangeCommand(command, args)) {
+              if (!this.verifyRoles(['moderator']) || !this.validateRoleChangeCommand(command, args)) {
                 break;
               }
 
@@ -76593,17 +76619,32 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
               break;
 
             case 'member':
-              if (!this.validateRoleChangeCommand(command, args)) {
+              {
+                if (!this.verifyAffiliations(['admin', 'owner']) || !this.validateRoleChangeCommand(command, args)) {
+                  break;
+                }
+
+                const occupant = this.model.occupants.findWhere({
+                  'nick': args[0]
+                });
+
+                if (!occupant) {
+                  this.showErrorMessage(__(`Error: Can't find a groupchat participant with the nickname "${args[0]}"`));
+                  break;
+                }
+
+                this.model.setAffiliation('member', [{
+                  'jid': occupant.get('jid'),
+                  'reason': args[1]
+                }]).then(() => this.model.occupants.fetchMembers(), err => this.onCommandError(err));
                 break;
               }
 
-              this.model.setAffiliation('member', [{
-                'jid': args[0],
-                'reason': args[1]
-              }]).then(() => this.model.occupants.fetchMembers(), err => this.onCommandError(err));
-              break;
-
             case 'nick':
+              if (!this.verifyRoles(['visitor', 'participant', 'moderator'])) {
+                break;
+              }
+
               _converse.connection.send($pres({
                 from: _converse.connection.jid,
                 to: this.model.getRoomJIDAndNick(match[2]),
@@ -76613,7 +76654,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
               break;
 
             case 'owner':
-              if (!this.validateRoleChangeCommand(command, args)) {
+              if (!this.verifyAffiliations(['owner']) || !this.validateRoleChangeCommand(command, args)) {
                 break;
               }
 
@@ -76624,7 +76665,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
               break;
 
             case 'op':
-              if (!this.validateRoleChangeCommand(command, args)) {
+              if (!this.verifyAffiliations(['admin', 'owner']) || !this.validateRoleChangeCommand(command, args)) {
                 break;
               }
 
@@ -76632,7 +76673,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
               break;
 
             case 'revoke':
-              if (!this.validateRoleChangeCommand(command, args)) {
+              if (!this.verifyAffiliations(['admin', 'owner']) || !this.validateRoleChangeCommand(command, args)) {
                 break;
               }
 
@@ -76655,7 +76696,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
               break;
 
             case 'voice':
-              if (!this.validateRoleChangeCommand(command, args)) {
+              if (!this.verifyRoles(['moderator']) || !this.validateRoleChangeCommand(command, args)) {
                 break;
               }
 
@@ -77712,8 +77753,9 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
         $pres = _converse$env.$pres,
         b64_sha1 = _converse$env.b64_sha1,
         sizzle = _converse$env.sizzle,
-        _ = _converse$env._,
-        moment = _converse$env.moment; // Add Strophe Namespaces
+        f = _converse$env.f,
+        moment = _converse$env.moment,
+        _ = _converse$env._; // Add Strophe Namespaces
 
   Strophe.addNamespace('MUC_ADMIN', Strophe.NS.MUC + "#admin");
   Strophe.addNamespace('MUC_OWNER', Strophe.NS.MUC + "#owner");
@@ -78202,19 +78244,16 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
            *  A promise which resolves once the list has been
            *  retrieved.
            */
-          return new Promise((resolve, reject) => {
-            affiliation = affiliation || 'member';
-            const iq = $iq({
-              to: this.get('jid'),
-              type: "get"
-            }).c("query", {
-              xmlns: Strophe.NS.MUC_ADMIN
-            }).c("item", {
-              'affiliation': affiliation
-            });
-
-            _converse.connection.sendIQ(iq, resolve, reject);
+          affiliation = affiliation || 'member';
+          const iq = $iq({
+            to: this.get('jid'),
+            type: "get"
+          }).c("query", {
+            xmlns: Strophe.NS.MUC_ADMIN
+          }).c("item", {
+            'affiliation': affiliation
           });
+          return _converse.api.sendIQ(iq);
         },
 
         setAffiliation(affiliation, members) {
@@ -78443,11 +78482,9 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
             affiliations = [affiliations];
           }
 
-          return new Promise((resolve, reject) => {
-            const promises = _.map(affiliations, _.partial(this.requestMemberList.bind(this)));
+          const promises = _.map(affiliations, _.partial(this.requestMemberList.bind(this)));
 
-            Promise.all(promises).then(_.flow(u.marshallAffiliationIQs, resolve), _.flow(u.marshallAffiliationIQs, resolve));
-          });
+          return Promise.all(promises).then(iq => u.marshallAffiliationIQs(iq), iq => u.marshallAffiliationIQs(iq));
         },
 
         updateMemberLists(members, affiliations, deltaFunc) {
@@ -78834,27 +78871,15 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
         },
 
         fetchMembers() {
-          const old_jids = _.uniq(_.concat(_.map(this.where({
-            'affiliation': 'admin'
-          }), item => item.get('jid')), _.map(this.where({
-            'affiliation': 'member'
-          }), item => item.get('jid')), _.map(this.where({
-            'affiliation': 'owner'
-          }), item => item.get('jid'))));
-
-          this.chatroom.getJidsWithAffiliations(['member', 'owner', 'admin']).then(jids => {
-            _.each(_.difference(old_jids, jids), removed_jid => {
-              // Remove absent occupants who've been removed from
-              // the members lists.
-              if (removed_jid === _converse.bare_jid) {
-                return;
-              }
-
-              const occupant = this.findOccupant({
-                'jid': removed_jid
-              });
+          this.chatroom.getJidsWithAffiliations(['member', 'owner', 'admin']).then(new_members => {
+            const new_jids = new_members.map(m => m.jid).filter(m => !_.isUndefined(m)),
+                  new_nicks = new_members.map(m => !m.jid && m.nick || undefined).filter(m => !_.isUndefined(m)),
+                  removed_members = this.filter(m => {
+              return f.includes(m.get('affiliation'), ['admin', 'member', 'owner']) && !f.includes(m.get('nick'), new_nicks) && !f.includes(m.get('jid'), new_jids);
+            });
 
-              if (!occupant) {
+            _.each(removed_members, occupant => {
+              if (occupant.get('jid') === _converse.bare_jid) {
                 return;
               }
 
@@ -78863,10 +78888,18 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
               }
             });
 
-            _.each(jids, attrs => {
-              const occupant = this.findOccupant({
-                'jid': attrs.jid
-              });
+            _.each(new_members, attrs => {
+              let occupant;
+
+              if (attrs.jid) {
+                occupant = this.findOccupant({
+                  'jid': attrs.jid
+                });
+              } else {
+                occupant = this.findOccupant({
+                  'nick': attrs.nick
+                });
+              }
 
               if (occupant) {
                 occupant.save(attrs);