src/eric7/WebBrowser/WebAuth/Fido2ManagementDialog.py

Mon, 22 Jul 2024 10:15:41 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 22 Jul 2024 10:15:41 +0200
branch
eric7
changeset 10856
b19cefceca15
parent 10854
30c45bd597e6
child 10857
abcb288e7e17
permissions
-rw-r--r--

Continued implementing the FIDO2 security key management interface.

10854
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2 # Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de>
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 #
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 Module implementing a dialog to manage FIDO2 security keys.
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 from PyQt6.QtCore import Qt, QTimer, pyqtSlot
10856
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
10 from PyQt6.QtWidgets import (
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
11 QDialog,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
12 QDialogButtonBox,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
13 QMenu,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
14 QToolButton,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
15 QTreeWidgetItem,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
16 )
10854
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from eric7.EricGui import EricPixmapCache
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 from eric7.EricGui.EricOverrideCursor import EricOverrideCursor
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 from eric7.EricWidgets import EricMessageBox
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 from .Fido2Management import Fido2DeviceError, Fido2Management, Fido2PinError
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 from .Fido2PinDialog import Fido2PinDialog, Fido2PinDialogMode
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 from .Ui_Fido2ManagementDialog import Ui_Fido2ManagementDialog
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 class Fido2ManagementDialog(QDialog, Ui_Fido2ManagementDialog):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 Class implementing a dialog to manage FIDO2 security keys.
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 CredentialIdRole = Qt.ItemDataRole.UserRole
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 UserIdRole = Qt.ItemDataRole.UserRole + 1
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 RelyingPartyColumn = 0
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 CredentialIdColumn = 1
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 DisplayNameColumn = 2
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 UserNameColumn = 3
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
10856
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
40 def __init__(self, standalone=False, parent=None):
10854
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 Constructor
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43
10856
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
44 @param standalone flag indicating the standalone management application
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
45 (defaults to False)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
46 @type bool (optional)
10854
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 @param parent reference to the parent widget (defaults to None)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 @type QWidget (optional)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 super().__init__(parent)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.setupUi(self)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 self.reloadButton.setIcon(EricPixmapCache.getIcon("reload"))
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.lockButton.setIcon(EricPixmapCache.getIcon("locked"))
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55
10856
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
56 self.menuButton.setObjectName("fido2_supermenu_button")
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
57 self.menuButton.setIcon(EricPixmapCache.getIcon("superMenu"))
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
58 self.menuButton.setToolTip(self.tr("Security Key Management Menu"))
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
59 self.menuButton.setPopupMode(QToolButton.ToolButtonPopupMode.InstantPopup)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
60 self.menuButton.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
61 self.menuButton.setFocusPolicy(Qt.FocusPolicy.NoFocus)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
62 self.menuButton.setAutoRaise(True)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
63 self.menuButton.setShowMenuInside(True)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
64
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
65 self.__initManagementMenu()
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
66
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
67 if standalone:
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
68 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setText(
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
69 self.tr("Quit")
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
70 )
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
71
10854
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 self.reloadButton.clicked.connect(self.__populateDeviceSelector)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 self.__manager = Fido2Management(parent=self)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 QTimer.singleShot(0, self.__populateDeviceSelector)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
10856
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
78 def __initManagementMenu(self):
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
79 """
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
80 Private method to initialize the security key management menu with
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
81 actions not needed so much.
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
82 """
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
83 self.__mgmtMenu = QMenu()
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
84 self.__mgmtMenu.addAction(self.tr("Show Info"), self.__showSecurityKeyInfo)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
85 self.__mgmtMenu.addSeparator()
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
86 self.__mgmtMenu.addAction(
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
87 self.tr("Reset Security Key"), self.__resetSecurityKey
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
88 )
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
89 # TODO: potentially add these 'config' actions
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
90 # - Force PIN Change
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
91 # - Set Minimum PIN Length
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
92 # - Toggle 'Always Require UV'
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
93
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
94 self.__mgmtMenu.aboutToShow.connect(self.__aboutToShowManagementMenu)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
95
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
96 self.menuButton.setMenu(self.__mgmtMenu)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
97
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
98 @pyqtSlot()
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
99 def __aboutToShowManagementMenu(self):
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
100 """
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
101 Private slot to prepare the security key management menu before it is shown.
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
102 """
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
103 # TODO: not implemented yet
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
104 pass
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
105
10854
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 ############################################################################
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 ## methods related to device handling
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 ############################################################################
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 @pyqtSlot()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 def __populateDeviceSelector(self):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 Private slot to populate the device selector combo box.
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 self.__manager.disconnectFromDevice()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 self.securityKeysComboBox.clear()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 self.reloadButton.setEnabled(False)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 securityKeys = self.__manager.getDevices()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 if len(securityKeys) != 1:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 self.securityKeysComboBox.addItem("")
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 for securityKey in securityKeys:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 self.securityKeysComboBox.addItem(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 self.tr("{0} ({1})").format(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 securityKey.product_name, securityKey.descriptor.path
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 ),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 securityKey,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 self.reloadButton.setEnabled(True)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 if len(securityKeys) == 0:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 EricMessageBox.information(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 self,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 self.tr("FIDO2 Security Key Management"),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 self.tr(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 """No security key could be detected. Attach a key and press"""
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 """ the "Reload" button."""
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 ),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 @pyqtSlot(int)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 def on_securityKeysComboBox_currentIndexChanged(self, index):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 Private slot handling the selection of security key.
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 @param index index of the selected security key
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 @type int
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 self.lockButton.setChecked(False)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 self.__manager.disconnectFromDevice()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 securityKey = self.securityKeysComboBox.itemData(index)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 self.lockButton.setEnabled(securityKey is not None)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 self.pinButton.setEnabled(securityKey is not None)
10856
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
158 self.menuButton.setEnabled(securityKey is not None)
10854
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 self.loadPasskeysButton.setEnabled(securityKey is not None)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 if securityKey is not None:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 self.__manager.connectToDevice(securityKey)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 hasPin = self.__manager.hasPin()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 forcedPinChange = self.__manager.forcedPinChange()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 if hasPin is True:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 self.pinButton.setText(self.tr("Change PIN"))
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 elif hasPin is False:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 self.pinButton.setText(self.tr("Set PIN"))
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 else:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 self.pinButton.setEnabled(False)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 if forcedPinChange or hasPin is False:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 self.lockButton.setEnabled(False)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 self.loadPasskeysButton.setEnabled(False)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 msg = (
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 self.tr("A PIN change is required.")
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 if forcedPinChange
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 else self.tr("You must set a PIN first.")
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 EricMessageBox.information(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 self,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 self.tr("FIDO2 Security Key Management"),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 msg,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 self.passkeysList.clear()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 self.on_passkeysList_itemSelectionChanged()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 @pyqtSlot(bool)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 def on_lockButton_toggled(self, checked):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 Private slot to handle the toggling of the device locked status.
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 @param checked state of the lock/unlock button
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 @type bool
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 if checked:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 # unlock the selected security key
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 pin = self.__getRequiredPin(self.tr("Unlock Security Key"))
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 if pin:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 ok, msg = self.__manager.verifyPin(pin=pin)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 if ok:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 self.lockButton.setIcon(EricPixmapCache.getIcon("unlocked"))
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 self.__manager.unlockDevice(pin)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 else:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 EricMessageBox.critical(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 self,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 self.tr("Unlock Security Key"),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 msg,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 self.lockButton.setChecked(False)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 else:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 self.lockButton.setChecked(False)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 else:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 # lock the selected security key
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 self.lockButton.setIcon(EricPixmapCache.getIcon("locked"))
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 self.__manager.lockDevice()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 @pyqtSlot()
10856
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
219 def __showSecurityKeyInfo(self):
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
220 """
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
221 Private slot to show some info about the selected security key.
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
222 """
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
223 from .Fido2InfoDialog import Fido2InfoDialog
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
224
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
225 securityKey = self.securityKeysComboBox.currentData()
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
226 dlg = Fido2InfoDialog(
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
227 header=securityKey.product_name, manager=self.__manager, parent=self
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
228 )
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
229 dlg.exec()
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
230
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
231 @pyqtSlot()
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
232 def __resetSecurityKey(self):
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
233 """
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
234 Private slot to reset the selected security key.
10854
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 """
10856
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
236 title = self.tr("Reset Security Key")
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
237
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
238 yes = EricMessageBox.yesNo(
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
239 parent=self,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
240 title=title,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
241 text=self.tr(
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
242 "<p>Shall the selected security key really be reset?</p><p><b>WARNING"
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
243 ":</b> This will delete all passkeys and restore factory settings.</p>"
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
244 ),
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
245 )
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
246 if yes:
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
247 if len(self.__manager.getDevices()) != 1:
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
248 EricMessageBox.critical(
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
249 self,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
250 title=title,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
251 text=self.tr(
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
252 "Only one security key can be connected to perform a reset."
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
253 " Remove all other security keys and try again."
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
254 ),
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
255 )
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
256 return
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
257
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
258 EricMessageBox.information(
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
259 self,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
260 title=title,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
261 text=self.tr(
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
262 "Confirm this dialog then remove and re-insert the security key."
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
263 " Confirm the reset by touching it."
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
264 ),
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
265 )
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
266
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
267 ok, msg = self.__manager.resetDevice()
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
268 if ok:
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
269 EricMessageBox.information(self, title, msg)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
270 else:
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
271 EricMessageBox.warning(self, title, msg)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
272
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
273 self.__populateDeviceSelector()
10854
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 ############################################################################
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 ## methods related to PIN handling
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 ############################################################################
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 def __checkPinStatus(self, feature):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 Private method to check the PIN status of the connected security key.
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 @param feature name of the feature requesting the PIN (defaults to None)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 @type str (optional)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 @return flag indicating a positive status
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 @rtype bool
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 feature = self.tr("This feature") if feature is None else f"'{feature}'"
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 hasPin = self.__manager.hasPin()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 retries, powerCycle = self.__manager.getPinRetries()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 if hasPin is None:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 msg = self.tr("{0} is not supported by the selected security key.").format(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 feature
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 elif not hasPin:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 msg = self.tr("{0} requires having a PIN. Set a PIN first.").format(feature)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 elif self.__manager.forcedPinChange():
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 msg = self.tr("The security key is locked. Change the PIN first.")
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 elif powerCycle:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 msg = self.tr(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 "The security key is locked because the wrong PIN was entered "
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 "too many times. To unlock it, remove and reinsert it."
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 elif retries == 0:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 msg = self.tr(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 "The security key is locked because the wrong PIN was entered too"
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 " many times. You will need to reset the security key."
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 else:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 msg = ""
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 if msg:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 EricMessageBox.critical(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 self,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 self.tr("FIDO2 Security Key Management"),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 msg,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 return False
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 else:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 return True
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 def __getRequiredPin(self, feature=None):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 Private method to check, if a pin has been set for the selected device, and
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 ask the user to enter it.
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 @param feature name of the feature requesting the PIN (defaults to None)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 @type str (optional)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 @return PIN of the selected security key or None in case of an issue
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 @rtype str or None
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 if not self.__checkPinStatus(feature=feature):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 return None
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 else:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 if self.__manager.isDeviceLocked():
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 retries = self.__manager.getPinRetries()[0]
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 title = self.tr("PIN required") if feature is None else feature
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 dlg = Fido2PinDialog(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 mode=Fido2PinDialogMode.GET,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 title=title,
10856
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
343 message=self.tr("Enter the PIN to unlock the security key."),
10854
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 minLength=self.__manager.getMinimumPinLength(),
10856
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
345 retries=retries,
10854
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 parent=self,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 if dlg.exec() == QDialog.DialogCode.Accepted:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 return dlg.getPins()[0]
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 else:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 return None
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 else:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 return ""
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 @pyqtSlot()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 def __setPin(self):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 Private slot to set a PIN for the selected security key.
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 """
10856
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
360 retries = self.__manager.getPinRetries()[0]
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
361 title = self.tr("Set PIN")
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
362
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
363 dlg = Fido2PinDialog(
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
364 mode=Fido2PinDialogMode.SET,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
365 title=title,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
366 message=self.tr("Enter the PIN for the security key."),
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
367 minLength=self.__manager.getMinimumPinLength(),
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
368 retries=retries,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
369 parent=self,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
370 )
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
371 if dlg.exec() == QDialog.DialogCode.Accepted:
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
372 newPin = dlg.getPins()[1]
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
373 ok, msg = self.__manager.setPin(newPin)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
374 if ok:
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
375 self.lockButton.setEnabled(True)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
376 self.lockButton.setChecked(False)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
377 self.pinButton.setText(self.tr("Change PIN"))
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
378 self.loadPasskeysButton.setEnabled(True)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
379 self.__manager.reconnectToDevice()
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
380 EricMessageBox.information(self, title, msg)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
381 else:
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
382 EricMessageBox.warning(self, title, msg)
10854
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 @pyqtSlot()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 def __changePin(self):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 """
10856
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
387 Private slot to change the PIN of the selected security key.
10854
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 """
10856
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
389 retries = self.__manager.getPinRetries()[0]
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
390 title = self.tr("Change PIN")
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
391
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
392 dlg = Fido2PinDialog(
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
393 mode=Fido2PinDialogMode.CHANGE,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
394 title=title,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
395 message=self.tr("Enter the current and new PINs."),
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
396 minLength=self.__manager.getMinimumPinLength(),
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
397 retries=retries,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
398 parent=self,
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
399 )
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
400 if dlg.exec() == QDialog.DialogCode.Accepted:
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
401 oldPin, newPin = dlg.getPins()
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
402 ok, msg = self.__manager.changePin(oldPin, newPin)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
403 if ok:
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
404 self.lockButton.setChecked(False)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
405 EricMessageBox.information(self, title, msg)
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
406 else:
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
407 EricMessageBox.warning(self, title, msg)
10854
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409 @pyqtSlot()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410 def on_pinButton_clicked(self):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412 Private slot to set or change the PIN for the selected security key.
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414 if self.__manager.hasPin():
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 self.__changePin()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 else:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 self.__setPin()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419 ############################################################################
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 ## methods related to passkeys handling
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421 ############################################################################
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423 @pyqtSlot()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424 def __populatePasskeysList(self):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
426 Private slot to populate the list of store passkeys of the selected security
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
427 key.
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
428 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
429 keyIndex = self.securityKeysComboBox.currentData()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
430 if keyIndex is None:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431 return
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433 pin = self.__getRequiredPin(feature=self.tr("Credential Management"))
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
434 if pin is None:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
435 return
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
436
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437 self.passkeysList.clear()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439 try:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440 with EricOverrideCursor():
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
441 passkeys, existingCount, remainingCount = self.__manager.getPasskeys(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442 pin=pin
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
443 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
444 except (Fido2DeviceError, Fido2PinError) as err:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
445 self.__handleError(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
446 error=err,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
447 title=self.tr("Load Passkeys"),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
448 message=self.tr("The stored passkeys could not be loaded."),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
449 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
450 return
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
451
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
452 self.existingCountLabel.setText(str(existingCount))
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
453 self.remainingCountLabel.setText(str(remainingCount))
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
454
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
455 for relyingParty in passkeys:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
456 rpItem = QTreeWidgetItem(self.passkeysList, [relyingParty])
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
457 rpItem.setFirstColumnSpanned(True)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
458 rpItem.setExpanded(True)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459 for passDict in passkeys[relyingParty]:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460 item = QTreeWidgetItem(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461 rpItem,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
462 [
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463 "",
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464 passDict["credentialId"]["id"].hex(),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
465 passDict["displayName"],
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
466 passDict["userName"],
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
467 ],
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
468 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
469 item.setData(0, self.CredentialIdRole, passDict["credentialId"])
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
470 item.setData(0, self.UserIdRole, passDict["userId"])
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
471
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
472 self.passkeysList.sortItems(self.DisplayNameColumn, Qt.SortOrder.AscendingOrder)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
473 self.passkeysList.sortItems(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
474 self.RelyingPartyColumn, Qt.SortOrder.AscendingOrder
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
475 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
476
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
477 @pyqtSlot()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
478 def on_loadPasskeysButton_clicked(self):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
479 """
10856
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
480 Private slot to (re-)populate the passkeys list.
10854
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
481 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
482 self.__populatePasskeysList()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
483
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
484 @pyqtSlot()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
485 def on_passkeysList_itemSelectionChanged(self):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
486 """
10856
b19cefceca15 Continued implementing the FIDO2 security key management interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10854
diff changeset
487 Private slot handling the selection of a passkey.
10854
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
488 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
489 enableButtons = (
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
490 len(self.passkeysList.selectedItems()) == 1
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
491 and self.passkeysList.selectedItems()[0].parent() is not None
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
492 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
493 self.editButton.setEnabled(enableButtons)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
494 self.deleteButton.setEnabled(enableButtons)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
495
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
496 @pyqtSlot()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
497 def on_editButton_clicked(self):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
498 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
499 Private slot to edit the selected passkey.
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
500 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
501 from .Fido2PasskeyEditDialog import Fido2PasskeyEditDialog
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
502
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
503 selectedItem = self.passkeysList.selectedItems()[0]
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
504 dlg = Fido2PasskeyEditDialog(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
505 displayName=selectedItem.text(self.DisplayNameColumn),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
506 userName=selectedItem.text(self.UserNameColumn),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
507 relyingParty=selectedItem.parent().text(self.RelyingPartyColumn),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
508 parent=self,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
509 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
510 if dlg.exec() == QDialog.DialogCode.Accepted:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
511 displayName, userName = dlg.getData()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
512 if displayName != selectedItem.text(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
513 self.DisplayNameColumn
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
514 ) or userName != selectedItem.text(self.UserNameColumn):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
515 # only change on the security key, if there is really a change
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
516 pin = self.__getRequiredPin(feature=self.tr("Change User Info"))
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
517 try:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
518 self.__manager.changePasskeyUserInfo(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
519 pin=pin,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
520 credentialId=selectedItem.data(0, self.CredentialIdRole),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
521 userId=selectedItem.data(0, self.UserIdRole),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
522 userName=userName,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
523 displayName=displayName,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
524 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
525 except (Fido2DeviceError, Fido2PinError) as err:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
526 self.__handleError(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
527 error=err,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
528 title=self.tr("Change User Info"),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
529 message=self.tr("The user info could not be changed."),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
530 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
531 return
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
532
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
533 selectedItem.setText(self.DisplayNameColumn, displayName)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
534 selectedItem.setText(self.UserNameColumn, userName)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
535
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
536 @pyqtSlot()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
537 def on_deleteButton_clicked(self):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
538 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
539 Private slot to delete the selected passkey.
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
540 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
541 selectedItem = self.passkeysList.selectedItems()[0]
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
542
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
543 ok = EricMessageBox.yesNo(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
544 self,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
545 self.tr("Delete Passkey"),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
546 self.tr(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
547 "<p>Shall the selected passkey really be deleted?</p>"
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
548 "<ul>"
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
549 "<li>Relying Party: {0}</li>"
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
550 "<li>Display Name: {1}</li>"
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
551 "<li>User Name: {2}</li>"
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
552 "</ul>"
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
553 ).format(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
554 selectedItem.parent().text(self.RelyingPartyColumn),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
555 selectedItem.text(self.DisplayNameColumn),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
556 selectedItem.text(self.UserNameColumn),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
557 ),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
558 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
559 if ok:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
560 pin = self.__getRequiredPin(feature=self.tr("Delete Passkey"))
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
561 try:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
562 self.__manager.deletePasskey(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
563 pin=pin,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
564 credentialId=selectedItem.data(0, self.CredentialIdRole),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
565 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
566 except (Fido2DeviceError, Fido2PinError) as err:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
567 self.__handleError(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
568 error=err,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
569 title=self.tr("Delete Passkey"),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
570 message=self.tr("The passkey could not be deleted."),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
571 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
572 return
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
573
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
574 rpItem = selectedItem.parent()
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
575 index = rpItem.indexOfChild(selectedItem)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
576 rpItem.takeChild(index)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
577 del selectedItem
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
578 if rpItem.childCount() == 0:
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
579 index = self.passkeysList.indexOfTopLevelItem(rpItem)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
580 self.passkeysList.takeTopLevelItem(index)
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
581 del rpItem
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
582
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
583 ############################################################################
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
584 ## utility methods
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
585 ############################################################################
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
586
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
587 def __handleError(self, error, title, message):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
588 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
589 Private method to handle an error reported by the manager.
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
590
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
591 @param error reference to the exception object
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
592 @type Exception
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
593 @param title tirle of the message box
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
594 @type str
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
595 @param message message to be shown
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
596 @type str
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
597 """
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
598 EricMessageBox.critical(
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
599 self,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
600 title,
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
601 self.tr("<p>{0}</p><p>Reason: {1}</p>").format(message, str(error)),
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
602 )
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
603 if isinstance(error, Fido2DeviceError):
30c45bd597e6 Started implementing a dialog to manage FIDO2 security keys.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
604 self.__populateDeviceSelector()

eric ide

mercurial