created user flow for gohain assignment
This commit is contained in:
93
goodchain/src/helpers/DatabaseHelper.py
Normal file
93
goodchain/src/helpers/DatabaseHelper.py
Normal file
@@ -0,0 +1,93 @@
|
||||
import sqlite3
|
||||
|
||||
class DatabaseHelper:
|
||||
def __init__(self, db=None):
|
||||
print("Initializing database")
|
||||
self.conn = None
|
||||
self.cursor = None
|
||||
|
||||
if db:
|
||||
self.open(db)
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def __exit__(self):
|
||||
self.close()
|
||||
|
||||
def open(self, db):
|
||||
try:
|
||||
self.conn = sqlite3.connect(db)
|
||||
self.cursor = self.conn.cursor()
|
||||
except:
|
||||
pass
|
||||
|
||||
def commit(self):
|
||||
if self.conn:
|
||||
self.conn.commit()
|
||||
|
||||
def query(self, sql, values=None):
|
||||
if values == None:
|
||||
self.cursor.execute(sql)
|
||||
self.commit()
|
||||
else:
|
||||
self.cursor.execute(sql, values)
|
||||
self.commit()
|
||||
|
||||
def close(self):
|
||||
if self.conn:
|
||||
self.conn.commit()
|
||||
self.conn.close()
|
||||
self.cursor.close()
|
||||
|
||||
# Query functions
|
||||
def loginUser(self, username, password):
|
||||
if not self.conn:
|
||||
return None
|
||||
try:
|
||||
self.cursor.execute("SELECT * FROM `users` WHERE (`username` = ? AND `password` = ?)", (username, password,))
|
||||
return self.cursor.fetchone()
|
||||
except sqlite3.Error as error:
|
||||
print(error)
|
||||
return None
|
||||
|
||||
def createUser(self, private_key, public_key, username, password):
|
||||
if not self.conn:
|
||||
return False
|
||||
try:
|
||||
self.cursor.execute("INSERT INTO `users` (private_key, public_key, username, password) VALUES (?, ?, ?, ?)", (private_key, public_key, username, password,))
|
||||
self.commit()
|
||||
return True
|
||||
except sqlite3.Error as error:
|
||||
print(error)
|
||||
return False
|
||||
|
||||
def changePasswordUser(self, user_privatekey, password):
|
||||
if not self.conn:
|
||||
return None
|
||||
|
||||
try:
|
||||
self.cursor.execute("UPDATE `users` SET `password` = ? WHERE `private_key` = ?", (password, user_privatekey,))
|
||||
self.commit()
|
||||
|
||||
return True
|
||||
|
||||
except sqlite3.Error as error:
|
||||
print(error)
|
||||
return None
|
||||
|
||||
def fetchUserByUsername(self, username):
|
||||
if not self.conn:
|
||||
return None
|
||||
|
||||
try:
|
||||
self.cursor.execute("SELECT * FROM `users` WHERE `username` = ?", (username,))
|
||||
|
||||
return self.cursor.fetchone()
|
||||
|
||||
except sqlite3.Error as error:
|
||||
print(error)
|
||||
return None
|
||||
|
||||
def checkMigrations(self):
|
||||
self.query("CREATE TABLE IF NOT EXISTS `users` ( `private_key` BLOB NOT NULL , `public_key` BLOB NOT NULL , `username` VARCHAR(255) NOT NULL , `password` VARCHAR(255) NOT NULL )")
|
1
goodchain/src/helpers/LoggerHelper.py
Normal file
1
goodchain/src/helpers/LoggerHelper.py
Normal file
@@ -0,0 +1 @@
|
||||
# Not sure if we're planning to log anything tho
|
122
goodchain/src/helpers/MenuHelper.py
Normal file
122
goodchain/src/helpers/MenuHelper.py
Normal file
@@ -0,0 +1,122 @@
|
||||
import os
|
||||
|
||||
from classes.User import User
|
||||
|
||||
class bcolors:
|
||||
HEADER = '\033[95m'
|
||||
OKBLUE = '\033[94m'
|
||||
OKCYAN = '\033[96m'
|
||||
OKGREEN = '\033[92m'
|
||||
WARNING = '\033[93m'
|
||||
FAIL = '\033[91m'
|
||||
ENDC = '\033[0m'
|
||||
BOLD = '\033[1m'
|
||||
UNDERLINE = '\033[4m'
|
||||
|
||||
class MenuHelper:
|
||||
def __init__(self, db):
|
||||
self.db = db
|
||||
|
||||
self.start_menu = {}
|
||||
self.user_menu = {}
|
||||
|
||||
self.start_menu[0] = "Exit"
|
||||
self.start_menu[1] = "Explore the Blockchain"
|
||||
self.start_menu[2] = "Login"
|
||||
self.start_menu[3] = "Sign up"
|
||||
|
||||
self.user_menu[0] = "Log out"
|
||||
self.user_menu[1] = "Explore the Blockchain"
|
||||
self.user_menu[2] = "Transfer coins"
|
||||
self.user_menu[3] = "Cancel transaction"
|
||||
self.user_menu[4] = "Check balance"
|
||||
self.user_menu[5] = "Check the pool"
|
||||
self.user_menu[6] = "Mine a block"
|
||||
|
||||
self.opened_logs = False
|
||||
|
||||
def printMenu(self, items):
|
||||
for key, value in items.items():
|
||||
print(f'{key} -- {value}')
|
||||
|
||||
def runStartMenu(self):
|
||||
while(True):
|
||||
self.printMenu(self.start_menu)
|
||||
# make input an interger
|
||||
try:
|
||||
choice = int(input())
|
||||
except:
|
||||
self.clearScreen()
|
||||
print("Wrong input, try again")
|
||||
continue
|
||||
self.clearScreen()
|
||||
|
||||
# check if choice is in menu
|
||||
match self.start_menu[choice]:
|
||||
case "Exit":
|
||||
print('Exiting system')
|
||||
exit()
|
||||
|
||||
case "Explore the Blockchain":
|
||||
pass
|
||||
|
||||
case "Login":
|
||||
user = User(self.db)
|
||||
logged_in = user.login()
|
||||
self.clearScreen()
|
||||
if logged_in:
|
||||
print(f'Welcome {user.username}')
|
||||
return user
|
||||
print("Login failed")
|
||||
|
||||
case "Sign up":
|
||||
new_user = User(self.db)
|
||||
registered = new_user.register()
|
||||
if registered:
|
||||
print("Registration successful")
|
||||
return new_user
|
||||
print("Registration failed")
|
||||
|
||||
case _:
|
||||
print("Wrong input, try again")
|
||||
|
||||
def runUserMenu(self, user):
|
||||
while(True):
|
||||
self.printMenu(self.user_menu)
|
||||
# make input an interger
|
||||
try:
|
||||
choice = int(input())
|
||||
except:
|
||||
self.clearScreen()
|
||||
print("Wrong input, try again")
|
||||
continue
|
||||
self.clearScreen()
|
||||
|
||||
# check if choice is in menu
|
||||
match self.user_menu[choice]:
|
||||
case "Log out":
|
||||
user.logout()
|
||||
|
||||
case "Explore the Blockchain":
|
||||
pass
|
||||
|
||||
case "Transfer coins":
|
||||
pass
|
||||
|
||||
case "Cancel transaction":
|
||||
pass
|
||||
|
||||
case "Check balance":
|
||||
pass
|
||||
|
||||
case "Check the pool":
|
||||
pass
|
||||
|
||||
case "Mine a block":
|
||||
pass
|
||||
|
||||
case _:
|
||||
print("Wrong input, try again")
|
||||
|
||||
def clearScreen(self):
|
||||
os.system('cls' if os.name == 'nt' else 'clear')
|
Reference in New Issue
Block a user