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
path: root/nbxmpp
diff options
context:
space:
mode:
authorPhilipp Hörist <philipp@hoerist.com>2019-08-28 23:33:18 +0300
committerPhilipp Hörist <philipp@hoerist.com>2019-08-28 23:33:18 +0300
commit3d567111ee1d27b01096fbf4723425a66bc1545f (patch)
tree1ea62f09433c6fb0189899d46b8272b360e9af2c /nbxmpp
parent10fe8109cf6681b58824ccbe9abf686d565213c8 (diff)
MUC: Improve voice request
- Validate JID on incoming voice requests - Add more data to VoiceRequest - Add approve_voice_request()
Diffstat (limited to 'nbxmpp')
-rw-r--r--nbxmpp/modules/muc.py20
-rw-r--r--nbxmpp/structs.py2
2 files changed, 20 insertions, 2 deletions
diff --git a/nbxmpp/modules/muc.py b/nbxmpp/modules/muc.py
index 7c99f91..297a6f4 100644
--- a/nbxmpp/modules/muc.py
+++ b/nbxmpp/modules/muc.py
@@ -33,6 +33,7 @@ from nbxmpp.protocol import Message
from nbxmpp.protocol import DataForm
from nbxmpp.protocol import DataField
from nbxmpp.protocol import isResultNode
+from nbxmpp.protocol import NodeProcessed
from nbxmpp.simplexml import Node
from nbxmpp.structs import StanzaHandler
from nbxmpp.const import InviteType
@@ -301,11 +302,28 @@ class MUC:
except KeyError:
return
- properties.voice_request = VoiceRequest(form=data_form)
+ nick = data_form['muc#roomnick'].value
+
+ try:
+ jid = JID(data_form['muc#jid'].value)
+ except Exception:
+ log.warning('Invalid JID on voice request')
+ log.warning(stanza)
+ raise NodeProcessed
+
+ properties.voice_request = VoiceRequest(jid=jid,
+ nick=nick,
+ form=data_form)
properties.from_muc = True
properties.muc_jid = properties.jid.copy()
properties.muc_jid.setBare()
+ def approve_voice_request(self, muc_jid, voice_request):
+ form = voice_request.form
+ form.type_ = 'submit'
+ form['muc#request_allow'].value = True
+ self._client.send(Message(to=muc_jid, payload=form))
+
@call_on_response('_affiliation_received')
def get_affiliation(self, jid, affiliation):
iq = Iq(typ='get', to=jid, queryNS=NS_MUC_ADMIN)
diff --git a/nbxmpp/structs.py b/nbxmpp/structs.py
index 25adca2..5a211b9 100644
--- a/nbxmpp/structs.py
+++ b/nbxmpp/structs.py
@@ -48,7 +48,7 @@ CaptchaData = namedtuple('CaptchaData', 'form bob_data')
BobData = namedtuple('BobData', 'algo hash_ max_age data cid type')
-VoiceRequest = namedtuple('VoiceRequest', 'form')
+VoiceRequest = namedtuple('VoiceRequest', 'form jid nick')
MucUserData = namedtuple('MucUserData', 'affiliation jid nick role actor reason')
MucUserData.__new__.__defaults__ = (None, None, None, None, None)