diff options
author | Philipp Hörist <philipp@hoerist.com> | 2019-08-28 23:33:18 +0300 |
---|---|---|
committer | Philipp Hörist <philipp@hoerist.com> | 2019-08-28 23:33:18 +0300 |
commit | 3d567111ee1d27b01096fbf4723425a66bc1545f (patch) | |
tree | 1ea62f09433c6fb0189899d46b8272b360e9af2c | |
parent | 10fe8109cf6681b58824ccbe9abf686d565213c8 (diff) |
MUC: Improve voice request
- Validate JID on incoming voice requests
- Add more data to VoiceRequest
- Add approve_voice_request()
-rw-r--r-- | nbxmpp/modules/muc.py | 20 | ||||
-rw-r--r-- | nbxmpp/structs.py | 2 |
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) |