diff --git a/.DS_Store b/.DS_Store index 2fec223903ac1694571e02c744a2c068a627bbfe..add6cc6fc0deb56d8b7edaadccd95edcfc062405 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Lab2/__pycache__/database_helper.cpython-310.pyc b/Lab2/__pycache__/database_helper.cpython-310.pyc index c0cb2b59bf7e62a54d13752438c29730b94473b0..99b546519230212e54a8bc011cbc93babc0b8519 100644 Binary files a/Lab2/__pycache__/database_helper.cpython-310.pyc and b/Lab2/__pycache__/database_helper.cpython-310.pyc differ diff --git a/Lab2/__pycache__/server.cpython-310.pyc b/Lab2/__pycache__/server.cpython-310.pyc index 9b004867109a8db67ebe33d1813dc745cabcd9d6..c45131d588856539e63fafc227021f49aca3e0e6 100644 Binary files a/Lab2/__pycache__/server.cpython-310.pyc and b/Lab2/__pycache__/server.cpython-310.pyc differ diff --git a/Lab2/database.db b/Lab2/database.db index b6cf4525b5d293f9e54549358aecdf98cdb5cf98..ecfc5db7f8012e708b8bb0719f07367d0c9357d9 100644 Binary files a/Lab2/database.db and b/Lab2/database.db differ diff --git a/Lab2/database_helper.py b/Lab2/database_helper.py index cd923d7aff01753a8477d1f12601b791f13effce..7eac6bdaa35947e244602a2cb9c9123debbb5fb2 100644 --- a/Lab2/database_helper.py +++ b/Lab2/database_helper.py @@ -31,7 +31,7 @@ def authenticate(email, password): return False -def log_in(token, email): +def addToLoggedInUsers(token, email): try: get_db().execute("INSERT into LOGGEDINUSERS values(?, ?)", [token, email]) get_db().commit() @@ -40,7 +40,7 @@ def log_in(token, email): return False -def log_out(token): +def removeFromLoggedInUsers(token): try: cursor = get_db().cursor() cursor.execute("SELECT * FROM LOGGEDINUSERS WHERE TOKEN=?;", [token]) diff --git a/Lab2/server.py b/Lab2/server.py index 3504ab728ad07aaff9a437ae6b2451fc232f9b9f..26cc2a3c29b56e8b12b57a8e3fe314f10848bbcf 100644 --- a/Lab2/server.py +++ b/Lab2/server.py @@ -4,6 +4,7 @@ import database_helper import random import string import json +import re app = Flask(__name__) @@ -26,7 +27,8 @@ def sign_up(): and 'country' in data and isinstance(data['country'], str) ): if(len(data['password']) > 5 and len(data['password']) < 21 and len(data['email']) > 0 - and len(data['firstname']) > 0 and len(data['familyname']) > 0 and len(data['gender']) > 0 + and is_valid_email(data['email']) and len(data['firstname']) > 0 + and len(data['familyname']) > 0 and len(data['gender']) > 0 and len(data['city']) > 0 and len(data['country']) > 0 ): resp = database_helper.create_user(data['email'], data['password'], data['firstname'], data['familyname'], data['gender'], data['city'], data['country']) @@ -43,25 +45,28 @@ def sign_up(): @app.route("/users/sign_in", methods = ['POST']) def sign_in(): data = request.get_json() - if('email' in data - and 'password' in data): + if('email' in data and is_valid_email(data['email']) + and 'password' in data and len(data['password']) > 5): if not database_helper.authenticate(data['email'], data['password']): return "", 401 else : token = generate_token() - if database_helper.log_in(token, data['email']): - return token, 201 + value = { + "token" : token + } + if database_helper.addToLoggedInUsers(token, data['email']): + return jsonify(value), 201 else: return "", 409 else: return "", 400 -@app.route("/users/sign_out", methods = ['POST']) +@app.route("/users/sign_out", methods = ['PUT']) def sign_out(): token = get_token_from_header() if(token != 1): - if database_helper.log_out(token): + if database_helper.removeFromLoggedInUsers(token): return "", 200 else: return "", 401 @@ -214,6 +219,10 @@ def generate_token(): characters = string.ascii_letters + string.digits return ''.join(random.choices(characters, k=36)) +def is_valid_email(email): + pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' + return re.match(pattern, email) is not None + if __name__ == '__main__': app.debug = True diff --git a/Twidder (Lab3)/database_helper.py b/Twidder (Lab3)/database_helper.py index f69e47ba0138f2407b2e9803b2dd16f837424463..7eac6bdaa35947e244602a2cb9c9123debbb5fb2 100644 --- a/Twidder (Lab3)/database_helper.py +++ b/Twidder (Lab3)/database_helper.py @@ -10,15 +10,6 @@ def get_db(): return db -def clean_db(): - try: - get_db().execute("DROP table USERS;") - get_db().execute("DROP table LOGGEDINUSERS;") - return True - except: - return False - - def create_user(email, password, firstname, familyname, gender, city, country): try: get_db().execute("INSERT into USERS values(?, ?, ?, ?, ?, ?, ?);", [firstname, familyname, gender, city, country, email, password]) @@ -40,7 +31,7 @@ def authenticate(email, password): return False -def log_in(token, email): +def addToLoggedInUsers(token, email): try: get_db().execute("INSERT into LOGGEDINUSERS values(?, ?)", [token, email]) get_db().commit() @@ -49,7 +40,7 @@ def log_in(token, email): return False -def log_out(token): +def removeFromLoggedInUsers(token): try: cursor = get_db().cursor() cursor.execute("SELECT * FROM LOGGEDINUSERS WHERE TOKEN=?;", [token]) diff --git a/Twidder (Lab3)/server.py b/Twidder (Lab3)/server.py index c126024c3480985f430df62b51f7c96827ae32e1..c45c45ca0ae174bfdd77dbc72df672b049ff0b8a 100644 --- a/Twidder (Lab3)/server.py +++ b/Twidder (Lab3)/server.py @@ -4,14 +4,13 @@ import database_helper import random import string import json +import re app = Flask(__name__) - - @app.route("/", methods = ['GET']) def hello_world(): - return app.send_static_file("client.html"), 200 + return "<p>Hello, Lab_2!</p>", 200 @app.route("/users/sign_up", methods = ['POST']) @@ -26,7 +25,8 @@ def sign_up(): and 'country' in data and isinstance(data['country'], str) ): if(len(data['password']) > 5 and len(data['password']) < 21 and len(data['email']) > 0 - and len(data['firstname']) > 0 and len(data['familyname']) > 0 and len(data['gender']) > 0 + and is_valid_email(data['email']) and len(data['firstname']) > 0 + and len(data['familyname']) > 0 and len(data['gender']) > 0 and len(data['city']) > 0 and len(data['country']) > 0 ): resp = database_helper.create_user(data['email'], data['password'], data['firstname'], data['familyname'], data['gender'], data['city'], data['country']) @@ -43,8 +43,8 @@ def sign_up(): @app.route("/users/sign_in", methods = ['POST']) def sign_in(): data = request.get_json() - if('email' in data - and 'password' in data): + if('email' in data and is_valid_email(data['email']) + and 'password' in data and len(data['password']) > 5): if not database_helper.authenticate(data['email'], data['password']): return "", 401 else : @@ -52,7 +52,7 @@ def sign_in(): value = { "token" : token } - if database_helper.log_in(token, data['email']): + if database_helper.addToLoggedInUsers(token, data['email']): return jsonify(value), 201 else: return "", 409 @@ -60,11 +60,11 @@ def sign_in(): return "", 400 -@app.route("/users/sign_out", methods = ['POST']) +@app.route("/users/sign_out", methods = ['PUT']) def sign_out(): token = get_token_from_header() if(token != 1): - if database_helper.log_out(token): + if database_helper.removeFromLoggedInUsers(token): return "", 200 else: return "", 401 @@ -217,6 +217,10 @@ def generate_token(): characters = string.ascii_letters + string.digits return ''.join(random.choices(characters, k=36)) +def is_valid_email(email): + pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' + return re.match(pattern, email) is not None + if __name__ == '__main__': app.debug = True