1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
"""
SleekXMPP: The Sleek XMPP Library
Copyright (C) 2012 Nathanael C. Fritz, Lance J.T. Stout
This file is part of SleekXMPP.
See the file LICENSE for copying permission.
"""
import logging
import sleekxmpp
from sleekxmpp.stanza import StreamFeatures, Iq
from sleekxmpp.xmlstream import register_stanza_plugin, JID
from sleekxmpp.plugins.base import base_plugin
from sleekxmpp.plugins.xep_0077 import stanza, Register, RegisterFeature
log = logging.getLogger(__name__)
class xep_0077(base_plugin):
"""
XEP-0077: In-Band Registration
"""
def plugin_init(self):
self.xep = '0077'
self.description = 'In-Band Registration'
self.stanza = stanza
self.create_account = self.config.get('create_account', True)
register_stanza_plugin(StreamFeatures, RegisterFeature)
register_stanza_plugin(Iq, Register)
if self.xmpp.is_component:
pass
else:
self.xmpp.register_feature('register',
self._handle_register_feature,
restart=False,
order=self.config.get('order', 50))
def post_init(self):
base_plugin.post_init(self)
if 'xep_0004' in self.xmpp.plugin:
register_stanza_plugin(Register, self.xmpp['xep_0004'].stanza.Form)
if 'xep_0066' in self.xmpp.plugin:
register_stanza_plugin(Register, self.xmpp['xep_0066'].stanza.OOB)
def _handle_register_feature(self, features):
if 'mechanisms' in self.xmpp.features:
# We have already logged in with an account
return False
if self.create_account:
form = self.get_registration()
self.xmpp.event('register', form, direct=True)
return True
return False
def get_registration(self, jid=None, ifrom=None, block=True,
timeout=None, callback=None):
iq = self.xmpp.Iq()
iq['type'] = 'get'
iq['to'] = jid
iq['from'] = ifrom
iq.enable('register')
return iq.send(block=block, timeout=timeout, callback=callback, now=True)
def cancel_registration(self, jid=None, ifrom=None, block=True,
timeout=None, callback=None):
iq = self.xmpp.Iq()
iq['type'] = 'set'
iq['to'] = jid
iq['from'] = ifrom
iq['register']['remove'] = True
return iq.send(block=block, timeout=timeout, callback=callback)
def change_password(self, password, jid=None, ifrom=None, block=True,
timeout=None, callback=None):
iq= self.xmpp.Iq()
iq['type'] = 'set'
iq['to'] = jid
iq['from'] = ifrom
if self.xmpp.is_component:
ifrom = JID(ifrom)
iq['register']['username'] = ifrom.user
else:
iq['register']['username'] = self.xmpp.boundjid.user
iq['register']['password'] = password
return iq.send(block=block, timeout=timeout, callback=callback)
|