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-11-14 22:44:33 +0300
committerPhilipp Hörist <philipp@hoerist.com>2023-11-14 22:44:33 +0300
commitf6cfa352d2a32fe2b5311f735a6c836ebe62770c (patch)
tree6cb57cd96b9b6b08028457a5c71655bfd7d7dbcc
parent015063ac445525ea9b50439c5b88df41360bb791 (diff)
imprv: Passwords: Use JID as username instead of account
Fixes #11684
-rw-r--r--gajim/common/passwords.py33
1 files changed, 29 insertions, 4 deletions
diff --git a/gajim/common/passwords.py b/gajim/common/passwords.py
index a8bad5938..9b4732865 100644
--- a/gajim/common/passwords.py
+++ b/gajim/common/passwords.py
@@ -77,10 +77,13 @@ class SecretPasswordStorage:
if not is_keyring_available():
log.warning('No recommended keyring backend available.'
'Passwords cannot be stored.')
- return True
+ return False
+
+ account_jid = app.get_jid_from_account(account_name)
+
try:
log.info('Save password to keyring')
- _interface.backend.set_password('gajim', account_name, password)
+ _interface.backend.set_password('gajim', account_jid, password)
return True
except Exception:
log.exception('Save password failed')
@@ -93,14 +96,33 @@ class SecretPasswordStorage:
log.info('Request password from keyring')
+ account_jid = app.get_jid_from_account(account_name)
+
try:
# For security reasons remove clear-text password
ConfigPasswordStorage.delete_password(account_name)
- return _interface.backend.get_password('gajim', account_name)
+ password = _interface.backend.get_password('gajim', account_jid)
+ except Exception:
+ log.exception('Request password failed')
+ return
+
+ if password is not None:
+ return password
+
+ # Migration from account name to account jid
+ try:
+ password = _interface.backend.get_password('gajim', account_name)
except Exception:
log.exception('Request password failed')
return
+ if password is not None:
+ result = SecretPasswordStorage.save_password(account_name, password)
+ if not result:
+ log.error('Password migration failed')
+
+ return password
+
@staticmethod
def delete_password(account_name: str) -> None:
if not is_keyring_available():
@@ -108,8 +130,11 @@ class SecretPasswordStorage:
log.info('Remove password from keyring')
+ account_jid = app.get_jid_from_account(account_name)
+
try:
- return _interface.backend.delete_password('gajim', account_name)
+ _interface.backend.delete_password('gajim', account_name)
+ return _interface.backend.delete_password('gajim', account_jid)
except keyring.errors.PasswordDeleteError as error:
log.warning('Removing password failed: %s', error)
except Exception: