new project for personal toolbox
This commit is contained in:
104
gui/main.py
Normal file
104
gui/main.py
Normal file
@@ -0,0 +1,104 @@
|
||||
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())
|
Reference in New Issue
Block a user