diff --git a/src/common/connection.py b/src/common/connection.py index aeeae5ee6a34aa5d089867976ac347c26390cff8..99c78654eea4f9b5c35de08b7d81e81c77f6beff 100644 --- a/src/common/connection.py +++ b/src/common/connection.py @@ -119,6 +119,7 @@ class Connection(ConnectionHandlers): self.time_to_reconnect = None self.last_time_to_reconnect = None self.new_account_info = None + self.new_account_form = None self.bookmarks = [] self.annotations = {} self.on_purpose = False @@ -184,7 +185,7 @@ class Connection(ConnectionHandlers): self.retrycount = 0 # We are doing disconnect at so many places, better use one function in all - def disconnect(self, on_purpose = False): + def disconnect(self, on_purpose=False): self.on_purpose = on_purpose self.connected = 0 self.time_to_reconnect = None @@ -259,8 +260,47 @@ class Connection(ConnectionHandlers): return is_form = data[2] conf = data[1] - self.dispatch('NEW_ACC_CONNECTED', (conf, is_form)) - return + if self.new_account_form: + def _on_register_result(result): + if not common.xmpp.isResultNode(result): + self.dispatch('ACC_NOT_OK', (result.getError())) + return + if USE_GPG: + self.gpg = GnuPG.GnuPG(gajim.config.get( + 'use_gpg_agent')) + self.dispatch('ACC_OK', (self.new_account_info)) + self.new_account_info = None + self.new_account_form = None + if self.connection: + self.connection.UnregisterDisconnectHandler( + self._on_new_account) + self.disconnect(on_purpose=True) + # it's the second time we get the form, we have info user + # typed, so send them + if is_form: + #TODO: Check if form has changed + iq = Iq('set', NS_REGISTER, to=self._hostname) + iq.setTag('query').addChild(node=self.new_account_form) + self.connection.SendAndCallForResponse(iq, + _on_register_result) + else: + if self.new_account_form.keys().sort() != \ + conf.keys().sort(): + # requested config has changed since first connection + self.dispatch('ACC_NOT_OK', (_( + 'Server %s provided a different registration form')\ + % data[0])) + return + common.xmpp.features_nb.register(self.connection, + self._hostname, self.new_account_form, + _on_register_result) + return + else: + self.dispatch('NEW_ACC_CONNECTED', (conf, is_form)) + self.connection.UnregisterDisconnectHandler( + self._on_new_account) + self.disconnect(on_purpose=True) + return if not data[1]: # wrong answer self.dispatch('ERROR', (_('Invalid answer'), _('Transport %s answered wrongly to register request: %s') % \ @@ -1029,18 +1069,6 @@ class Connection(ConnectionHandlers): groups = groups) def send_new_account_infos(self, form, is_form): - def _on_register_result(result): - if not common.xmpp.isResultNode(result): - self.dispatch('ACC_NOT_OK', (result.getError())) - return - if USE_GPG: - self.gpg = GnuPG.GnuPG(gajim.config.get('use_gpg_agent')) - gajim.connections[self.name] = self - self.dispatch('ACC_OK', (self.new_account_info)) - self.new_account_info = None - if self.connection: - self.connection.UnregisterDisconnectHandler(self._on_new_account) - self.disconnect(on_purpose=True) if is_form: # Get username and password and put them in new_account_info for field in self._data_form.iter_fields(): @@ -1048,17 +1076,14 @@ class Connection(ConnectionHandlers): self.new_account_info['name'] = field.value if field.var == 'password': self.new_account_info['password'] = field.value - iq=Iq('set', NS_REGISTER, to = self._hostname) - iq.setTag('query').addChild(node = form) - self.connection.SendAndCallForResponse(iq, _on_register_result) else: # Get username and password and put them in new_account_info if form.has_key('username'): self.new_account_info['name'] = form['username'] if form.has_key('password'): self.new_account_info['password'] = form['password'] - common.xmpp.features_nb.register(self.connection, self._hostname, - form, _on_register_result) + self.new_account_form = form + self.new_account(self.name, self.new_account_info) def new_account(self, name, config, sync = False): # If a connection already exist we cannot create a new account diff --git a/src/config.py b/src/config.py index 43b8979d449c81d6d6206acc2345f03a0913ee28..0b673337c80c33967c66976fa0daa5f3df34d94e 100644 --- a/src/config.py +++ b/src/config.py @@ -3088,6 +3088,7 @@ class AccountCreationWizardWindow: self.notebook.set_current_page(5) # show finish page self.show_vcard_checkbutton.set_active(False) elif cur_page == 2: + # We are creating a new account server = self.xml.get_widget('server_comboboxentry1').child.get_text()\ .decode('utf-8') @@ -3172,7 +3173,7 @@ class AccountCreationWizardWindow: return True # loop forever def new_acc_connected(self, form, is_form): - '''connection to server succeded, present the form to the user''' + '''connection to server succeded, present the form to the user.''' if self.update_progressbar_timeout_id is not None: gobject.source_remove(self.update_progressbar_timeout_id) self.back_button.show()