|
24 | 24 | from nitrokeyapp.secrets_tab import SecretsTab |
25 | 25 | from nitrokeyapp.settings_tab import SettingsTab |
26 | 26 | from nitrokeyapp.touch import TouchIndicator |
| 27 | +from nitrokeyapp.utils import should_use_ccid |
27 | 28 |
|
28 | 29 | # import wizards and stuff |
29 | 30 | from nitrokeyapp.welcome_tab import WelcomeTab |
30 | 31 |
|
31 | 32 | logger = logging.getLogger(__name__) |
32 | 33 |
|
| 34 | +PASSKEYS_TAB_INDEX = 2 |
| 35 | +PASSKEYS_ADMIN_REQUIRED_MESSAGE = ( |
| 36 | + "Managing passkeys requires administrator privileges on Windows. " |
| 37 | + "Please restart the Nitrokey App as administrator to list or delete passkeys." |
| 38 | +) |
| 39 | + |
33 | 40 |
|
34 | 41 | class GUI(QtUtilsMixIn, QtWidgets.QMainWindow): |
35 | 42 | trigger_handle_exception = Signal(object, BaseException, object) |
@@ -129,6 +136,13 @@ def __init__(self, qt_app: QtWidgets.QApplication, log_file: str): |
129 | 136 | self.tabs.addTab(view.widget, view.title) |
130 | 137 | self.tabs.currentChanged.connect(self.tab_changed) |
131 | 138 |
|
| 139 | + # On Windows without admin rights, CTAPHID is unavailable so the |
| 140 | + # passkeys tab cannot list/delete credentials — keep it disabled and |
| 141 | + # surface the reason via tooltip on hover. |
| 142 | + self.passkeys_admin_required = should_use_ccid() |
| 143 | + if self.passkeys_admin_required: |
| 144 | + self.tabs.setTabToolTip(PASSKEYS_TAB_INDEX, PASSKEYS_ADMIN_REQUIRED_MESSAGE) |
| 145 | + |
132 | 146 | # set some spacing between Nitrokey buttons |
133 | 147 | self.ui.nitrokeyButtonsLayout.setSpacing(8) |
134 | 148 |
|
@@ -268,7 +282,7 @@ def show_device(self, data: DeviceData) -> None: |
268 | 282 | self.tabs.setTabVisible(1, is_nk3) |
269 | 283 | self.tabs.setTabEnabled(1, is_nk3) |
270 | 284 | self.tabs.setTabVisible(2, has_fido2) |
271 | | - self.tabs.setTabEnabled(2, has_fido2) |
| 285 | + self.tabs.setTabEnabled(2, has_fido2 and not self.passkeys_admin_required) |
272 | 286 | self.tabs.setTabEnabled(3, True) |
273 | 287 |
|
274 | 288 | self.show_navigation() |
|
0 commit comments