Mercurial > libervia-backend
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() |