Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Hörist <philipp@hoerist.com>2023-02-05 23:42:26 +0300
committerPhilipp Hörist <philipp@hoerist.com>2023-02-05 23:42:26 +0300
commit42df93c3d64d276ebbebc7507e778076f6441374 (patch)
tree4faec62e72c08bc12fbac13595f06c1e1b1ab691
parente837ef4e0a2f170d792c909a15a1ff977d62942e (diff)
refactor: Add MemoryPasswordStorage
This helps to provide a uniform interface for setting and getting passwords
-rw-r--r--gajim/common/client.py17
-rw-r--r--gajim/common/passwords.py29
-rw-r--r--gajim/gtk/password_dialog.py9
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: