Files
Projects/gui/main.py

105 lines
3.6 KiB
Python

import json
import sys
import base64
import time
from typing import Callable, Any
from PySide6.QtWidgets import QApplication, QWidget, QMessageBox, QMainWindow
from PySide6.QtGui import QIcon, QPixmap, QShortcut
from PySide6.QtCore import Qt
from codes.ui.login import Ui_login
from codes.ui.app import Ui_MainWindow
from codes.common.worker import Worker
from codes.common import clibs
from codes.common.secure_encrypt import PassCipher
from codes.common import db_operation
class LoginWindow(QWidget, Ui_login):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pre_dos()
def pre_dos(self):
self.setWindowIcon(QIcon(f"{clibs.base_path}/assets/media/icon.ico"))
self.lb_logo.setPixmap(QPixmap(f"{clibs.base_path}/assets/media/avatar.png"))
self.lb_logo.setScaledContents(True)
# bindings
QShortcut("Esc", self).activated.connect(self.close)
self.pb_login.clicked.connect(self.login)
self.pb_cancel.clicked.connect(self.close)
self.le_password.returnPressed.connect(self.login)
def login(self):
def login_failed():
QMessageBox.warning(self, "告警", "\n用户名或密码不正确,请重新输入!")
self.le_username.setText("")
self.le_password.setText("")
def gen_salt():
clibs.salt = ""
key = ""
passwd = {idx: char for idx, char in enumerate(self.le_password.text() * 4)}
for idx in range(32):
char_i = 0 if ord(passwd[idx]) - clibs.code_dict[idx] < 0 else ord(passwd[idx]) - clibs.code_dict[idx]
key += chr(char_i)
clibs.salt = base64.urlsafe_b64encode(key.encode()).decode()
def validate_login():
# with open(f"{clibs.base_path}/assets/conf/config.json", mode="rt", encoding="utf-8") as f_conf:
# accounts = json.load(f_conf)["account"]
# username = self.le_username.text()
# if username not in accounts or len(self.le_password.text()) < 8:
# login_failed()
# return False
#
# gen_salt()
# cipher = PassCipher(clibs.salt)
# try:
# password = cipher.decrypt(accounts[username])
# except ValueError:
# login_failed()
# return False
#
# if password != self.le_password.text():
# login_failed()
# return False
self.mainWindow = MainWindow()
self.mainWindow.show()
self.close()
self.deleteLater()
return True
validate_login()
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.conn = None
self.cursor = None
self.thread = None
self.setupUi(self)
self.pre_dos()
def pre_dos(self):
self.setWindowIcon(QIcon(f"{clibs.base_path}/assets/media/icon.ico"))
db_operation.db_backup()
self.conn, self.cursor = db_operation.db_conn()
def launch(self, func, on_anything: Callable[..., Any] = print, *args, **kwargs):
self.thread = Worker(func, *args, **kwargs)
self.thread.started.connect(lambda: on_anything({"started": True}))
self.thread.result.connect(on_anything)
self.thread.error.connect(on_anything)
self.thread.finished.connect(lambda: on_anything({"finished": True}))
self.thread.start()
if __name__ == '__main__':
app = QApplication(sys.argv)
login = LoginWindow()
login.show()
sys.exit(app.exec())