comparison src/plugins/plugin_xep_0077.py @ 2175:75002ac33801

plugin XEP-0077: added changePassword and removeRegistration methods
author Goffi <goffi@goffi.org>
date Thu, 09 Mar 2017 00:06:13 +0100
parents 545a1261ac3b
children 09cfec4d8d19
comparison
equal deleted inserted replaced
2174:0c32ff2f64c4 2175:75002ac33801
60 log.debug(_(u"Connection made with {server}".format(server=self.jid.host))) 60 log.debug(_(u"Connection made with {server}".format(server=self.jid.host)))
61 self.xmlstream.otherEntity = jid.JID(self.jid.host) 61 self.xmlstream.otherEntity = jid.JID(self.jid.host)
62 self.xmlstream.namespace = C.NS_CLIENT 62 self.xmlstream.namespace = C.NS_CLIENT
63 self.xmlstream.sendHeader() 63 self.xmlstream.sendHeader()
64 64
65 iq = xmlstream.IQ(self.xmlstream, 'set') 65 iq = XEP_0077.buildRegisterIQ(self.xmlstream, self.jid, self.password, self.email)
66 iq["to"] = self.jid.host
67 query_elt = iq.addElement(('jabber:iq:register', 'query'))
68 username_elt = query_elt.addElement('username')
69 username_elt.addContent(self.jid.user)
70 password_elt = query_elt.addElement('password')
71 password_elt.addContent(self.password)
72 if self.email is not None:
73 email_elt = query_elt.addElement('email')
74 email_elt.addContent(self.email)
75 d = iq.send(self.jid.host).addCallbacks(self.registrationCb, self.registrationEb) 66 d = iq.send(self.jid.host).addCallbacks(self.registrationCb, self.registrationEb)
76 d.chainDeferred(self.registered) 67 d.chainDeferred(self.registered)
77 68
78 def registrationCb(self, answer): 69 def registrationCb(self, answer):
79 log.debug(_(u"Registration answer: {}").format(answer.toXml())) 70 log.debug(_(u"Registration answer: {}").format(answer.toXml()))
91 log.info(_("Plugin XEP_0077 initialization")) 82 log.info(_("Plugin XEP_0077 initialization"))
92 self.host = host 83 self.host = host
93 host.bridge.addMethod("inBandRegister", ".plugin", in_sign='ss', out_sign='s', 84 host.bridge.addMethod("inBandRegister", ".plugin", in_sign='ss', out_sign='s',
94 method=self._inBandRegister, 85 method=self._inBandRegister,
95 async=True) 86 async=True)
87
88 @staticmethod
89 def buildRegisterIQ(xmlstream_, jid_, password, email=None):
90 iq_elt = xmlstream.IQ(xmlstream_, 'set')
91 iq_elt["to"] = jid_.host
92 query_elt = iq_elt.addElement(('jabber:iq:register', 'query'))
93 username_elt = query_elt.addElement('username')
94 username_elt.addContent(jid_.user)
95 password_elt = query_elt.addElement('password')
96 password_elt.addContent(password)
97 if email is not None:
98 email_elt = query_elt.addElement('email')
99 email_elt.addContent(email)
100 return iq_elt
96 101
97 def _regCb(self, answer, client, post_treat_cb): 102 def _regCb(self, answer, client, post_treat_cb):
98 """Called after the first get IQ""" 103 """Called after the first get IQ"""
99 try: 104 try:
100 query_elt = answer.elements(NS_REG, 'query').next() 105 query_elt = answer.elements(NS_REG, 'query').next()
154 reg_request["to"] = to_jid.full() 159 reg_request["to"] = to_jid.full()
155 reg_request.addElement('query', NS_REG) 160 reg_request.addElement('query', NS_REG)
156 d = reg_request.send(to_jid.full()).addCallbacks(self._regCb, self._regEb, callbackArgs=[client, post_treat_cb], errbackArgs=[client]) 161 d = reg_request.send(to_jid.full()).addCallbacks(self._regCb, self._regEb, callbackArgs=[client, post_treat_cb], errbackArgs=[client])
157 return d 162 return d
158 163
159 def registerNewAccount(self, client, jid_, password, email=None, host="127.0.0.1", port=C.XMPP_C2S_PORT): 164 def registerNewAccount(self, jid_, password, email=None, host="127.0.0.1", port=C.XMPP_C2S_PORT):
160 """register a new account on a XMPP server 165 """register a new account on a XMPP server
161 166
162 @param jid_(jid.JID): request jid to register 167 @param jid_(jid.JID): request jid to register
163 @param password(unicode): password of the account 168 @param password(unicode): password of the account
164 @param email(unicode): email of the account 169 @param email(unicode): email of the account
169 registered_d = authenticator.registered 174 registered_d = authenticator.registered
170 serverRegistrer = xmlstream.XmlStreamFactory(authenticator) 175 serverRegistrer = xmlstream.XmlStreamFactory(authenticator)
171 connector = reactor.connectTCP(host, port, serverRegistrer) 176 connector = reactor.connectTCP(host, port, serverRegistrer)
172 serverRegistrer.clientConnectionLost = lambda conn, reason: connector.disconnect() 177 serverRegistrer.clientConnectionLost = lambda conn, reason: connector.disconnect()
173 return registered_d 178 return registered_d
179
180 def changePassword(self, client, new_password):
181 iq_elt = self.buildRegisterIQ(client.xmlstream, client.jid, new_password)
182 return iq_elt.send(client.jid.host)
183
184 def removeRegistration(self, client, to_jid):
185 iq_elt = client.IQ()
186 iq_elt['to'] = to_jid.full()
187 query_elt = iq_elt.addElement((NS_REG, u'query'))
188 query_elt.addElement(u'remove')
189 iq_elt.send()