Merge branch 'CURA-7180_keyring_storage' into big_merge_v49

This commit is contained in:
Remco Burema 2021-03-30 17:21:17 +02:00
commit 315898864c
No known key found for this signature in database
GPG Key ID: 215C49431D43F98C
3 changed files with 20 additions and 6 deletions

View File

@ -1,11 +1,16 @@
# Copyright (c) 2021 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Optional, Type
from typing import Type, TYPE_CHECKING
import keyring
from keyring.backend import KeyringBackend
from keyring.errors import NoKeyringError, PasswordSetError
from UM.Logger import Logger
if TYPE_CHECKING:
from cura.OAuth2.Models import BaseModel
class KeyringAttribute:
"""
@ -15,7 +20,7 @@ class KeyringAttribute:
if self._store_secure:
try:
return keyring.get_password("cura", self._keyring_name)
except keyring.errors.NoKeyringError:
except NoKeyringError:
self._store_secure = False
Logger.logException("w", "No keyring backend present")
return getattr(instance, self._name)
@ -27,14 +32,20 @@ class KeyringAttribute:
setattr(instance, self._name, None)
try:
keyring.set_password("cura", self._keyring_name, value)
except keyring.errors.PasswordSetError:
except PasswordSetError:
self._store_secure = False
setattr(instance, self._name, value)
Logger.logException("w", "Keyring access denied")
except keyring.errors.NoKeyringError:
except NoKeyringError:
self._store_secure = False
setattr(instance, self._name, value)
Logger.logException("w", "No keyring backend present")
except BaseException as e:
# A BaseException can occur in Windows when the keyring attempts to write a token longer than 1024
# characters in the Windows Credentials Manager.
self._store_secure = False
setattr(instance, self._name, value)
Logger.log("w", "Keyring failed: {}".format(e))
else:
setattr(instance, self._name, value)
@ -43,7 +54,7 @@ class KeyringAttribute:
self._keyring_name = name
self._store_secure = False
try:
self._store_secure = keyring.backend.KeyringBackend.viable
except keyring.errors.NoKeyringError:
self._store_secure = KeyringBackend.viable
except NoKeyringError:
Logger.logException("w", "Could not use keyring")
setattr(owner, self._name, None)

View File

@ -32,3 +32,5 @@ urllib3==1.25.6
PyYAML==5.1.2
zeroconf==0.24.1
comtypes==1.1.7
pywin32==300
keyring==23.0.1

View File

@ -159,6 +159,7 @@ UM.Dialog
projectsModel.append({ name: "libnest2d", description: catalog.i18nc("@label", "Polygon packing library, developed by Prusa Research"), license: "LGPL", url: "https://github.com/tamasmeszaros/libnest2d" });
projectsModel.append({ name: "pynest2d", description: catalog.i18nc("@label", "Python bindings for libnest2d"), license: "LGPL", url: "https://github.com/Ultimaker/pynest2d" });
projectsModel.append({ name: "keyring", description: catalog.i18nc("@label", "Support library for system keyring access"), license: "MIT", url: "https://github.com/jaraco/keyring" });
projectsModel.append({ name: "pywin32", description: catalog.i18nc("@label", "Python extensions for Microsoft Windows"), license: "PSF", url: "https://github.com/mhammond/pywin32" });
projectsModel.append({ name: "Noto Sans", description: catalog.i18nc("@label", "Font"), license: "Apache 2.0", url: "https://www.google.com/get/noto/" });
projectsModel.append({ name: "Font-Awesome-SVG-PNG", description: catalog.i18nc("@label", "SVG icons"), license: "SIL OFL 1.1", url: "https://github.com/encharm/Font-Awesome-SVG-PNG" });
projectsModel.append({ name: "AppImageKit", description: catalog.i18nc("@label", "Linux cross-distribution application deployment"), license: "MIT", url: "https://github.com/AppImage/AppImageKit" });