diff --git a/.gitignore b/.gitignore index d59608291516e27408e63474667374da7be39e01..243e6e3666139aa1a8c94d6728d26538ae7b4f5c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ -lab2/venv/ -database.db \ No newline at end of file +database.db +__pycache__ +venv diff --git a/lab2/database_helper.py b/lab2/database_helper.py index 97435368f87251116fed4253a1f76020719bcd22..1187a2fa1537bd7bbe525d33e6db96110db2d37a 100644 --- a/lab2/database_helper.py +++ b/lab2/database_helper.py @@ -4,24 +4,28 @@ con = sqlite3.connect("database.db") cur = con.cursor() -def get_token_from_email(email): - res = cur.execute(f"SELECT token FROM logged_in_users WHERE email='{email}'") + +def get_token(email): + res = cur.execute(f"SELECT token FROM logged_in_users WHERE email=?", (email,)) return res.fetchone() + def get_password(email): - res = cur.execute(f"SELECT password_hash FROM user_data WHERE email='{email}'") + res = cur.execute("SELECT password_hash FROM user_data WHERE email=?", (email,)) return res.fetchone() def update_logged_in_users(email, token): - cur.execute(f"Insert INTO logged_in_users") - + cur.execute("Insert INTO logged_in_users VALUES (?,?)", (email,token)) def get_user_data(email): - data = cur.execute(f"SELECT * FROM user_data WHERE email='{email}'") + data = cur.execute("SELECT * FROM user_data WHERE email=?", (email,)) return data.fetchall() + +def create_user(email, pw_hash, fname, lname, gender, city, country): + cur.execute(f"Insert INTO user_data VALUES (?,?,?,?,?,?,?)", (email, pw_hash, fname, lname, gender, city, country)) \ No newline at end of file diff --git a/lab2/schema.sql b/lab2/schema.sql index 4059f4936dbe7c88a5dd68781d3d7a5ef25ed7e2..70b09b45139f4023a659e5899013295c145b88af 100644 --- a/lab2/schema.sql +++ b/lab2/schema.sql @@ -5,11 +5,6 @@ CREATE TABLE "logged_in_users" ( PRIMARY KEY("email") ); -CREATE TABLE "all_users" ( - "email" TEXT, - PRIMARY KEY("email") -); - CREATE TABLE "user_data" ( "email" TEXT, "password_hash" TEXT, diff --git a/lab2/server.py b/lab2/server.py index 1a10f7586d77945cc27bde114d59dea890f0116a..1445c1d4ec7391190b9b6087dd44a02e313f0524 100644 --- a/lab2/server.py +++ b/lab2/server.py @@ -1,7 +1,8 @@ import random import hashlib +import re -from flask import Flask +from flask import Flask, request import database_helper as dbh @@ -14,11 +15,28 @@ def index(): return 'Hello world!' -@app.route('/signin') +@app.route('/signin', methods=['POST']) def sign_in(email='test@gmail.com', password='123123123'): """ Authenticate the username by the provided password. """ + + + args = request.get_json() + + if set(args) != {'email', 'password', 'firstname', 'familyname', 'gender', 'city', 'country'}: + return {"success": "false", "message": "Form data missing or incorrect type."} + + if re.fullmatch(r'\w+@\w+.\w+', args['email']) is None: return False + + if len(args['password']) < 8: return False + + + + email = args['email'] + password = args['password'] + + hashed_password = hashlib.sha256((password + email).encode()).hexdigest() database_password = dbh.get_password(email) @@ -34,11 +52,35 @@ def sign_in(email='test@gmail.com', password='123123123'): return { "success": "false", "message": "Wrong username or password." } -@app.route('/signup') -def sign_up(jsonObj): +@app.route('/signup', methods=['POST']) +def sign_up(): """ Register a user in the database. """ + args = request.get_json() + + + if dbh.get_user_data(args['email']) is not None: + return {"success": "false", "message": "User already exists."} + + pw_hash = hashlib.sha256((args['password'] + args['email']).encode()).hexdigest() + + dbh.create_user( + args['email'], + pw_hash, + args['firstname'], + args['lastname'], + args['gender'], + args['city'], + args['country'], + ) + + return {"success": "true", "message": "Successfully created a new user."}; + } else { + } + + } else { + } pass