From 53ce20ef86010187ef9015b7b019e0c3de8c0b38 Mon Sep 17 00:00:00 2001
From: Anton <anton@hedvig.com>
Date: Sun, 30 Jan 2022 12:36:48 +0100
Subject: [PATCH] trying to fix web socket disconnect

---
 lab4/twidder/database.db      | Bin 28672 -> 28672 bytes
 lab4/twidder/server.py        |  27 ++++++++++++++++++++++++++-
 lab4/twidder/static/client.js |   7 ++++++-
 3 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/lab4/twidder/database.db b/lab4/twidder/database.db
index fb8b3a80470a0ee2dd1e55dcbb5893fea291cf33..62e952b66560737a684cb293009fc3c04ec37119 100644
GIT binary patch
delta 66
zcmZp8z}WDBae_3X*+dy<Mzf6xrS{tCC5hRYZo!oSmc||iA;qR4Ia!9KKDjPtUXDp2
VKH>3R1{Nib{sk7EMcIoS3;^tb73u&0

delta 66
zcmZp8z}WDBae_3X!9*EnMuUwBrS{rYl}U!h{<`TQo{?_8PRS9$J{ExnDQ;!?!R}^`
VMm~<l0TCt{76Ga8K_-hF3;^Ag6(j%v

diff --git a/lab4/twidder/server.py b/lab4/twidder/server.py
index 8003291..1734acd 100644
--- a/lab4/twidder/server.py
+++ b/lab4/twidder/server.py
@@ -51,13 +51,35 @@ def create_response(success, message, data=None):
 def generate_token():
     return secrets.token_urlsafe(32)
 
+def validate_ws(data):
+    user_identifier = data["email"]
+    hashed_data = data["hashed_email"]
+    token = database_helper.get_token(user_identifier)
+    if token:
+        token = token[0]
+        print("ID", user_identifier)
+        print("token", token)
+        data_str_plus_token = user_identifier + token
+        print("data_str_plus_token", data_str_plus_token)
+        reconstructed_hashed_data = hashlib.sha512(
+            data_str_plus_token.encode("utf-8")
+        ).hexdigest()
+        print("hashed_user_id", hashed_data)
+        print("reconstructed", reconstructed_hashed_data)
+        if hashed_data == reconstructed_hashed_data:
+            print("Ws auth successfull")
+            return True
+        else:
+            print("Ws hash missmatch")
+    print("Ws auth failed")
+    return False
 
 def validate_request():
     data = request.args.to_dict() if request.method == "GET" else request.form.to_dict()
     user_identifier = data.get("user_identifier")
     hashed_data = request.headers["Authorization"]
+    print("normal req hashed data", hashed_data)
     token = database_helper.get_token(user_identifier)
-    print("token", token)
     if token:
         token = token[0]
         data_str = ""
@@ -340,6 +362,9 @@ def web_socket():
         ws = request.environ["wsgi.websocket"]
         obj = ws.receive()
         data = json.loads(obj)
+        if not validate_ws(data):
+            print("SHOULD RETURN")
+            return ""
         try:
             active_sockets[data["email"]] = ws
 
diff --git a/lab4/twidder/static/client.js b/lab4/twidder/static/client.js
index 0864b19..b7d6ccc 100644
--- a/lab4/twidder/static/client.js
+++ b/lab4/twidder/static/client.js
@@ -456,6 +456,7 @@ function xmlRequest(url, callback, params, token = null, requestType) {
 
   if (token) {
     let hashed_params = hash_params(params, token);
+    console.log("REQUEST", hashed_params)
     xhttp.setRequestHeader("Authorization", hashed_params);
   }
 
@@ -490,10 +491,14 @@ function connectWebSocket() {
 
   ws.onopen = function () {
     let email = localStorage.getItem("email");
-    let userData = { email: email };
+    let token = localStorage.getItem("token");
+    hashed_email = CryptoJS.SHA512(email + token).toString(CryptoJS.enc.Hex);;
+    console.log("hashed_email", hashed_email)
+    let userData = { email: email, hashed_email: hashed_email};
     ws.send(JSON.stringify(userData));
     console.log("Web socket opened");
 
+    // ping neccessary when using Heroku because of defualt timout on idle connections 
     let clock = setInterval(function () {
       console.log("Ping server");
       ws.send("ping");
-- 
GitLab