Login, user in datenbank und encryption key

This commit is contained in:
2024-12-02 16:15:26 +01:00
parent 70ad4d557b
commit 5bf35ce12a
9 changed files with 309 additions and 309 deletions

View File

@@ -15,6 +15,7 @@ from .PyqcrmFlags import PyqcrmFlags
class ConfigLoader(QObject):
__config = None
__version = "0.1-alpha"
@@ -22,6 +23,7 @@ class ConfigLoader(QObject):
dbConnectionError = Signal(str, bool)
adminUserError = Signal(str, bool)
usernameNotAvailable = Signal()
def __init__(self):
super().__init__()
@@ -46,7 +48,10 @@ class ConfigLoader(QObject):
@Slot(dict, result= bool)
def addAdminUser(self, user_config):
admin = UserManager(user_config["user"], PyqcrmFlags.ADMIN).createUser()
return True
print (admin)
if not admin:
self.usernameNotAvailable.emit()
return admin
@Slot(dict, result= bool)
def setConfig(self, app_config):
@@ -93,12 +98,21 @@ class ConfigLoader(QObject):
return False
def __checkAdminUser(self):
con = DbManager().getConnection()
cur = con.cursor()
cur.callproc("checkAdmin")
result = cur.fetchall()
if not result:
#if not result[0][0] == 1:
self.adminUserError.emit("Kein Admin vorhanden", False)
else:
self.adminUserError.emit("Admin vorhanden", True)
self.adminUserError.emit("Kein Admin vorhanden", False)
@Slot(str)
def setEncyrptKey(self, key):
self.__config['pyqcrm']['ENCRYPTION_KEY'] = key
print(self.__config)
self.__saveConfig()
def __saveConfig(self):

View File

@@ -1,5 +1,7 @@
from .DbManager import DbManager
from ..PyqcrmFlags import PyqcrmFlags
from ..Vermasseln import Vermasseln
import mariadb
@@ -15,9 +17,24 @@ class UserManager():
def createUser(self):
self.__cur.callproc("createUser", (self.__username, self.__password, self.__info, self.__role))
self.__con.commit()
self.__closeConnection()
self.__hashPassword()
user_created = True
try:
self.__cur.callproc("createUser", (self.__username, self.__password, self.__info, self.__role))
self.__con.commit()
except mariadb.Error as e:
print(f"Error: {e}")
print(e.errno)
user_created = False
finally:
self.__cur.close()
#self.__closeConnection()
return user_created
def __hashPassword(self):
self.__password = Vermasseln.userPasswordHash(self.__password)
print (self.__password)
def getUser(self):
self.__closeConnection()

View File

@@ -2,7 +2,11 @@
from Crypto.Cipher import AES
from base64 import b64encode, b64decode
import platform
from Crypto.Hash import SHA256
from Crypto.Hash import SHA256, SHA3_512
from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes
import random
import string
class Vermasseln:
@@ -42,6 +46,18 @@ class Vermasseln:
cipher = AES.new(hashed, AES.MODE_SIV, nonce = nonce)
return cipher
@classmethod
def userPasswordHash(self, password):
salt = "".join(random.choice(string.ascii_letters + string.digits) for i in range (32))
hash_pw = (salt + password).encode("utf-8")
h_obj = SHA3_512.new(hash_pw)
password = salt + "$" + h_obj.hexdigest()
return password