diff options
author | Philipp Hörist <philipp@hoerist.com> | 2023-02-05 23:42:26 +0300 |
---|---|---|
committer | Philipp Hörist <philipp@hoerist.com> | 2023-02-05 23:42:26 +0300 |
commit | 42df93c3d64d276ebbebc7507e778076f6441374 (patch) | |
tree | 4faec62e72c08bc12fbac13595f06c1e1b1ab691 | |
parent | e837ef4e0a2f170d792c909a15a1ff977d62942e (diff) |
refactor: Add MemoryPasswordStorage
This helps to provide a uniform interface for setting and getting passwords
-rw-r--r-- | gajim/common/client.py | 17 | ||||
-rw-r--r-- | gajim/common/passwords.py | 29 | ||||
-rw-r--r-- | gajim/gtk/password_dialog.py | 9 |
3 files changed, 30 insertions, 25 deletions
diff --git a/gajim/common/client.py b/gajim/common/client.py index 48333c447..0d96b95d7 100644 --- a/gajim/common/client.py +++ b/gajim/common/client.py @@ -73,7 +73,6 @@ class Client(Observable): self._hostname = app.settings.get_account_setting(self._account, 'hostname') self._user = app.settings.get_account_setting(self._account, 'name') - self.password = None self._priority = 0 self._connect_machine_calls = 0 @@ -165,15 +164,6 @@ class Client(Observable): self._client.set_domain(self._hostname) self._client.set_username(self._user) self._client.set_resource(get_resource(self._account)) - - pass_saved = app.settings.get_account_setting(self._account, 'savepass') - if pass_saved: - # Request password from keyring only if the user chose to save - # his password - self.password = passwords.get_password(self._account) - - self._client.set_password(self.password) - self._client.set_http_session(create_http_session()) self._client.subscribe('resume-failed', self._on_resume_failed) @@ -271,9 +261,7 @@ class Client(Observable): self._destroy_client = True if error in ('not-authorized', 'no-password'): - def _on_password(password: str) -> None: - self.password = password - self._client.set_password(password) + def _on_password() -> None: self._prepare_for_connect() app.ged.raise_event(PasswordRequired(client=self, @@ -535,6 +523,9 @@ class Client(Observable): if proxy is not None: self._client.set_proxy(proxy) + password = passwords.get_password(self._account) + self._client.set_password(password) + self.connect() def connect(self, ignored_tls_errors: IgnoredTlsErrorsT = None) -> None: diff --git a/gajim/common/passwords.py b/gajim/common/passwords.py index 783666afb..b88921a21 100644 --- a/gajim/common/passwords.py +++ b/gajim/common/passwords.py @@ -136,6 +136,24 @@ class ConfigPasswordStorage: app.settings.set_account_setting(account_name, 'password', '') +class MemoryPasswordStorage: + ''' + Store password in memory + ''' + + _passwords: dict[str, str] = {} + + def get_password(self, account_name: str) -> str: + return self._passwords.get(account_name, '') + + def save_password(self, account_name: str, password: str) -> bool: + self._passwords[account_name] = password + return True + + def delete_password(self, account_name: str) -> None: + self._passwords[account_name] = '' + + def init() -> None: _interface.init() @@ -145,17 +163,17 @@ def is_keyring_available() -> bool: def get_password(account_name: str) -> Optional[str]: + if not app.settings.get_account_setting(account_name, 'savepass'): + return MemoryPasswordStorage().get_password(account_name) + if app.settings.get('use_keyring'): return SecretPasswordStorage.get_password(account_name) return ConfigPasswordStorage.get_password(account_name) def save_password(account_name: str, password: str) -> bool: - if account_name in app.settings.get_active_accounts(): - app.get_client(account_name).password = password - if not app.settings.get_account_setting(account_name, 'savepass'): - return True + return MemoryPasswordStorage().save_password(account_name, password) if app.settings.get('use_keyring'): return SecretPasswordStorage.save_password(account_name, password) @@ -163,9 +181,6 @@ def save_password(account_name: str, password: str) -> bool: def delete_password(account_name: str) -> None: - if account_name in app.settings.get_active_accounts(): - app.get_client(account_name).password = None - if app.settings.get('use_keyring'): return SecretPasswordStorage.delete_password(account_name) return ConfigPasswordStorage.delete_password(account_name) diff --git a/gajim/gtk/password_dialog.py b/gajim/gtk/password_dialog.py index 0191c5b0e..2ea04aca3 100644 --- a/gajim/gtk/password_dialog.py +++ b/gajim/gtk/password_dialog.py @@ -78,13 +78,12 @@ class PasswordDialog(Gtk.ApplicationWindow): def _on_ok(self, _button: Gtk.Button) -> None: password = self._ui.pass_entry.get_text() + savepass = self._ui.save_pass_checkbutton.get_active() - app.settings.set_account_setting( - self.account, - 'savepass', - self._ui.save_pass_checkbutton.get_active()) + app.settings.set_account_setting(self.account, 'savepass', savepass) passwords.save_password(self.account, password) - self._event.on_password(password) + + self._event.on_password() self.destroy() def _on_cancel(self, _button: Gtk.Button) -> None: |