Login, user in datenbank und encryption key
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user