From 3d567111ee1d27b01096fbf4723425a66bc1545f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20H=C3=B6rist?= Date: Wed, 28 Aug 2019 22:33:18 +0200 Subject: MUC: Improve voice request - Validate JID on incoming voice requests - Add more data to VoiceRequest - Add approve_voice_request() --- nbxmpp/modules/muc.py | 20 +++++++++++++++++++- nbxmpp/structs.py | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) (limited to 'nbxmpp') 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) -- cgit v1.2.3