From 3c13b46fb14c23d162ae633931cb197e23df391f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20Th=C3=B6rnblom?= <johan.thornblom@hotmail.com> Date: Thu, 24 Mar 2022 22:47:59 +0100 Subject: [PATCH] lab4444 --- Lab_4/Twidder/database.db | Bin 16384 -> 16384 bytes Lab_4/Twidder/server.py | 43 +++++++++++++++++++++------------ Lab_4/Twidder/static/client.js | 7 +++--- 3 files changed, 31 insertions(+), 19 deletions(-) diff --git a/Lab_4/Twidder/database.db b/Lab_4/Twidder/database.db index f0687480e0791cb203fd555a0773043605dcf1fc..39de255a9d2417fa8f3b100a73afdef1901f3fe2 100644 GIT binary patch delta 72 zcmZo@U~Fh$oFL68KT*b+QGR2>5`AU~zKY502D&VK?R*uR1r;3lWO*f6goTCk9r6<$ X64TPsc*I$Rg#{s8Tg}Z=?XnpGoaz!% delta 37 tcmZo@U~Fh$oFL68J5k1&QFdd(5`AVdzNwSh4RkjPDkSo4o@$rP2ms6A3bp_M diff --git a/Lab_4/Twidder/server.py b/Lab_4/Twidder/server.py index b9644c0..02988a2 100644 --- a/Lab_4/Twidder/server.py +++ b/Lab_4/Twidder/server.py @@ -11,6 +11,7 @@ import json from flask_sock import Sock from flask_bcrypt import Bcrypt from gevent import monkey +import threading monkey.patch_all() @@ -25,6 +26,7 @@ monkey.patch_all() app = Flask(__name__, static_url_path = '/static') #in case flask does not recognize folder sock = Sock(app) bcrypt = Bcrypt(app) +lock = threading.Lock() app.debug = True session = {'token': ("email", "wsObj")} @@ -91,17 +93,23 @@ def echo(socket): return # Sign out if I am logged in somewhere else - for token in list(session.keys()): - if session[token][0] == myEmail and token != myToken: - if session[token][1] != "": - session[token][1].send(json.dumps({"action" : "signOut"})) - session[token][1].close() - session.pop(token) - - # Put socket in global dict so server knows my connection is open - session[myToken] = (myEmail, socket) - socket.send(json.dumps({"action" : "signIn"})) - + lock.acquire() + if myToken in session: + for token in list(session.keys()): + if session[token][0] == myEmail and token != myToken: + if session[token][1] != "": + session[token][1].send(json.dumps({"action" : "signOut"})) + session[token][1].close() + print("You got kicked out") + session.pop(token) + + # Put socket in global dict so server knows my connection is open + session[myToken] = (myEmail, socket) + socket.send(json.dumps({"action" : "signIn"})) + else: + socket.send(json.dumps({"action" : "signOut"})) + socket.close() + lock.release() @app.route("/myServer/sign_in", methods=['POST']) @@ -131,7 +139,9 @@ def sign_in(): # Generate a random token token = str(uuid.uuid4()) + lock.acquire() session[token] = (email, "") + lock.release() # return the token in the Authorization header response = make_response(jsonify({})) #"Server inserted user data into database" @@ -204,15 +214,18 @@ def sign_out(): token = validate_token(hashedToken, "") if token == "": return jsonify({}), 401 - + # Close my socket + lock.acquire() try: session[token][1].close() except: pass # samma sak som ingenting - - # set user to not logged in - session.pop(token) + try: + session.pop(token) + except: + pass + lock.release() return jsonify({}), 204 # "Successfully signed out") diff --git a/Lab_4/Twidder/static/client.js b/Lab_4/Twidder/static/client.js index ab59cbb..ab60418 100644 --- a/Lab_4/Twidder/static/client.js +++ b/Lab_4/Twidder/static/client.js @@ -73,7 +73,6 @@ async function connectWithSocket() { let myEmail = localStorage.getItem("homeEmail"); // Make hash out of socket and message - // Todo - myEmail instead of token? let hashedToken = await hashMe(token, token); // let hashedToken = crypto.createHmac('sha1', token).update("my data").digest().toString('base64'); @@ -90,9 +89,6 @@ async function connectWithSocket() { switch (response["action"]) { case "signOut": - // If old socket open, close it. - socket.close(); - // Reset token in the localStorage localStorage.setItem("currentUser", ""); localStorage.setItem("homeEmail", ""); @@ -103,6 +99,9 @@ async function connectWithSocket() { document.getElementById("error").innerHTML = "Signed Out, you signed in elsewhere"; break; case "signIn": + + displayView(); + setUserDetails("home") break; } } -- GitLab