diff options
author | Philipp Hörist <philipp@hoerist.com> | 2019-11-27 01:07:48 +0300 |
---|---|---|
committer | Philipp Hörist <philipp@hoerist.com> | 2019-11-27 01:07:48 +0300 |
commit | dc337d8c124047863696057a757f6882cdade6fc (patch) | |
tree | 30814404b3cb2041e11a02b8bde1c9ec4e376949 /nbxmpp/modules | |
parent | f28ff1dfa193c458ff9d13f3d743ae971fc05b11 (diff) |
Register: Add change_password()
Diffstat (limited to 'nbxmpp/modules')
-rw-r--r-- | nbxmpp/modules/register.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/nbxmpp/modules/register.py b/nbxmpp/modules/register.py index 06fb848..35d3ff0 100644 --- a/nbxmpp/modules/register.py +++ b/nbxmpp/modules/register.py @@ -24,9 +24,11 @@ from nbxmpp.protocol import Iq from nbxmpp.protocol import isResultNode from nbxmpp.structs import CommonResult from nbxmpp.structs import RegisterData +from nbxmpp.structs import ChangePasswordResult from nbxmpp.util import call_on_response from nbxmpp.util import callback from nbxmpp.util import raise_error +from nbxmpp.util import get_form from nbxmpp.const import REGISTER_FIELDS from nbxmpp.modules.bits_of_binary import parse_bob_data from nbxmpp.modules.dataforms import extend_form @@ -119,3 +121,34 @@ class Register: fields.append(create_field(typ='hidden', var='fakeform')) return SimpleDataForm(type_='form', fields=fields) + + @call_on_response('_on_password_change') + def change_password(self, password): + hostname = self._client.get_bound_jid().getDomain() + username = self._client.get_bound_jid().getNode() + iq = Iq('set', NS_REGISTER, to=hostname) + query = iq.getQuery() + query.setTagData('username', username) + query.setTagData('password', password) + return iq + + @callback + def _on_password_change(self, stanza): + if isResultNode(stanza): + return ChangePasswordResult(successful=True) + + if stanza.getQuery() is None: + return raise_error(log.info, stanza) + + form = get_form(stanza.getQuery(), + 'jabber:iq:register:changepassword') + if form is None: + return raise_error(log.info, stanza) + return ChangePasswordResult(successful=False, form=form) + + @call_on_response('_default_response') + def change_password_with_form(self, form): + hostname = self._client.get_bound_jid().getDomain() + iq = Iq('set', NS_REGISTER, to=hostname) + iq.setQueryPayload(form) + return iq |