index : archinstall32 | |
Archlinux32 installer | gitolite user |
summaryrefslogtreecommitdiff |
author | Daniel Girtler <blackrabbit256@gmail.com> | 2023-07-25 19:19:14 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-25 11:19:14 +0200 |
commit | a548d7df70102252a557214edc74b77f4859f031 (patch) | |
tree | 34fafdea7186d97bcb3043945ee259aa0565eae0 /archinstall | |
parent | 439bb5428bb6a6f512f695a83ee6b3b8f6537598 (diff) |
-rw-r--r-- | archinstall/lib/disk/encryption_menu.py | 25 | ||||
-rw-r--r-- | archinstall/lib/disk/fido.py | 9 | ||||
-rw-r--r-- | archinstall/lib/menu/menu.py | 9 | ||||
-rw-r--r-- | archinstall/lib/output.py | 14 |
diff --git a/archinstall/lib/disk/encryption_menu.py b/archinstall/lib/disk/encryption_menu.py index 89eade2b..234e3b03 100644 --- a/archinstall/lib/disk/encryption_menu.py +++ b/archinstall/lib/disk/encryption_menu.py @@ -71,6 +71,7 @@ class DiskEncryptionMenu(AbstractSubMenu): description=_('Use HSM to unlock encrypted drive'), func=lambda preset: select_hsm(preset), display_func=lambda x: self._display_hsm(x), + preview_func=self._prev_hsm, dependencies=['encryption_password'], default=self._preset.hsm_device, enabled=True @@ -93,8 +94,6 @@ class DiskEncryptionMenu(AbstractSubMenu): if device: return device.manufacturer - if not Fido2.get_fido2_devices(): - return str(_('No HSM devices available')) return None def _prev_disk_layouts(self) -> Optional[str]: @@ -106,6 +105,22 @@ class DiskEncryptionMenu(AbstractSubMenu): return None + def _prev_hsm(self) -> Optional[str]: + try: + Fido2.get_fido2_devices() + except ValueError: + return str(_('Unable to determine fido2 devices. Is libfido2 installed?')) + + fido_device: Optional[Fido2Device] = self._menu_options['HSM'].current_selection + + if fido_device: + output = '{}: {}'.format(str(_('Path')), fido_device.path) + output += '{}: {}'.format(str(_('Manufacturer')), fido_device.manufacturer) + output += '{}: {}'.format(str(_('Product')), fido_device.product) + return output + + return None + def select_encryption_type(preset: EncryptionType) -> Optional[EncryptionType]: title = str(_('Select disk encryption option')) @@ -130,7 +145,11 @@ def select_encrypted_password() -> Optional[str]: def select_hsm(preset: Optional[Fido2Device] = None) -> Optional[Fido2Device]: title = _('Select a FIDO2 device to use for HSM') - fido_devices = Fido2.get_fido2_devices() + + try: + fido_devices = Fido2.get_fido2_devices() + except ValueError: + return None if fido_devices: choice = TableMenu(title, data=fido_devices).run() diff --git a/archinstall/lib/disk/fido.py b/archinstall/lib/disk/fido.py index d8c8fd3c..96a74991 100644 --- a/archinstall/lib/disk/fido.py +++ b/archinstall/lib/disk/fido.py @@ -7,6 +7,7 @@ from typing import List, Optional from .device_model import PartitionModification, Fido2Device from ..general import SysCommand, SysCommandWorker, clear_vt100_escape_codes from ..output import error, info +from ..exceptions import SysCallError class Fido2: @@ -36,13 +37,13 @@ class Fido2: # to prevent continous reloading which will slow # down moving the cursor in the menu if not cls._loaded or reload: - ret: Optional[str] = None try: - ret = SysCommand("systemd-cryptenroll --fido2-device=list").decode('UTF-8') - except: + ret: Optional[str] = SysCommand("systemd-cryptenroll --fido2-device=list").decode('UTF-8') + except SysCallError: error('fido2 support is most likely not installed') + raise ValueError('HSM devices can not be detected, is libfido2 installed?') + if not ret: - error('Unable to retrieve fido2 devices') return [] fido_devices: str = clear_vt100_escape_codes(ret) # type: ignore diff --git a/archinstall/lib/menu/menu.py b/archinstall/lib/menu/menu.py index 768dfe55..358ba5e4 100644 --- a/archinstall/lib/menu/menu.py +++ b/archinstall/lib/menu/menu.py @@ -34,6 +34,11 @@ class MenuSelection: class Menu(TerminalMenu): + _menu_is_active: bool = False + + @staticmethod + def is_menu_active() -> bool: + return Menu._menu_is_active @classmethod def back(cls) -> str: @@ -260,6 +265,8 @@ class Menu(TerminalMenu): return MenuSelection(type_=MenuSelectionType.Skip) def run(self) -> MenuSelection: + Menu._menu_is_active = True + selection = self._show() if selection.type_ == MenuSelectionType.Reset: @@ -277,6 +284,8 @@ class Menu(TerminalMenu): selection.type_ = MenuSelectionType.Skip selection.value = None + Menu._menu_is_active = False + return selection def set_cursor_pos(self,pos :int): diff --git a/archinstall/lib/output.py b/archinstall/lib/output.py index d1c95ec5..9f2a2ae3 100644 --- a/archinstall/lib/output.py +++ b/archinstall/lib/output.py @@ -318,9 +318,11 @@ def log( Journald.log(text, level=level) - # Finally, print the log unless we skipped it based on level. - # We use sys.stdout.write()+flush() instead of print() to try and - # fix issue #94 - if level != logging.DEBUG or storage.get('arguments', {}).get('verbose', False): - sys.stdout.write(f"{text}\n") - sys.stdout.flush() + from .menu import Menu + if not Menu.is_menu_active(): + # Finally, print the log unless we skipped it based on level. + # We use sys.stdout.write()+flush() instead of print() to try and + # fix issue #94 + if level != logging.DEBUG or storage.get('arguments', {}).get('verbose', False): + sys.stdout.write(f"{text}\n") + sys.stdout.flush() |