mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-25 15:44:04 -06:00
Added documentation and refactored
CURA-7180 keyring storage
This commit is contained in:
parent
2796b9bef3
commit
fcf698f00b
1 changed files with 20 additions and 13 deletions
|
@ -6,6 +6,11 @@ from UM.Logger import Logger
|
||||||
|
|
||||||
|
|
||||||
class SecretStorage:
|
class SecretStorage:
|
||||||
|
"""
|
||||||
|
Secret storage vault. It will by default store a secret in the system keyring. If that fails, is not available or
|
||||||
|
not allowed it will store in the Cura preferences. This is the unsafe "old" behaviour
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, preferences: Optional["Preferences"] = None):
|
def __init__(self, preferences: Optional["Preferences"] = None):
|
||||||
self._stored_secrets = set()
|
self._stored_secrets = set()
|
||||||
if preferences:
|
if preferences:
|
||||||
|
@ -16,7 +21,7 @@ class SecretStorage:
|
||||||
else:
|
else:
|
||||||
self._preferences.addPreference("general/keyring", "{}")
|
self._preferences.addPreference("general/keyring", "{}")
|
||||||
|
|
||||||
def __delitem__(self, key):
|
def __delitem__(self, key: str):
|
||||||
if key in self._stored_secrets:
|
if key in self._stored_secrets:
|
||||||
self._stored_secrets.remove(key)
|
self._stored_secrets.remove(key)
|
||||||
self._preferences.setValue("general/keyring", ";".join(self._stored_secrets))
|
self._preferences.setValue("general/keyring", ";".join(self._stored_secrets))
|
||||||
|
@ -25,28 +30,30 @@ class SecretStorage:
|
||||||
# TODO: handle removal of secret from preferences
|
# TODO: handle removal of secret from preferences
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
def __setitem__(self, key: str, value: str):
|
||||||
try:
|
try:
|
||||||
keyring.set_password("cura", key, value)
|
keyring.set_password("cura", key, value)
|
||||||
self._stored_secrets.add(key)
|
self._stored_secrets.add(key)
|
||||||
self._preferences.setValue(f"general/{key}", None)
|
self._preferences.setValue("general/{key}".format(key = key), None)
|
||||||
except:
|
except:
|
||||||
Logger.logException("w", f"Could not store {key} in keyring.")
|
Logger.logException("w", "Could not store {key} in keyring.".format(key = key))
|
||||||
if key in self._stored_secrets:
|
if key in self._stored_secrets:
|
||||||
self._stored_secrets.remove(key)
|
self._stored_secrets.remove(key)
|
||||||
self._preferences.addPreference("general/{key}".format(key=key), "{}")
|
self._preferences.addPreference("general/{key}".format(key = key), "{}")
|
||||||
self._preferences.setValue("general/{key}".format(key=key), value)
|
self._preferences.setValue("general/{key}".format(key = key), value)
|
||||||
self._preferences.setValue("general/keyring", ";".join(self._stored_secrets))
|
self._preferences.setValue("general/keyring", ";".join(self._stored_secrets))
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key: str) -> Optional[str]:
|
||||||
secret = self._preferences.getValue(f"general/{key}")
|
secret = None
|
||||||
if key in self._stored_secrets:
|
if key in self._stored_secrets:
|
||||||
try:
|
try:
|
||||||
secret = keyring.get_password("cura", key)
|
secret = keyring.get_password("cura", key)
|
||||||
except:
|
except:
|
||||||
if secret:
|
secret = self._preferences.getValue("general/{key}".format(key = key))
|
||||||
Logger.logException("w",
|
Logger.logException("w", "{key} obtained from preferences, consider giving Cura access to the keyring".format(key = key))
|
||||||
f"{key} obtained from preferences, consider giving Cura access to the keyring")
|
else:
|
||||||
if secret is None or secret == 'null':
|
secret = self._preferences.getValue(f"general/{key}")
|
||||||
Logger.logException("w", f"Could not load {key}")
|
Logger.logException("w", "{key} obtained from preferences, consider giving Cura access to the keyring".format(key = key))
|
||||||
|
if secret is None or secret == '':
|
||||||
|
Logger.logException("w", "Could not load {key}".format(key = key))
|
||||||
return secret
|
return secret
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue