-
Notifications
You must be signed in to change notification settings - Fork 5
/
LoginApp.py
116 lines (98 loc) · 4.44 KB
/
LoginApp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import sys
from PyQt5 import QtWidgets
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QApplication, QMainWindow
from UserBank import *
class Navigations(object):
def login_page(self):
self.close()
self.login_screen = LoginScreen()
screens.addWidget(self.login_screen)
screens.setCurrentIndex(screens.currentIndex() + 1)
def register_page(self):
self.close()
self.signup_screen = SignUpScreen()
screens.addWidget(self.signup_screen)
screens.setCurrentIndex(screens.currentIndex() + 1)
def welcome_page(self, username):
self.close()
self.welcome_screen = WelcomeScreen(username)
screens.addWidget(self.welcome_screen)
screens.setCurrentIndex(screens.currentIndex() + 1)
def exit(self):
self.closeDb()
sys.exit()
def closeDb(self):
self.database.cursor.close()
self.database.connection.close()
class LoginScreen(QMainWindow, Navigations):
def __init__(self):
super(LoginScreen, self).__init__()
loadUi('Screens/LoginScreen.ui', self)
screens.setWindowTitle("Login System | Login")
self.login_button.clicked.connect(self.login)
self.signup_button.clicked.connect(self.register_page)
self.exit_button.clicked.connect(self.exit)
self.database = Database()
def login(self):
username = self.username_input.text()
password = self.password_input.text()
user_data = self.database.get_account(username)
try:
if user_data["username"] == username and self.database.verify_password(user_data["password"], password):
self.welcome_page(username)
else:
self.feedback_label.setText("Invalid username or password")
except Exception as e:
self.feedback_label.setText(e)
class SignUpScreen(QMainWindow, Navigations):
def __init__(self):
super(SignUpScreen, self).__init__()
loadUi('Screens/SignUpScreen.ui', self)
screens.setWindowTitle("Login System | Sign Up")
self.create_button.clicked.connect(self.sign_up)
self.login_button.clicked.connect(self.login_page)
self.exit_button.clicked.connect(self.exit)
self.database = Database()
def sign_up(self):
def _validate_input(username, password, v_password):
user_len = lambda username: "True" if len(username) > 5 and len(username) < 15 else "Min. 6 & Max. 16 characters in usernames."
same_pass = lambda password, v_password: "True" if password == v_password else "Passwords do not match!"
pass_len = lambda password: "True" if len(password) > 7 and len(password) < 63 else "Min. 8 & Max. 64 characters in passwords"
conditions = [user_len(username), same_pass(password, v_password), pass_len(password)]
for condition in conditions:
if condition != "True":
return condition
return "True"
username = self.username_input.text()
password = self.password_input.text()
v_password = self.confirm_password_input.text()
result = _validate_input(username, password, v_password)
if result == "True":
user_data = self.database.get_account(username)
if user_data["username"] is None:
self.database.save_account(username, password)
self.login_page()
else:
self.feedback_label.setText("Username already exists!")
else:
self.feedback_label.setText(result)
class WelcomeScreen(QMainWindow, Navigations):
def __init__(self, username):
self.username = username.split('@')[0]
super(WelcomeScreen, self).__init__()
loadUi('Screens/WelcomeScreen.ui', self)
screens.setWindowTitle("Login System | Welcome")
self.welcome_label.setText(f"Welcome {self.username}")
self.logout_button.clicked.connect(self.login_page)
self.exit_button.clicked.connect(self.exit)
self.database = Database()
if __name__ == "__main__":
app = QApplication(sys.argv)
screens = QtWidgets.QStackedWidget()
login_window = LoginScreen()
screens.addWidget(login_window)
screens.setFixedHeight(600)
screens.setFixedWidth(800)
screens.show()
sys.exit(app.exec_())