diff options
author | Lance Stout <lancestout@gmail.com> | 2013-02-08 09:34:26 -0800 |
---|---|---|
committer | Lance Stout <lancestout@gmail.com> | 2013-02-08 09:36:51 -0800 |
commit | 79914fb56ba68153f2fcf779bf7be0be4e25f0a7 (patch) | |
tree | b888be8dd63232186e58fb0ffb5a19dfa70657e9 /sleekxmpp/plugins/xep_0077/register.py | |
parent | 9165cbf7f6839ee8ba2a4514b297f27fb019098a (diff) | |
download | slixmpp-79914fb56ba68153f2fcf779bf7be0be4e25f0a7.tar.gz slixmpp-79914fb56ba68153f2fcf779bf7be0be4e25f0a7.tar.bz2 slixmpp-79914fb56ba68153f2fcf779bf7be0be4e25f0a7.tar.xz slixmpp-79914fb56ba68153f2fcf779bf7be0be4e25f0a7.zip |
Add option to XEP-0077 plugin to force registration attempts.
Diffstat (limited to 'sleekxmpp/plugins/xep_0077/register.py')
-rw-r--r-- | sleekxmpp/plugins/xep_0077/register.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/sleekxmpp/plugins/xep_0077/register.py b/sleekxmpp/plugins/xep_0077/register.py index d4da21a5..ee07548b 100644 --- a/sleekxmpp/plugins/xep_0077/register.py +++ b/sleekxmpp/plugins/xep_0077/register.py @@ -7,6 +7,7 @@ """ import logging +import ssl from sleekxmpp.stanza import StreamFeatures, Iq from sleekxmpp.xmlstream import register_stanza_plugin, JID @@ -29,6 +30,7 @@ class XEP_0077(BasePlugin): stanza = stanza default_config = { 'create_account': True, + 'force_registration': False, 'order': 50 } @@ -45,10 +47,29 @@ class XEP_0077(BasePlugin): register_stanza_plugin(Register, self.xmpp['xep_0004'].stanza.Form) register_stanza_plugin(Register, self.xmpp['xep_0066'].stanza.OOB) + self.xmpp.add_event_handler('connected', self._force_registration) + def plugin_end(self): if not self.xmpp.is_component: self.xmpp.unregister_feature('register', self.order) + def _force_registration(self, event): + if self.force_registration: + self.xmpp.add_filter('in', self._force_stream_feature) + + def _force_stream_feature(self, stanza): + if isinstance(stanza, StreamFeatures): + if self.xmpp.use_tls or self.xmpp.use_ssl: + if 'starttls' not in self.xmpp.features: + return stanza + elif not isinstance(self.xmpp.socket, ssl.SSLSocket): + return stanza + if 'mechanisms' not in self.xmpp.features: + log.debug('Forced adding in-band registration stream feature') + stanza.enable('register') + self.xmpp.del_filter('in', self._force_stream_feature) + return stanza + def _handle_register_feature(self, features): if 'mechanisms' in self.xmpp.features: # We have already logged in with an account |