Add option to XEP-0077 plugin to force registration attempts.
This commit is contained in:
parent
9165cbf7f6
commit
79914fb56b
@ -51,7 +51,7 @@ class RegisterBot(sleekxmpp.ClientXMPP):
|
|||||||
|
|
||||||
# The register event provides an Iq result stanza with
|
# The register event provides an Iq result stanza with
|
||||||
# a registration form from the server. This may include
|
# a registration form from the server. This may include
|
||||||
# the basic registration fields, a data form, an
|
# the basic registration fields, a data form, an
|
||||||
# out-of-band URL, or any combination. For more advanced
|
# out-of-band URL, or any combination. For more advanced
|
||||||
# cases, you will need to examine the fields provided
|
# cases, you will need to examine the fields provided
|
||||||
# and respond accordingly. SleekXMPP provides plugins
|
# and respond accordingly. SleekXMPP provides plugins
|
||||||
@ -104,7 +104,7 @@ class RegisterBot(sleekxmpp.ClientXMPP):
|
|||||||
resp.send(now=True)
|
resp.send(now=True)
|
||||||
logging.info("Account created for %s!" % self.boundjid)
|
logging.info("Account created for %s!" % self.boundjid)
|
||||||
except IqError as e:
|
except IqError as e:
|
||||||
logging.error("Could not register account: %s" %
|
logging.error("Could not register account: %s" %
|
||||||
e.iq['error']['text'])
|
e.iq['error']['text'])
|
||||||
self.disconnect()
|
self.disconnect()
|
||||||
except IqTimeout:
|
except IqTimeout:
|
||||||
@ -153,6 +153,10 @@ if __name__ == '__main__':
|
|||||||
xmpp.register_plugin('xep_0066') # Out-of-band Data
|
xmpp.register_plugin('xep_0066') # Out-of-band Data
|
||||||
xmpp.register_plugin('xep_0077') # In-band Registration
|
xmpp.register_plugin('xep_0077') # In-band Registration
|
||||||
|
|
||||||
|
# Some servers don't advertise support for inband registration, even
|
||||||
|
# though they allow it. If this applies to your server, use:
|
||||||
|
# xmpp['xep_0077'].force_registration = True
|
||||||
|
|
||||||
# If you are working with an OpenFire server, you may need
|
# If you are working with an OpenFire server, you may need
|
||||||
# to adjust the SSL version used:
|
# to adjust the SSL version used:
|
||||||
# xmpp.ssl_version = ssl.PROTOCOL_SSLv3
|
# xmpp.ssl_version = ssl.PROTOCOL_SSLv3
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
import ssl
|
||||||
|
|
||||||
from sleekxmpp.stanza import StreamFeatures, Iq
|
from sleekxmpp.stanza import StreamFeatures, Iq
|
||||||
from sleekxmpp.xmlstream import register_stanza_plugin, JID
|
from sleekxmpp.xmlstream import register_stanza_plugin, JID
|
||||||
@ -29,6 +30,7 @@ class XEP_0077(BasePlugin):
|
|||||||
stanza = stanza
|
stanza = stanza
|
||||||
default_config = {
|
default_config = {
|
||||||
'create_account': True,
|
'create_account': True,
|
||||||
|
'force_registration': False,
|
||||||
'order': 50
|
'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_0004'].stanza.Form)
|
||||||
register_stanza_plugin(Register, self.xmpp['xep_0066'].stanza.OOB)
|
register_stanza_plugin(Register, self.xmpp['xep_0066'].stanza.OOB)
|
||||||
|
|
||||||
|
self.xmpp.add_event_handler('connected', self._force_registration)
|
||||||
|
|
||||||
def plugin_end(self):
|
def plugin_end(self):
|
||||||
if not self.xmpp.is_component:
|
if not self.xmpp.is_component:
|
||||||
self.xmpp.unregister_feature('register', self.order)
|
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):
|
def _handle_register_feature(self, features):
|
||||||
if 'mechanisms' in self.xmpp.features:
|
if 'mechanisms' in self.xmpp.features:
|
||||||
# We have already logged in with an account
|
# We have already logged in with an account
|
||||||
|
Loading…
Reference in New Issue
Block a user