Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/python-nbxmpp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlovetox <philipp@hoerist.com>2020-04-05 16:32:06 +0300
committerlovetox <philipp@hoerist.com>2020-04-05 16:32:06 +0300
commit19d047e08a3e7cf3ac3e7a9d0c71637d8519ef78 (patch)
treecbbf7e0b7ab6e374eae6ba708b4886c7e998a527
parent0100dc908360d9b58a1396fab55c9bedb41e25c9 (diff)
MUC: Only force role/affiliation on presences
-rw-r--r--nbxmpp/modules/muc.py33
1 files changed, 19 insertions, 14 deletions
diff --git a/nbxmpp/modules/muc.py b/nbxmpp/modules/muc.py
index b9bd0e2..2a3d473 100644
--- a/nbxmpp/modules/muc.py
+++ b/nbxmpp/modules/muc.py
@@ -178,7 +178,8 @@ class MUC(BaseModule):
muc_user = stanza.getTag('x', namespace=NS_MUC_USER)
if muc_user is not None:
try:
- properties.muc_user = self._parse_muc_user(muc_user)
+ properties.muc_user = self._parse_muc_user(muc_user,
+ is_presence=False)
except StanzaMalformed as error:
self._log.warning(error)
self._log.warning(stanza)
@@ -540,7 +541,7 @@ class MUC(BaseModule):
return CommonResult(jid=stanza.getFrom())
@staticmethod
- def _parse_muc_user(muc_user):
+ def _parse_muc_user(muc_user, is_presence=True):
item = muc_user.getTag('item')
if item is None:
return None
@@ -548,22 +549,26 @@ class MUC(BaseModule):
item_dict = item.getAttrs()
role = item_dict.get('role')
- if role is None:
- raise StanzaMalformed('role attr missing')
+ if role is not None:
+ try:
+ role = Role(role)
+ except ValueError:
+ raise StanzaMalformed('invalid role %s' % role)
- try:
- role = Role(role)
- except ValueError:
- raise StanzaMalformed('invalid role %s' % role)
+ elif is_presence:
+ # role attr MUST be included in all presence broadcasts
+ raise StanzaMalformed('role attr missing')
affiliation = item_dict.get('affiliation')
- if affiliation is None:
- raise StanzaMalformed('affiliation attr missing')
+ if affiliation is not None:
+ try:
+ affiliation = Affiliation(affiliation)
+ except ValueError:
+ raise StanzaMalformed('invalid affiliation %s' % affiliation)
- try:
- affiliation = Affiliation(affiliation)
- except ValueError:
- raise StanzaMalformed('invalid affiliation %s' % affiliation)
+ elif is_presence:
+ # affiliation attr MUST be included in all presence broadcasts
+ raise StanzaMalformed('affiliation attr missing')
jid = item_dict.get('jid')
if jid is not None: