Philipp Hörist pushed to branch master at gajim / gajim
Commits: 9d0ffffc by lovetox at 2021-02-12T23:10:33+01:00 ServiceRegistration: Use nbxmpp register methods
Fixes #10443
- - - - - 7439dc9a by lovetox at 2021-02-12T23:10:33+01:00 Register: Remove unused methods
- - - - -
2 changed files:
- gajim/common/modules/register.py - gajim/gtk/service_registration.py
Changes:
===================================== gajim/common/modules/register.py ===================================== @@ -14,14 +14,10 @@
# XEP-0077: In-Band Registration
-import weakref
-import nbxmpp from nbxmpp.namespaces import Namespace
-from gajim.common import app from gajim.common.modules.base import BaseModule -from gajim.common.modules.bits_of_binary import parse_bob_data
class Register(BaseModule): @@ -31,101 +27,18 @@ class Register(BaseModule): 'unregister', 'change_password', 'change_password_with_form', + 'request_register_form', + 'submit_register_form', ]
def __init__(self, con): BaseModule.__init__(self, con)
- self.agent_registrations = {} - self.supported = False
def pass_disco(self, info): self.supported = Namespace.REGISTER in info.features
- def register_agent(self, agent, form, is_form, success_cb, error_cb): - if not app.account_is_available(self._account): - return - - weak_success_cb = weakref.WeakMethod(success_cb) - weak_error_cb = weakref.WeakMethod(error_cb) - - iq = nbxmpp.Iq('set', Namespace.REGISTER, to=agent) - if is_form: - query = iq.setQuery() - form.setAttr('type', 'submit') - query.addChild(node=form) - else: - for field in form.keys(): - iq.setTag('query').setTagData(field, form[field]) - - self._con.connection.SendAndCallForResponse( - iq, self._register_agent_response, {'agent': agent, - 'success_cb': weak_success_cb, - 'error_cb': weak_error_cb}) - - def _register_agent_response(self, _nbxmpp_client, stanza, agent, - success_cb, error_cb): - if not nbxmpp.isResultNode(stanza): - error = stanza.getErrorMsg() - self._log.info('Error: %s', error) - if error_cb() is not None: - form = is_form = None - if stanza.getErrorType() == 'modify': - form, is_form = self._get_register_form(stanza) - error_cb()(error, form, is_form) - return - - self._con.get_module('Presence').subscribe(agent, auto_auth=True) - - if success_cb() is not None: - success_cb()() - - def get_register_form(self, jid, success_cb, error_cb): - if not app.account_is_available(self._account): - return - - weak_success_cb = weakref.WeakMethod(success_cb) - weak_error_cb = weakref.WeakMethod(error_cb) - - iq = nbxmpp.Iq('get', Namespace.REGISTER, to=jid) - self._con.connection.SendAndCallForResponse( - iq, self._register_info_response, {'success_cb': weak_success_cb, - 'error_cb': weak_error_cb}) - - def _register_info_response(self, _nbxmpp_client, stanza, - success_cb, error_cb): - if not nbxmpp.isResultNode(stanza): - error = stanza.getErrorMsg() - self._log.info('Error: %s', error) - if error_cb() is not None: - error_cb()(error) - else: - self._log.info('Register form received') - - if success_cb() is not None: - form, is_form = self._get_register_form(stanza) - success_cb()(form, is_form) - - @staticmethod - def _get_register_form(stanza): - parse_bob_data(stanza.getQuery()) - form = stanza.getQuery().getTag('x', namespace=Namespace.DATA) - is_form = form is not None - if not is_form: - form = {} - oob = stanza.getQuery().getTag('x', namespace=Namespace.X_OOB) - if oob is not None: - form['redirect-url'] = oob.getTagData('url') - for field in stanza.getQueryPayload(): - if not isinstance(field, nbxmpp.Node): - continue - if field.getName() == 'x': - continue - form[field.getName()] = field.getData() - - return form, is_form -
def get_instance(*args, **kwargs): return Register(*args, **kwargs), 'Register'
===================================== gajim/gtk/service_registration.py ===================================== @@ -17,13 +17,14 @@
from gi.repository import Gtk
-from nbxmpp.modules import dataforms +from nbxmpp.errors import StanzaError +from nbxmpp.errors import MalformedStanzaError +from nbxmpp.errors import RegisterStanzaError
from gajim.common import app from gajim.common.i18n import _
from .dataform import DataFormWidget -from .dataform import FakeDataFormWidget
log = logging.getLogger('gajim.gui.registration')
@@ -44,7 +45,6 @@ def __init__(self, account, agent): self._agent = agent self._account = account self._data_form_widget = None - self._is_form = None
self.set_application(app.app) self.set_resizable(True) @@ -77,63 +77,55 @@ def _remove_sidebar(self): sidebar = main_box.get_children()[0] main_box.remove(sidebar)
- def _build_dataform(self, form, is_form): - if not is_form: - return FakeDataFormWidget(form) - - dataform = dataforms.extend_form(node=form) - - form_widget = DataFormWidget(dataform) - form_widget.connect('is-valid', self._on_is_valid) - form_widget.validate() - return form_widget - def _on_page_change(self, _assistant, _page): if self.get_current_page() == Page.REQUEST: - self._con.get_module('Register').get_register_form( - self._agent, self._on_get_success, self._on_error) + self._con.get_module('Register').request_register_form( + self._agent, callback=self._on_register_form) elif self.get_current_page() == Page.SENDING: self._register() self.commit()
- def _on_get_success(self, form, is_form): - log.info('Show Form page') - self._is_form = is_form - self._data_form_widget = self._build_dataform(form, is_form) + def _on_register_form(self, task): + try: + result = task.finish() + except (StanzaError, MalformedStanzaError) as error: + self.get_nth_page(Page.ERROR).set_text(error.get_text()) + self.set_current_page(Page.ERROR) + return + + form = result.form + if result.form is None: + form = result.fields_form + + self._data_form_widget = DataFormWidget(form) + self._data_form_widget.connect('is-valid', self._on_is_valid) + self._data_form_widget.validate() self.get_nth_page(Page.FORM).set_form(self._data_form_widget) self.set_current_page(Page.FORM)
def _on_is_valid(self, _widget, is_valid): self.set_page_complete(self.get_nth_page(Page.FORM), is_valid)
- def _on_error(self, error_text, form=None, is_form=False): - if form is not None: - log.info('Show Form page') - self._is_form = is_form - self._data_form_widget = self._build_dataform(form, is_form) - self.get_nth_page(Page.FORM).set_form(self._data_form_widget, - error_text=error_text) - self.set_current_page(Page.FORM) - else: - log.info('Show Error page') - self.get_nth_page(Page.ERROR).set_text(error_text) - self.set_current_page(Page.ERROR) - def _on_cancel(self, _widget): self.destroy()
def _register(self): - log.info('Show Sending page') form = self._data_form_widget.get_submit_form() - self._con.get_module('Register').register_agent( - self._agent, + self._con.get_module('Register').submit_register_form( form, - self._is_form, - self._on_register_success, - self._on_error) + self._agent, + callback=self._on_register_result) + + def _on_register_result(self, task): + try: + task.finish() + except (StanzaError, + MalformedStanzaError, + RegisterStanzaError) as error: + self.get_nth_page(Page.ERROR).set_text(error.get_text()) + self.set_current_page(Page.ERROR) + return
- def _on_register_success(self): - log.info('Show Success page') self.set_current_page(Page.SUCCESS)
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/compare/3fcdc8a5d0c4019f8b95ecc38dac94aa...