diff --git a/Lab2/__pycache__/database_helper.cpython-310.pyc b/Lab2/__pycache__/database_helper.cpython-310.pyc
index d37e5e85171172afe6ad9b5abdbe258c244d477d..3ebbc7beb6dff05b871c1ac6c6b345a31a21ff7e 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 643957fffe8a2fd38c2dbc2da828d3507eca7cf5..d9221492281ddef57ac6629235aaeb7ff1bc2918 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 076379e3f40ce91f451625cb3b7fea57713a1c68..df5370f416fc0b03b3b7453c4ffa0a2129de1920 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 a4153f6a4b4fc53920197d7d2ab893096e35d1f3..c6047fc703ff7de4b3df1ed319a64b8e5830affb 100644
--- a/Lab2/database_helper.py
+++ b/Lab2/database_helper.py
@@ -9,6 +9,7 @@ def get_db():
         db = g.db = sqlite3.connect(DATABASE_URI)
     return db
 
+
 def create_database():
     conn = sqlite3.connect('database.db')
     cursor = conn.cursor()
@@ -18,6 +19,16 @@ def create_database():
     conn.commit()
     conn.close()
 
+
+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])
@@ -26,21 +37,38 @@ def create_user(email, password, firstname, familyname, gender, city, country):
     except:
         return False
 
-def clean_db():
+
+def authenticate(email, password):
     try:
-        get_db().execute("DROP table USERS;")
+        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
+
+
+def log_in(token, email):
+    try:
+        get_db().execute("INSERT into LOGGEDINUSERS values(?, ?)", [token, email])
+        get_db().commit()
         return True
     except:
         return False
 
-def authenticate(email, password):
+
+
+def log_out(token):
     try:
         cursor = get_db().cursor()
-        cursor.execute("SELECT * FROM USERS WHERE EMAIL=? AND PASSWORD=?;", [email, password])
+        cursor.execute("SELECT * FROM LOGGEDINUSERS WHERE TOKEN=?;", [token])
         user = cursor.fetchone()
         if user:
+            cursor.execute("DELETE FROM LOGGEDINUSERS WHERE TOKEN=?;", [token])
+            get_db().commit()
             return True
         return False
     except:
         return False
-    
\ No newline at end of file
diff --git a/Lab2/schema.sql b/Lab2/schema.sql
index 9f6c426264f830a4ae354985724eefc000dfa322..446b1f8eb630a2eba367730215e1fc1978be035c 100644
--- a/Lab2/schema.sql
+++ b/Lab2/schema.sql
@@ -4,7 +4,13 @@ CREATE TABLE USERS(
    GENDER  VARCHAR(6)          NOT NULL,
    CITY  VARCHAR(20)          NOT NULL,
    COUNTRY  VARCHAR(20)          NOT NULL,
-   EMAIL  VARCHAR(20)          NOT NULL,
+   EMAIL  VARCHAR(30)          NOT NULL,
    PASSWORD  VARCHAR(20)          NOT NULL,
    PRIMARY KEY (EMAIL)
 );
+
+CREATE TABLE LOGGEDINUSERS(
+  TOKEN VARCHAR(40)     NOT NULL,
+  EMAIL VARCHAR(30)     NOT NULL,
+  PRIMARY KEY (EMAIl)
+)
diff --git a/Lab2/server.py b/Lab2/server.py
index 9e0bc2dad439fe8d0c85321a2ce56d96baba2b96..edf405a79ee56cdafb7ddb531990e9086cbb6f51 100644
--- a/Lab2/server.py
+++ b/Lab2/server.py
@@ -36,7 +36,7 @@ def sign_up():
         else:
             return "", 400
     else:
-        return "test", 400
+        return "", 400
 
 @app.route("/sign_in", methods = ['POST'])
 def sign_in():
@@ -47,11 +47,25 @@ def sign_in():
             return "", 401
         else :
             token = generate_token()
-            print(token)
-            return token, 200
+            if database_helper.log_in(token, data['email']):
+                return token, 201
+            else:
+                return "", 409
+    else:
+        return "", 400
+
+@app.route("/sign_out", methods = ['POST'])
+def sign_out():
+    data = request.get_json()
+    if('token' in data):
+        if database_helper.log_out(data['token']):
+            return "", 200
+        else:
+            return "", 401
     else:
         return "", 400
 
+
 @app.route("/delete", methods = ['GET'])
 def delete():
     resp = database_helper.clean_db()