From 5f084358165b4f40c8d196c3d06b5f202aef7ead9524796044830477dde2192c Mon Sep 17 00:00:00 2001 From: Marco Gatzen Date: Mon, 9 Dec 2024 16:35:54 +0100 Subject: [PATCH] recoveryfile --- Gui/AddCustomer.qml | 3 + Gui/AdminUserConfig.qml | 5 + Gui/firststart.qml | 64 ++++- doc/.$Programmstart Diagramm.drawio.dtmp | 288 ----------------------- doc/Programmstart Diagramm.drawio | 83 ++++--- doc/Programmstart Diagramm.pdf | Bin 37308 -> 38407 bytes lib/ConfigLoader.py | 66 +++++- main.py | 23 +- 8 files changed, 183 insertions(+), 349 deletions(-) delete mode 100644 doc/.$Programmstart Diagramm.drawio.dtmp diff --git a/Gui/AddCustomer.qml b/Gui/AddCustomer.qml index 2665c95..faff464 100644 --- a/Gui/AddCustomer.qml +++ b/Gui/AddCustomer.qml @@ -2,6 +2,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls import QtQuick.Controls.Fusion +import QtQuick.Dialogs import "../js/qmldict.js" as JsLib ColumnLayout @@ -258,6 +259,8 @@ ColumnLayout id: spacer3 Layout.fillHeight: true } + + function isEmptyField() { if (!firmenName.text.trim() || !street.text.trim() || !city.text.trim()) diff --git a/Gui/AdminUserConfig.qml b/Gui/AdminUserConfig.qml index 04a2353..6863a15 100644 --- a/Gui/AdminUserConfig.qml +++ b/Gui/AdminUserConfig.qml @@ -70,9 +70,13 @@ GridLayout { Layout.fillHeight: true } + + + Component.onCompleted: { config.usernameNotAvailable.connect(usernameNotAvailable) + } function usernameNotAvailable() { @@ -81,6 +85,7 @@ GridLayout benutzerNamelabel.color = "red" benutzerNamelabel.font.bold = true } + } diff --git a/Gui/firststart.qml b/Gui/firststart.qml index ebe38c4..579c52e 100644 --- a/Gui/firststart.qml +++ b/Gui/firststart.qml @@ -2,16 +2,26 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls import QtQuick.Dialogs +import QtCore import "../js/qmldict.js" as Qmldict Item { + property string recpass: "" + property bool adminAvailable: true Component.onCompleted: { config.dbConnectionError.connect(onDbConnectionError) config.adminUserError.connect(onAdminUserError) + config.backupEncryptionKey.connect(onBackupEncryptionKey) + + } + + function onBackupEncryptionKey() + { + recoveryDialog.open() } function onDbConnectionError(msg, success) @@ -27,8 +37,43 @@ Item encryptPwDialog.open() } else + { + adminAvailable = false firstStart.push("AdminUserConfig.qml") + } + } + MessageDialog + { + id: recoveryDialog + + text: qsTr("Diesen Wiederherstellungscode musst du sicher aufbewahren!\nMöchtest du das jetzt machen?") + title: qsTr("Wiederherstellen") + buttons: MessageDialog.Yes | MessageDialog.No + onAccepted: saveRecoveryDialog.open() + + } + FileDialog + { + id: saveRecoveryDialog + title: qsTr("Wiederherstellungsdatei") + fileMode: adminAvailable? FileDialog.OpenFile: FileDialog.SaveFile + nameFilters: ["PYQCRM Recovery files (*.pyqrec)"] + currentFolder: StandardPaths.standardLocations(StandardPaths.DocumentsLocation)[0] + onAccepted: + { + if (!adminAvailable) config.saveRecoveryKey(saveRecoveryDialog.currentFile, recpass) + else + { + config.getRecoveryKey(saveRecoveryDialog.currentFile, recpass) + + } + appLoader.source = "Dashboard.qml" + topBar.visible = true + } + + } + MessageDialog { @@ -43,15 +88,14 @@ Item { id: encryptPwDialog modal: true - title: qsTr("Encryption Key") + title: qsTr("Wiederherstellung") anchors.centerIn: parent standardButtons: Dialog.Ok | Dialog.Cancel onAccepted: { - // TODO: signal for EncryptionKey testing - config.setEncyrptKey(encryptPassword.text) - appLoader.source = "Dashboard.qml" - topBar.visible = true + recpass = encryptPassword.text + saveRecoveryDialog.open() + } ColumnLayout { @@ -59,7 +103,7 @@ Item { Label { - text: qsTr("Encryption Key eingeben:") + text: qsTr("Wiederherstellungspasswort eingeben: ") } TextField @@ -67,12 +111,14 @@ Item id: encryptPassword echoMode: TextInput.Password implicitWidth: 300 - placeholderText: qsTr("Hier Encryption Key eingeben") + placeholderText: qsTr("Hier Wiederherstellungspasswort eingeben") } } } } + + anchors.fill: parent StackView { @@ -129,8 +175,8 @@ Item admin = config.addAdminUser(pyqcrm_conf) if (admin) { - appLoader.source = "Dashboard.qml" - topBar.visible = true + //appLoader.source = "Dashboard.qml" + //topBar.visible = true } else { diff --git a/doc/.$Programmstart Diagramm.drawio.dtmp b/doc/.$Programmstart Diagramm.drawio.dtmp deleted file mode 100644 index 2e2067a..0000000 --- a/doc/.$Programmstart Diagramm.drawio.dtmp +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/Programmstart Diagramm.drawio b/doc/Programmstart Diagramm.drawio index 1aea176..a240a8c 100644 --- a/doc/Programmstart Diagramm.drawio +++ b/doc/Programmstart Diagramm.drawio @@ -81,7 +81,7 @@ - + @@ -91,12 +91,12 @@ - + - + - + @@ -111,7 +111,7 @@ - + @@ -121,7 +121,7 @@ - + @@ -174,7 +174,7 @@ - + @@ -197,10 +197,7 @@ - - - - + @@ -221,18 +218,7 @@ - - - - - - - - - - - - + @@ -243,38 +229,32 @@ - - - - - - - + - + - + - + - + @@ -282,6 +262,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/Programmstart Diagramm.pdf b/doc/Programmstart Diagramm.pdf index 259a89a78dea3f1c3502a613d3c2f8be3e47e8a8709cfb1ac251a3c7b3b8d37e..055acff2cc9901fe25f7b1f30fa49e073c9619fba715a2255182f917c036ce0a 100644 GIT binary patch literal 38407 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

H^ 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 AGXMYp diff --git a/lib/ConfigLoader.py b/lib/ConfigLoader.py index 1f0e165..4922204 100644 --- a/lib/ConfigLoader.py +++ b/lib/ConfigLoader.py @@ -24,7 +24,8 @@ class ConfigLoader(QObject): dbConnectionError = Signal(str, bool) adminUserError = Signal(str, bool) usernameNotAvailable = Signal() - configurationReady = Signal() + configurationReady = Signal(bool) + backupEncryptionKey = Signal() def __init__(self): super().__init__() @@ -36,6 +37,51 @@ class ConfigLoader(QObject): else: config_dir.mkdir(0o750, True, True) + @Slot(str, str) + def saveRecoveryKey(self, recovery_file, recovery_password): + rp = self.__setRecoveryPassword(recovery_password) + rf = rp[1] + self.__encrypt_key + rp[0] + rf = Vermasseln().oscarVermasseln(rf) + rec_file = urlparse(recovery_file) + rec_file = rec_file.path + if os.name == "nt": + rec_file = rec_file [1:] + try: + with open(rec_file, "w") as f: + f.write(rf) + self.configurationReady.emit(True) + except Exception as e: + print(str(e)) + + + @Slot(str, str) + def getRecoveryKey(self, recovery_file, recovery_password): + rec_file = urlparse(recovery_file) + rec_file = rec_file.path + if os.name == "nt": + rec_file = rec_file [1:] + try: + with open(rec_file, "r") as f: + rf = f.read() + rf = Vermasseln().entschluesseln(rf) + ek = rf[128:] + ek = ek[:-32] + password = rf[:128] + salt = rf[-32:] + ok = self.__checkRecoveryPassword(recovery_password, password, salt) + if ok: + self.configurationReady.emit(True) + else: + self.configurationReady.emit(False) + except Exception as e: + print(str(e)) + + def __checkRecoveryPassword(self, recovery_password, password, salt): + rp = self.__setRecoveryPassword(recovery_password, salt) + return rp[1] == password + + + @Slot(str, str) def importConfig(self, confile, password): @@ -52,6 +98,8 @@ class ConfigLoader(QObject): if not admin: self.usernameNotAvailable.emit() + else: + self.backupEncryptionKey.emit() return admin @Slot(dict, result= bool) @@ -66,7 +114,7 @@ class ConfigLoader(QObject): self.__saveConfig() conf = self.__checkAdminUser() if conf: - self.configurationReady.emit() + self.configurationReady.emit(True) @@ -75,6 +123,7 @@ class ConfigLoader(QObject): with open (self.config_dir + '/pyqcrm.toml', 'r') as f: config = f.read() self.__config = toml.loads(Vermasseln().entschluesseln(config)) + self.configurationReady.emit(True) except FileNotFoundError: print("Konnte die Konfiguration nicht laden.") except TypeError: @@ -87,8 +136,8 @@ class ConfigLoader(QObject): return self.__config def __initializeConfig(self): - encrypt_key = b64encode(get_random_bytes(32)).decode("utf-8") - conf = f"[pyqcrm]\nVERSION = \"{self.__version}\"\nENCRYPTION_KEY = \"{encrypt_key}\"\n\n" + self.__encrypt_key = b64encode(get_random_bytes(32)).decode("utf-8") + conf = f"[pyqcrm]\nVERSION = \"{self.__version}\"\nENCRYPTION_KEY = \"{self.__encrypt_key}\"\n\n" return conf @@ -114,12 +163,13 @@ class ConfigLoader(QObject): self.adminUserError.emit("Admin vorhanden", True) return True - @Slot(str) - def setEncyrptKey(self, key): - self.__config['pyqcrm']['ENCRYPTION_KEY'] = key - self.__saveConfig() + + def __setRecoveryPassword(self, key, salt = None): + key = Vermasseln.userPasswordHash(key, salt) + return key.split("$") def __saveConfig(self): + try: with open (self.config_dir + '/pyqcrm.toml', 'w') as f: config = Vermasseln().oscarVermasseln(toml.dumps(self.__config)) diff --git a/main.py b/main.py index b1b27a2..6826d29 100644 --- a/main.py +++ b/main.py @@ -30,16 +30,19 @@ am = None bm = None user = None -def initializeProgram(): - global am, bad_config, bm, user - dbconf = config.getConfig()['database'] - DbManager(dbconf) - bad_config = False - bm = BusinessModel() - user = UserManager() - am = AddressModel() - - publishContext() +def initializeProgram(conf_ok): + if conf_ok: + global am, bad_config, bm, user + dbconf = config.getConfig()['database'] + DbManager(dbconf) + bad_config = False + bm = BusinessModel() + user = UserManager() + am = AddressModel() + publishContext() + else: + # TODO: show message and exit program + print("Kein Zugriff auf die Datenbank") def publishContext(): global engine