from loguru import logger import json import bcrypt import configparser from Server.DB.handler import QR, Product, Order, session, User config = configparser.ConfigParser() config.sections() config.read('Options.ini') class compare: def is_user_pass_valid(username, password): session_username = session.query(User).filter(User.username == username).one() session.commit() print(session_username.hashed_password) if bcrypt.hashpw(password.encode('utf-8'), session_username.salt) == session_username.hashed_password.encode('utf-8'): return True return False def is_QRSecret_valid(desk, secret):#TODO FIX! #Feature = True #TODO:Encryption Salting hasing and anti rainbow attack q = session.query(QR).\ filter(QR.desk.like(int(desk))).\ order_by(QR.qr_secret) q_QR = q.with_session(session).one() if q_QR.qr_secret == secret: return True else: return False def process_main(ordered_list, desk): ''' Get all verified Products from the order to the db entry Input: Array ordered_list, INT desk OUT: True, False if succeded adding to db ''' if compare.verifie_order(ordered_list): #products = Product() order = Order(desk) session.add(order) session.commit() for product in ordered_list: if int(product[0]) > 0: #dont add not ordered to list productDB = Product(quantity=int(product[0]),name=product[1],order_id = order.id) session.add(productDB) session.commit() logger.success("Order at desk "+ str(desk) +" resived") # add a new ordered_list to the database return True else: print("There was an invalid order! Someone messing whit source?") return False #TODO: Placeholder def verifie_order(ordered_list): ''' if self.desk > self.desk_numbers: return False ''' valid_products_list = get.valid_products() for product in ordered_list: print(product[1],' ', valid_products_list) if product[1] in valid_products_list: #product[0] is quantiiy 1 is name_product pass else: return False return True class add: def _create_user(username, password): if session.query(User).filter_by(username = username).count() < 1: bytes = password.encode('utf-8') salt = bcrypt.gensalt() hash = bcrypt.hashpw(bytes, salt).decode('utf-8') user = User(username = username, hashed_password = hash, salt= salt) session.add(user) session.commit() def _order(orders, desk): ''' add order to db INPUT: DICT orders, desk OUT: True succes False failure ''' pass class get: ''' def user_in_User(username): calls db if user in User table q_session = session.query(User).filter(User.username == username).one() session.commit() if q_session: return q_session.id return False ''' def valid_products(get_json_=False): global config with open(config['SETTINGS']['path_json_settings'], 'r') as file: #Parse Json Product List products = json.load(file) if get_json_: return products else: valide_products = [] for category in products.get('products'): for product in products.get('products').get(category): print(product) if int(product['quantity']) >= 0: valide_products.append(product['name']) return valide_products def all_orders(): # All unfinished orders (finished is False or string "False") result = [] desk = 1 orders = session.query(Order).filter(Order.finished == 0).all() session.commit() for order in orders: products = session.query(Product).filter(Product.order_id == order.id , Order.desk_number == desk).all() session.commit() list_products = [] for p in products: #What it shows in orders.html list_products.append(" x" + str(p.quantity) +" "+ p.name ) result.append((order.desk_number, list_products, order.id)) return result class update: #TODO GET JSON to -> DB def update_products_fromJSON(self): pass class set: def finish_order(order_number): order = session.query(Order).filter(Order.id == int(order_number)).first() if order: order.finished = 1 # or "True session.commit() logger.info("Order "+str(order_number)+" marked as finished.") return True else: return False