mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-05-19 09:10:47 +08:00
Merge branch 'CURA-8332_Dont_crash_if_keyring_access_is_denied_on_mac' into 4.10
This commit is contained in:
commit
3331b7c267
@ -1,10 +1,10 @@
|
|||||||
# Copyright (c) 2021 Ultimaker B.V.
|
# Copyright (c) 2021 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
from typing import Type, TYPE_CHECKING, Optional, List
|
from typing import Type, TYPE_CHECKING, Optional, List, Union
|
||||||
|
|
||||||
import keyring
|
import keyring
|
||||||
from keyring.backend import KeyringBackend
|
from keyring.backend import KeyringBackend
|
||||||
from keyring.errors import NoKeyringError, PasswordSetError
|
from keyring.errors import NoKeyringError, PasswordSetError, KeyringError
|
||||||
|
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
|
|
||||||
@ -14,13 +14,24 @@ if TYPE_CHECKING:
|
|||||||
# Need to do some extra workarounds on windows:
|
# Need to do some extra workarounds on windows:
|
||||||
import sys
|
import sys
|
||||||
from UM.Platform import Platform
|
from UM.Platform import Platform
|
||||||
|
|
||||||
|
|
||||||
|
class _KeychainDenied(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
if Platform.isWindows() and hasattr(sys, "frozen"):
|
if Platform.isWindows() and hasattr(sys, "frozen"):
|
||||||
import win32timezone
|
import win32timezone
|
||||||
from keyring.backends.Windows import WinVaultKeyring
|
from keyring.backends.Windows import WinVaultKeyring
|
||||||
keyring.set_keyring(WinVaultKeyring())
|
keyring.set_keyring(WinVaultKeyring())
|
||||||
if Platform.isOSX() and hasattr(sys, "frozen"):
|
if Platform.isOSX() and hasattr(sys, "frozen"):
|
||||||
from keyring.backends.macOS import Keyring
|
from keyring.backends.macOS import Keyring
|
||||||
|
from keyring.backends.macOS.api import KeychainDenied as _KeychainDeniedMacOS
|
||||||
|
KeychainDenied: Union[Type[_KeychainDenied], Type[_KeychainDeniedMacOS]] = _KeychainDeniedMacOS
|
||||||
keyring.set_keyring(Keyring())
|
keyring.set_keyring(Keyring())
|
||||||
|
else:
|
||||||
|
KeychainDenied = _KeychainDenied
|
||||||
|
|
||||||
|
|
||||||
# Even if errors happen, we don't want this stored locally:
|
# Even if errors happen, we don't want this stored locally:
|
||||||
DONT_EVER_STORE_LOCALLY: List[str] = ["refresh_token"]
|
DONT_EVER_STORE_LOCALLY: List[str] = ["refresh_token"]
|
||||||
@ -39,6 +50,10 @@ class KeyringAttribute:
|
|||||||
self._store_secure = False
|
self._store_secure = False
|
||||||
Logger.logException("w", "No keyring backend present")
|
Logger.logException("w", "No keyring backend present")
|
||||||
return getattr(instance, self._name)
|
return getattr(instance, self._name)
|
||||||
|
except KeychainDenied:
|
||||||
|
self._store_secure = False
|
||||||
|
Logger.log("i", "Access to the keyring was denied.")
|
||||||
|
return getattr(instance, self._name)
|
||||||
else:
|
else:
|
||||||
return getattr(instance, self._name)
|
return getattr(instance, self._name)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user