--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/eric7/eric7_fido2.py Fri Jul 19 18:06:48 2024 +0200 @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +eric FIDO2 Token Management. + +This is the main Python script that performs the necessary initialization +of the FIDO2 Security Key Management module and starts the Qt event loop. +This is a standalone version of the integrated FIDO2 Security Key Management +module. +""" + +import argparse +import importlib +import os +import sys + +from PyQt6.QtGui import QGuiApplication + + +def createArgparseNamespace(): + """ + Function to create an argument parser. + + @return created argument parser object + @rtype argparse.ArgumentParser + """ + from eric7.__version__ import Version + + # 1. create the argument parser + parser = argparse.ArgumentParser( + description="Management tool for FIDO2 Security Keys.", + epilog="Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de>.", + ) + + # 2. add the arguments + parser.add_argument( + "-V", + "--version", + action="version", + version="%(prog)s {0}".format(Version), + help="show version information and exit", + ) + parser.add_argument( + "--config", + metavar="config_dir", + help="use the given directory as the one containing the config files", + ) + parser.add_argument( + "--settings", + metavar="settings_dir", + help="use the given directory to store the settings files", + ) + + # 3. create the Namespace object by parsing the command line + args = parser.parse_args() + return args + + +args = createArgparseNamespace() +if args.config: + from eric7 import Globals + + Globals.setConfigDir(args.config) +if args.settings: + from PyQt6.QtCore import QSettings + + SettingsDir = os.path.expanduser(args.settings) + if not os.path.isdir(SettingsDir): + os.makedirs(SettingsDir) + QSettings.setPath( + QSettings.Format.IniFormat, QSettings.Scope.UserScope, SettingsDir + ) + +if importlib.util.find_spec("fido2") is None: + from PyQt6.QtCore import QTimer + from PyQt6.QtWidgets import QApplication + + from eric7.EricWidgets import EricMessageBox + + app = QApplication([]) + QTimer.singleShot( + 0, + lambda: EricMessageBox.critical( + None, + "FIDO2 Security Key Management", + "The required 'fido2' package is not installed. Aborting...", + ), + ) + app.exec() + sys.exit(100) + +from eric7.Toolbox import Startup + + +def createMainWidget(_args): + """ + Function to create the main widget. + + @param _args namespace object containing the parsed command line parameters + (unused) + @type argparse.Namespace + @return reference to the main widget + @rtype QWidget + """ + from eric7.WebBrowser.WebAuth.Fido2ManagementDialog import Fido2ManagementDialog + + return Fido2ManagementDialog() + + +def main(): + """ + Main entry point into the application. + """ + QGuiApplication.setDesktopFileName("eric7_fido2") + + res = Startup.appStartup(args, createMainWidget) + sys.exit(res) + + +if __name__ == "__main__": + main()