diff --git a/Lab2/__pycache__/database_helper.cpython-311.pyc b/Lab2/__pycache__/database_helper.cpython-311.pyc
index b55baac245e748f252af404f47fbf0d0dba6711e..100e86dddec4b61d24a4b59b06594d316c8cdfae 100644
Binary files a/Lab2/__pycache__/database_helper.cpython-311.pyc and b/Lab2/__pycache__/database_helper.cpython-311.pyc differ
diff --git a/Lab2/database.db b/Lab2/database.db
index 5d50e4d8eb86358998d1080012be4916b4a8829f..90122c90f888e039f3d560758c37b102b1d369e3 100644
Binary files a/Lab2/database.db and b/Lab2/database.db differ
diff --git a/Lab2/database.db-journal b/Lab2/database.db-journal
new file mode 100644
index 0000000000000000000000000000000000000000..ba0f47b6b76fa79c14766425157136767b110c6d
Binary files /dev/null and b/Lab2/database.db-journal differ
diff --git a/Lab2/database_helper.py b/Lab2/database_helper.py
index 66853cf3a74ce0253651396574ddd3173ef02fe5..a4153f6a4b4fc53920197d7d2ab893096e35d1f3 100644
--- a/Lab2/database_helper.py
+++ b/Lab2/database_helper.py
@@ -7,13 +7,20 @@ def get_db():
     db = getattr(g, 'db', None)
     if db is None:
         db = g.db = sqlite3.connect(DATABASE_URI)
-
     return db
 
+def create_database():
+    conn = sqlite3.connect('database.db')
+    cursor = conn.cursor()
+    with open('schema.sql', 'r') as file:
+        sql = file.read()
+        cursor.executescript(sql)
+    conn.commit()
+    conn.close()
 
 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]);
+        get_db().execute("INSERT into USERS values(?, ?, ?, ?, ?, ?, ?);", [firstname, familyname, gender, city, country, email, password])
         get_db().commit()
         return True
     except:
@@ -25,3 +32,15 @@ def clean_db():
         return True
     except:
         return False
+
+def authenticate(email, password):
+    try:
+        cursor = get_db().cursor()
+        cursor.execute("SELECT * FROM USERS WHERE EMAIL=? AND PASSWORD=?;", [email, password])
+        user = cursor.fetchone()
+        if user:
+            return True
+        return False
+    except:
+        return False
+    
\ No newline at end of file
diff --git a/Lab2/server.py b/Lab2/server.py
index 0f2b6708536ab16eff13e4613b63154c3afa9b08..9e0bc2dad439fe8d0c85321a2ce56d96baba2b96 100644
--- a/Lab2/server.py
+++ b/Lab2/server.py
@@ -1,9 +1,13 @@
 from flask import Flask, request, jsonify
 
 import database_helper
+import random
+import string
 
 app = Flask(__name__)
 
+#database_helper.create_database()
+
 @app.route("/", methods = ['GET'])
 def hello_world():
     return "<p>Hello, Lab_2!</p>", 200
@@ -34,7 +38,19 @@ def sign_up():
     else:
         return "test", 400
 
-
+@app.route("/sign_in", methods = ['POST'])
+def sign_in():
+    data = request.get_json()
+    if('email' in data
+        and 'password' in data):
+        if not database_helper.authenticate(data['email'], data['password']):
+            return "", 401
+        else :
+            token = generate_token()
+            print(token)
+            return token, 200
+    else:
+        return "", 400
 
 @app.route("/delete", methods = ['GET'])
 def delete():
@@ -45,6 +61,10 @@ def delete():
         return "", 409
 
 
+def generate_token():
+    characters = string.ascii_letters + string.digits
+    return ''.join(random.choices(characters, k=36))
+
 if __name__ == '__main__':
     app.debug = True
     app.run()