From 2959c3940120fd2c498df09585b8d298ece6f285 Mon Sep 17 00:00:00 2001 From: craisin Date: Thu, 27 Nov 2025 18:18:18 -0800 Subject: [PATCH] user addition --- .gitignore | 2 ++ allfence.py | 30 +++++++++++++++++++++++++---- app.py | 50 ++++++++++++++++++++++++------------------------ requirements.txt | 1 + 4 files changed, 54 insertions(+), 29 deletions(-) diff --git a/.gitignore b/.gitignore index 7dff61a..ad03e5c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +data +test.py TODO.md .venv __pycache__ \ No newline at end of file diff --git a/allfence.py b/allfence.py index 019ebe2..2d7b31c 100644 --- a/allfence.py +++ b/allfence.py @@ -1,10 +1,32 @@ -from hashlib import sha256 +import bcrypt def create_user(db, login_info, user_info): - pass -def update_user(db, login_info, user_info): - pass + """ + Creates a new user + + Parameters: + db (psycopg2.connection): connection to postgres database + login_info (dict of str:int): username and password info + user_info (dict of str:int): name and dob info + + Returns: + bool: success of user creation + str: result message + """ + + username, password = login_info["username"], login_info["password"] + password_hash = bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode() + name, dob = user_info["name"], user_info["dob"] + with db: + with db.cursor() as curs: + curs.execute("SELECT * FROM Users WHERE username = %s", (username,)) + conflicts = curs.fetchall() + if conflicts: + return False, "Duplicate username" + curs.execute("INSERT INTO Users (username, password_hash, name, dob) VALUES (%s, %s, %s, %s)", (username, password_hash, name, dob)) + db.commit() + return True, "Success" def get_user(db, id): pass diff --git a/app.py b/app.py index 56a74bb..c5e2f6f 100644 --- a/app.py +++ b/app.py @@ -1,6 +1,7 @@ import allfence as af from flask import Flask import psycopg2 as sql +from textwrap import dedent DB_NAME, USER, PASSWORD, HOST, PORT = "database", "user", "password", "localhost", "5432" db_connection = sql.connect( @@ -10,31 +11,30 @@ db_connection = sql.connect( host=HOST, port = PORT ) -db_cursor = db_connection.cursor() -db_cursor.execute(""" -CREATE TABLE IF NOT EXISTS Users ( - id SERIAL PRIMARY KEY, - name varchar(255), - username varchar(255), - dob varchar(255), - password_hash varchar(255) -); -CREATE TABLE IF NOT EXISTS Events ( - id SERIAL PRIMARY KEY, - name varchar(255), - datetime varchar(255), - users varchar(255), - results varchar(255) -); -CREATE TABLE IF NOT EXISTS Tournaments ( - id SERIAL PRIMARY KEY, - name varchar(255), - start_date varchar(255), - end_date varchar(255), - events varchar(255) -); -""") - +with db_connection.cursor() as cursor: + cursor.execute(dedent(""" + CREATE TABLE IF NOT EXISTS Users ( + id SERIAL PRIMARY KEY, + name varchar(255), + username varchar(255), + dob varchar(255), + password_hash varchar(255) + ); + CREATE TABLE IF NOT EXISTS Events ( + id SERIAL PRIMARY KEY, + name varchar(255), + datetime varchar(255), + users varchar(255), + results varchar(255) + ); + CREATE TABLE IF NOT EXISTS Tournaments ( + id SERIAL PRIMARY KEY, + name varchar(255), + start_date varchar(255), + end_date varchar(255), + events varchar(255) + ); + """)) HOST, PORT = "0.0.0.0", 8000 app = Flask(__name__) diff --git a/requirements.txt b/requirements.txt index d496406..bc99674 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +bcrypt==5.0.0 blinker==1.9.0 click==8.3.1 Flask==3.1.2