diff --git a/.DS_Store b/.DS_Store index 108f1b0aa889a7f79532bcaa4e02348aafc56d41..905bd5d18298f266f406249c0fee9466d22736f6 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Lab_3/.DS_Store b/Lab_3/.DS_Store index 38e64d943bd45b70ad540b986a392aaf8d1e02b2..200df3d9191948bed14cf2a33a4cf3cc955d6a02 100644 Binary files a/Lab_3/.DS_Store and b/Lab_3/.DS_Store differ diff --git a/Lab_3/Twidder/__pycache__/database_helper.cpython-38.pyc b/Lab_3/Twidder/__pycache__/database_helper.cpython-38.pyc index 7e4a18eb4153651973e42af292cfa4aab521d882..4a88982239d44f30fb97268db74a884248526f91 100644 Binary files a/Lab_3/Twidder/__pycache__/database_helper.cpython-38.pyc and b/Lab_3/Twidder/__pycache__/database_helper.cpython-38.pyc differ diff --git a/Lab_3/Twidder/database.db b/Lab_3/Twidder/database.db index 6632cf3724c98df77710b31b50d2632646ef5f85..b77a861fe582d500b26c331020471bf2bd5e073a 100644 Binary files a/Lab_3/Twidder/database.db and b/Lab_3/Twidder/database.db differ diff --git a/Lab_3/Twidder/server.py b/Lab_3/Twidder/server.py index e85ba16005b693611dace5af2a98006a4b60807c..ddebbc0545c1d9cbd153a87cd23044b80b455a4d 100644 --- a/Lab_3/Twidder/server.py +++ b/Lab_3/Twidder/server.py @@ -1,3 +1,4 @@ + """Server""" from flask import Flask, jsonify, request, make_response from gevent.pywsgi import WSGIServer @@ -5,10 +6,10 @@ import uuid import database_helper import json from flask_sock import Sock +import threading + from gevent import monkey monkey.patch_all() - - #Remember: #PUT for updating data, POST for adding new data #save token on client and server (lab 3) @@ -17,28 +18,22 @@ monkey.patch_all() # python3 server.py # http://127.0.0.1:5000/myServer # sqlite3 database.db ".read schema.sql" - #Questions: #Why does localhost in URL not work? - - app = Flask(__name__, static_url_path = '/static')#in case flask does not recognize folder sock = Sock(app) - app.debug = True session = {'token': ("email", "wsObj")} - +lock = threading.Lock() @app.route('/') def root(): return app.send_static_file('client.html') - @app.route('/myServer') def myServer(): return app.send_static_file('client.html') - def token_has_error(token): """All token standard error checks""" if token is None: @@ -51,7 +46,6 @@ def token_has_error(token): #"User not signed in or invalid access token" return True, 401 return False, 0 - def input_has_error(input): """All standard input error checks""" try: @@ -64,15 +58,12 @@ def input_has_error(input): return True, 400, "" return False, 0, str - @sock.route('/myServer/api') def echo(socket): while True: - # Making sure we have a valid socket if not socket: return - # Making sure message format is OK and store email & token in string data = socket.receive() try: @@ -85,39 +76,28 @@ def echo(socket): return # sign out if I am logged in somewhere else - - print("Before loop") - print("/n") print(session) - print("/n") - - for token in list(session.keys()): - if session[token][0] == myEmail and token != myToken and session[token][1] != "": - print("Inside first if") - #if session[token][1] != "": - print("Inside second if") - session[token][1].send(json.dumps({"action" : "signOut"})) - print(token[1]) - session[token][1].close() - print("You got kicked out") - session.pop(token) - print("After loop") - print("/n") - print(session) - print("/n") - - # Put socket in global dict so server knows my connection is open - session[myToken] = (myEmail, socket) - - print("After insertion into dict") - print("/n") - print(session) - print("/n") - - 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) + + print(session) + + # 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']) def sign_in(): """Sign in user""" @@ -127,24 +107,22 @@ def sign_in(): if tmp[0]: return jsonify({}), tmp[1] email = tmp[2] - # Validate Password tmp = input_has_error('password') if tmp[0]: return jsonify({}), tmp[1] password = tmp[2] - # Do the user have an account? rows = database_helper.find_user(email) if rows is None or rows == []: return jsonify({}), 404 #"No user found by your email" - if password != rows[1]: - return jsonify({}), 401 #"Incorrect password") x - + return jsonify({}), 401 #"Incorrect password") # 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" @@ -152,17 +130,14 @@ def sign_in(): response.headers["Authorization"] = token return response, 204 - @app.route("/myServer/sign_up", methods=['POST']) def sign_up(): """Sign up a user""" - tmp = input_has_error('email') if tmp[0]: - print(tmp[1]) + # print(tmp[1]) return jsonify({}), tmp[1] email = tmp[2] - # Checking that the user does not already exist if database_helper.find_user(email) is not None: return jsonify({}), 409 #"Error: User already exists" @@ -193,14 +168,12 @@ def sign_up(): if tmp[0]: return jsonify({}), tmp[1] country = tmp[2] - # Attempts to insert the user data to the database if database_helper.create_user(email, password, firstname, familyname, gender, city, country): return jsonify({}), 204 #"Server inserted user data into database" else: return jsonify({}), 500 #"General Error: Server failed to insert user data into database" - @app.route("/myServer/sign_out", methods=['POST']) def sign_out(): """Sign out user""" @@ -212,108 +185,92 @@ def sign_out(): return jsonify({}), tmp[1] # Close my socket - print(session) + lock.acquire() try: session[token][1].close() except: pass # samma sak som ingenting - print(session) - - # set user to not logged in - session.pop(token) + try: + session.pop(token) + except: + pass + lock.release() return jsonify({}), 204 # "Successfully signed out") - @app.route("/myServer/change_password", methods=['PUT']) def change_password(): """Change password for the current user""" token = request.headers["Authorization"] - # Validate Token tmp = token_has_error(token) if tmp[0]: - print("validate token") + #print("validate token") return jsonify({}), tmp[1] - # Validate Old Password tmp = input_has_error('old_password') if tmp[0]: - print("validate old password") + #print("validate old password") return jsonify({}), tmp[1] old_password = tmp[2] - # Validate New Password tmp = input_has_error('new_password') if tmp[0]: - print("validate new password") + #print("validate new password") return jsonify({}), tmp[1] new_password = tmp[2] - # Extracting theemail of the current user email = session[token][0] - # Validation of the old password and attemption to change it to the new one if old_password == database_helper.find_user(email)[1]: #checks if old_password is correct status = database_helper.update_user(new_password, email) if status: - print("Password changed") + # print("Password changed") return jsonify({}), 204 # "Password has been changed!" else: return jsonify({}), 500 # "Password has not been changed" else: return jsonify({}), 400 # "Old password is incorrect" - @app.route("/myServer/getDataByToken", methods=['GET']) def get_user_data_by_token(): """Verify current user through token and attemp to return the data of the user""" token = request.headers["Authorization"] - # Validate token if token not in session: return jsonify({}), 401 # "User not signed in or invalid access token" - # Extracting the email of the current user email = session[token][0] return get_user_data_by_email(email) - @app.route("/myServer/getDataByEmail/<email>", methods=['GET']) def get_user_data_by_email(email): """Get user data by email""" token = request.headers["Authorization"] - # Validate Token tmp = token_has_error(token) if tmp[0]: return jsonify({}), tmp[1] - # Validate email if email is None: return True, 400 if len(email) > 50: return True, 400 - # Attempting to find the data of the current user in the database data = database_helper.find_user(email) if data is None or data == []: return jsonify({}), 404 #"No user found by your destination email" - formated_data = {"email": data[0], "firstname": data[2], "familyname": data[3], "gender": data[4], "city": data[5], "country": data[6]} return jsonify({"data" : formated_data}), 200 # "Data successfully sent to you!" - @app.route("/myServer/getUserMessageByToken", methods=['GET']) def get_user_messages_by_token(): """Get user's message wall thought the token of the user""" token = request.headers["Authorization"] - # Validate Token tmp = token_has_error(token) if tmp[0]: return jsonify({}), tmp[1] - # Extracting the email of the current user email = session[token][0] return get_user_messages_by_email(email) @@ -322,7 +279,6 @@ def get_user_messages_by_token(): def get_user_messages_by_email(req_email): """Get user's message wall thought the email of the user""" token = request.headers["Authorization"] - # Validate Token tmp = token_has_error(token) if tmp[0]: @@ -333,36 +289,29 @@ def get_user_messages_by_email(req_email): return True, 400 if len(req_email) > 50: return True, 400 - # Find requested user in the data base rows = database_helper.find_user(req_email) - # Error check if rows is None or rows == []: return jsonify({}), 404 #"No user found by your destination email" - # Insert post-info into array rows = database_helper.get_post(req_email) result = [] for row in rows: result.append({"email": row[0], "person_who_posted": row[1], "message": row[2]}) - # Notify user if the wall is empty or not, and if not, return the all messages if result == []: return jsonify({}), 204 #"user's wall had no messages to collect" return jsonify({"data" : result}), 200 # User posts has been displayed" - @app.route("/myServer/post", methods=['POST']) def post_message(): """Post a message on sombody's wall""" - # Find out sender's email token = request.headers["Authorization"] tmp = token_has_error(token) if tmp[0]: return jsonify({}), tmp[1] - # Extracting the email of the current user my_email = session[token][0] @@ -371,24 +320,20 @@ def post_message(): if tmp[0]: return jsonify({}), tmp[1] destination_email = tmp[2] - # Finding out if the user exist, who we wanna write a message to rows = database_helper.find_user(destination_email) if rows is None or rows == []: return jsonify({}), 404 #"No user found by your destination email" - # Verify message that we want to post tmp = input_has_error('message') if tmp[0]: return jsonify({}), tmp[1] message = tmp[2] - # Calling and error checking function if not database_helper.create_post(my_email, destination_email, message): return jsonify({}), 500 #"Server failed to post message to database" return jsonify({}), 204 #"Succeeded to post message") - - + if __name__ == '__main__': # app.run(port=5000, debug=True) app.debug = True diff --git a/Lab_3/Twidder/static/client.html b/Lab_3/Twidder/static/client.html index 0fde432f2a7b4aeaeb3f70f5bf28d91ca966d418..96e8db5c229501e7218cf38f0ca2fe71453937b2 100644 --- a/Lab_3/Twidder/static/client.html +++ b/Lab_3/Twidder/static/client.html @@ -91,10 +91,10 @@ </table> <form id="homeInputTextArea" class="inputTextArea" onsubmit="return updateWall('home')"> <label for="PostMessage">Post a message on your wall:</label> <br> - <textarea id="homeTextarea" name="textarea" rows="6" cols="50"></textarea> + <textarea id="homeTextarea" name="textarea" rows="6" cols="50" ondrop="dropHome(event)" ondragover="allowDrop(event)"></textarea> <button class="textAreaButton" type="submit" value="Submit">Submit</button> </form> - <div id="homePostedMessagesDiv" class="PostedMessagesDiv"></div> + <div id="homePostedMessagesDiv" class="PostedMessagesDiv" draggable="true" ondragstart="drag(event)"></div> <form id="homeReloadForm" class="reloadForm" onsubmit="return reloadWall('home')"> <input id="homeReloadButton" class="reloadButton" type="submit" value="Reload"> </form> @@ -133,11 +133,11 @@ <form id="browseInputTextArea" class="inputTextArea" onsubmit="return updateWall('browse')"> <label for="PostMessage">Post a message on your wall:</label> <br> - <textarea id="browseTextarea" name="textarea" rows="6" cols="50"></textarea> + <textarea id="browseTextarea" name="textarea" rows="6" cols="50" ondrop="dropBrowse(event)" ondragover="allowDrop(event)"></textarea> <button class="textAreaButton" type="submit" value="Submit">Submit</button> </form> - <div id="browsePostedMessagesDiv" class="PostedMessagesDiv"></div> + <div id="browsePostedMessagesDiv" class="PostedMessagesDiv" draggable="true" ondragstart="drag(event)"></div> <form id="browseReloadForm" class="reloadForm" onsubmit="return reloadWall('browse')"> <input id="browseReloadButton" class="reloadButton" type="submit" value="Reload"> </form> @@ -171,7 +171,9 @@ </head> <body> - <div id="windowDiv"></div> + <div id="windowDiv"> + + </div> </body> </html> diff --git a/Lab_3/Twidder/static/client.js b/Lab_3/Twidder/static/client.js index 95fc651fc1894aa66dc4c94f5a2e395920672fc0..b866973e0fd8e36ccd99903e9a8457ab37efe0b3 100644 --- a/Lab_3/Twidder/static/client.js +++ b/Lab_3/Twidder/static/client.js @@ -1,3 +1,4 @@ + // Global variables var minPassLength = 2; var windowDiv; @@ -6,96 +7,114 @@ var profileDiv; var url = 'http://' + document.domain + ':5000/myServer/'; var curr_page = ""; var socket; - // source "/Users/lorenzo/OneDrive - Linköpings universitet/Skola/DI3B/TDDD97/virtualenv/bin/activate" +function allowDrop(event) { + event.preventDefault(); +} +function drag(event) { + event.dataTransfer.setData("text/plain", event.target.innerHTML); +} +function dropHome(event) { + event.preventDefault(); + let data = event.dataTransfer.getData("text/plain"); + // Replaces parts of the string. "g" gör att alla accurences av substringen byts ut + let newStr = data.replace(/<br>/g, "\n"); + // newStr = tmp.replace(/ /g, ''); + document.getElementById("homeTextarea").innerHTML = newStr; +} +function dropBrowse(event) { + event.preventDefault(); + let data = event.dataTransfer.getData("text/plain"); + // Replaces parts of the string. "g" gör att alla accurences av substringen byts ut + let newStr = data.replace(/<br>/g, "\n"); + // newStr = tmp.replace(/ /g, ''); + document.getElementById("browseTextarea").innerHTML = newStr; +} -function connectWithSocket() { +// Socket +function connectWithSocket(mode) { let token = localStorage.getItem("currentUser"); - // Changes the view to profile view and loads user info displayView(); - setUserDetails("home"); + setUserDetails("home") // Establish web socket socket = new WebSocket('ws://' + document.domain + ':5000/myServer/api'); - socket.onopen = function (event) { let myEmail = localStorage.getItem("homeEmail"); - + if (mode == 0) {//Once sign_in is called + console.log("Inside connectWithSocket mode 0") + this.send(JSON.stringify({ token: token, email: myEmail, mode: mode })); + } + else {//Once sign_out is called + console.log("Inside connectWithSocket mode 1") + this.send(JSON.stringify({ token: token, email: myEmail, mode: mode })); + } // Todo - ändra så att token skickas i header istället - this.send(JSON.stringify({token: token, email: myEmail})); console.log("Nu har jag skickat"); } - socket.onmessage = function (event) { let response = JSON.parse(event.data); - - console.log("Nu fick jag svar"); + console.log("Nu fick jag svar"); switch (response["action"]) { case "signOut": - - // If old socket open, close it. - //socket.close(); - console.log(response); - // Reset token in the localStorage localStorage.setItem("currentUser", ""); localStorage.setItem("homeEmail", ""); localStorage.setItem("browseEmail", ""); - // Changes the view to welcome view displayView(); document.getElementById("error").innerHTML = "Signed Out, you signed in elsewhere"; break; - case "signIn": + case "signIn":; + + // This + displayView(); + setUserDetails("home") console.log(response); console.log("ja är signed in"); break; - } + } } } - - // - - - - - Init Request Objects - - - - - // - // Sign In Request Object var signInRequest = new XMLHttpRequest(); -signInRequest.onreadystatechange = function() { +signInRequest.onreadystatechange = function () { if (this.readyState == 4) { - let errorMessage = document.getElementById("error"); if (this.status == 204) { - let token = this.getResponseHeader("Authorization") + let token = this.getResponseHeader("Authorization"); localStorage.setItem("currentUser", token); - connectWithSocket(); + console.log("Inside SignInRequest") + connectWithSocket(0); } else if (this.status == 400) { - errorMessage.innerHTML = "Error 400: Incorrect format"; + errorMessage.innerHTML = "Error 400: Incorrect format"; } else if (this.status == 404) { - errorMessage.innerHTML = "Error 404: No user with that email exists"; + errorMessage.innerHTML = "Error 404: No user with that email exists"; } else if (this.status == 401) { - errorMessage.innerHTML = "Error 401: Incorrect password"; + errorMessage.innerHTML = "Error 401: Incorrect password"; } else { - errorMessage.innerHTML = "Unknown error"; - } + errorMessage.innerHTML = "Unknown error"; + } } }; - // Sign Out Request Object var signOutRequest = new XMLHttpRequest(); -signOutRequest.onreadystatechange = function() { +signOutRequest.onreadystatechange = function () { if (this.readyState == 4) { + // Reset token in the localStorage + localStorage.setItem("currentUser", ""); + localStorage.setItem("homeEmail", ""); + localStorage.setItem("browseEmail", ""); + console.log("Inside signOutRequest") if (this.status == 204) { - - // Reset token in the localStorage - localStorage.setItem("currentUser", ""); - localStorage.setItem("homeEmail", ""); - localStorage.setItem("browseEmail", ""); - + connectWithSocket(1); // Changes the view to welcome view displayView(); } @@ -106,15 +125,13 @@ signOutRequest.onreadystatechange = function() { else { console.log("Unknown error"); displayView(); - } + } } }; - // Sign Up Request Object var signUpRequest = new XMLHttpRequest(); signUpRequest.onreadystatechange = function () { if (this.readyState == 4) { - let errorMessage = document.getElementById("error"); if (this.status == 204) { errorMessage.innerHTML = "You have signed up"; @@ -127,18 +144,16 @@ signUpRequest.onreadystatechange = function () { } else if (this.status == 500) { errorMessage.innerHTML = "Error 500: Error at server side"; - } + } else { errorMessage.innerHTML = "Unknown error"; } } }; - // Change Password Request Object var ChangePassRequest = new XMLHttpRequest(); ChangePassRequest.onreadystatechange = function () { if (this.readyState == 4) { - let errorMessage = document.getElementById("match_error"); if (this.status == 204) { errorMessage.innerHTML = "Password has been changed!"; @@ -147,26 +162,23 @@ ChangePassRequest.onreadystatechange = function () { errorMessage.innerHTML = "Error 400: Old password is incorrect or Old/New password has wrong format" } else if (this.status == 401) { - errorMessage.innerHTML = "Error 401: You are not logged in" + errorMessage.innerHTML = "Error 401: You are not logged in"; } else if (this.status == 500) { errorMessage.innerHTML = "Error 500: Error at server side"; } else { - errorMessage.innerHTML = "Unknown error" + errorMessage.innerHTML = "Unknown error"; } errorMessage.style.display = "block"; } }; - // Get user data by token Request Object var dataByTokenRequest = new XMLHttpRequest(); -dataByTokenRequest.onreadystatechange = function() { +dataByTokenRequest.onreadystatechange = function () { if (this.readyState == 4) { if (this.status == 200) { - let userDataArray = JSON.parse(this.responseText); - // Putting the user data we retrieved from server to the corresponding html table let userTable = document.getElementById("homeUserInfo"); userTable.rows[0].cells[1].innerHTML = userDataArray["data"].email; @@ -175,7 +187,6 @@ dataByTokenRequest.onreadystatechange = function() { userTable.rows[3].cells[1].innerHTML = userDataArray["data"].gender; userTable.rows[4].cells[1].innerHTML = userDataArray["data"].city; userTable.rows[5].cells[1].innerHTML = userDataArray["data"].country; - localStorage.setItem("homeEmail", userDataArray["data"].email); reloadWall("home"); } @@ -193,17 +204,13 @@ dataByTokenRequest.onreadystatechange = function() { } } }; - // Get user data by email Request Object var dataByEmailRequest = new XMLHttpRequest(); -dataByEmailRequest.onreadystatechange = function() { +dataByEmailRequest.onreadystatechange = function () { if (this.readyState == 4) { - let errorMessage = document.getElementById("searchMessage"); if (this.status == 200) { - let userDataArray = JSON.parse(this.responseText); - // Putting the user data we retrieved from server to the corresponding html table let userTable = document.getElementById("browseUserInfo"); userTable.rows[0].cells[1].innerHTML = userDataArray["data"].email; @@ -212,38 +219,33 @@ dataByEmailRequest.onreadystatechange = function() { userTable.rows[3].cells[1].innerHTML = userDataArray["data"].gender; userTable.rows[4].cells[1].innerHTML = userDataArray["data"].city; userTable.rows[5].cells[1].innerHTML = userDataArray["data"].country; - localStorage.setItem("browseEmail", userDataArray["data"].email); errorMessage.iinnerHTML = "" reloadWall("browse"); } else { if (this.status == 401) { - errorMessage.innerHTML = "Error 401: You are not loged in"; + errorMessage.innerHTML = "Error 401: You are not loged in"; } else if (this.status == 400) { - errorMessage.innerHTML = "Error 400: Incorrect format"; + errorMessage.innerHTML = "Error 400: Incorrect format"; } else if (this.status == 404) { - errorMessage.innerHTML = "Error 404: No user with that email exists"; + errorMessage.innerHTML = "Error 404: No user with that email exists"; } else { - errorMessage.innerHTML = "Unknown error"; - } + errorMessage.innerHTML = "Unknown error"; + } localStorage.setItem("browseEmail", ""); } } }; - // Get Messages By Token Request Object var messagesByTokenRequest = new XMLHttpRequest(); -messagesByTokenRequest.onreadystatechange = function() { +messagesByTokenRequest.onreadystatechange = function () { if (this.readyState == 4) { - if (this.status == 200) { - let currentWall = JSON.parse(this.responseText); - // Formating the text before putting to wall let complete = ""; for (let i = 0; i < currentWall.data.length; i++) { @@ -265,26 +267,21 @@ messagesByTokenRequest.onreadystatechange = function() { } else { console.log("Unknown error"); - } + } } }; - // Get Messages By Email Request Object var messagesByEmailRequest = new XMLHttpRequest(); -messagesByEmailRequest.onreadystatechange = function() { +messagesByEmailRequest.onreadystatechange = function () { if (this.readyState == 4) { - if (this.status == 200) { - let currentWall = JSON.parse(this.responseText); - // Fromating the text before putting to wall let complete = ""; for (let i = 0; i < currentWall.data.length; i++) { complete += currentWall.data[i].person_who_posted + ': ' + currentWall.data[i].message + "</br>"; } document.getElementById('browsePostedMessagesDiv').innerHTML = complete; - } else if (this.status == 204) { console.log("Success, but no messages to receive"); @@ -300,17 +297,15 @@ messagesByEmailRequest.onreadystatechange = function() { } else { console.log("Unknown error"); - } + } } }; - // Post Message Request Object var postMessageRequest = new XMLHttpRequest(); postMessageRequest.onreadystatechange = function () { if (this.readyState == 4) { - let errorMessage = document.getElementById('searchMessage'); - if (this.status == 204) { + if (this.status == 204) { console.log('Message posted!') errorMessage.innerHTML = ""; if (curr_page != null && curr_page != "") @@ -333,28 +328,20 @@ postMessageRequest.onreadystatechange = function () { } } }; - - // - - - - - Init functions - - - - - // - // Function for displaying the right view -displayView = function(){ +displayView = function () { if (localStorage.getItem("currentUser") == "") windowDiv.innerHTML = welcomeDiv.innerHTML; else windowDiv.innerHTML = profileDiv.innerHTML; }; - - // - - - - - The function when page loads - - - - - // - window.onload = function () { - // Delete when done - används för att hoppa tillbaka till rtt view under utveckling // localStorage.setItem("currentUser", ""); // localStorage.setItem("homeEmail", ""); // localStorage.setItem("browseEmail", ""); - // All key/value pairs stored in out localStorage // If first time? check this: if (localStorage.getItem("homeEmail") == null) @@ -363,56 +350,46 @@ window.onload = function () { localStorage.setItem("browseEmail", ""); if (localStorage.getItem("currentUser") == null) localStorage.setItem("currentUser", ""); - // Initialize div objects (global variables) welcomeDiv = document.getElementById("welcomeview"); profileDiv = document.getElementById("profileview"); windowDiv = document.getElementById("windowDiv"); - if (localStorage.getItem("currentUser") != "") {//if logged in - connectWithSocket(); + connectWithSocket(0); } else { // Set correct view depending on if someone is signed in or not displayView(); } }; - - // Function for setting user details, either for yourself or for some other user function setUserDetails(who) { - // "who" could be either home or browse, this way know which info we are displaying and where let token = localStorage.getItem("currentUser"); - if (token != null && token != "" ){ + if (token != null && token != "") { let userTable = document.getElementById(who + "UserInfo"); let email = localStorage.getItem(who + "Email"); - // Display my own info if (who == 'home') { // Send request to server about receiving the info dataByTokenRequest.open("GET", url + "getDataByToken", true); dataByTokenRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); - dataByTokenRequest.setRequestHeader("Authorization", token) + dataByTokenRequest.setRequestHeader("Authorization", token); dataByTokenRequest.send(); } - // Display the info about the searched user else if (who == 'browse' && email != null && email != "") { // Send request to server about receiving the info dataByEmailRequest.open("GET", url + "getDataByEmail/" + email, true); dataByEmailRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); - dataByEmailRequest.setRequestHeader("Authorization", token) + dataByEmailRequest.setRequestHeader("Authorization", token); dataByEmailRequest.send(); } } return false; } - // - - - - - Sign Up/In/Out - - - - - // - function sign_up() { - let form = document.getElementById("signup_form"); let errorMess = document.getElementById("signUpError"); let user = { @@ -425,15 +402,12 @@ function sign_up() { password: form[6].value, repeat_password: form[7].value }; - - // Error checks if (user.password.length < minPassLength) errorMess.innerHTML = "Password's length is too short"; else if (user.password != user.repeat_password) errorMess.innerHTML = "Passwords does not match"; else { - // Sending sign_ou request to "server" signUpRequest.open("POST", url + "sign_up", true); signUpRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); @@ -441,44 +415,34 @@ function sign_up() { } return false; } - function sign_in() { let form = document.getElementById("sign_in_form"); let email = form[0].value; let password = form[1].value; let errorMess = document.getElementById("error"); - // Error checks if (password.length < minPassLength) errorMess.innerHTML = "Password's length is too short"; else { - // Sending sign_in request to "server" signInRequest.open("POST", url + "sign_in", true); signInRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); - signInRequest.send(JSON.stringify({email: email,password: password})); + signInRequest.send(JSON.stringify({ email: email, password: password })); } return false; } - -function sign_out(){ +function sign_out() { let token = localStorage.getItem("currentUser"); - // Sending sign_out request to "server" signOutRequest.open("POST", url + "sign_out", true); signOutRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); - signOutRequest.setRequestHeader("Authorization", token) + signOutRequest.setRequestHeader("Authorization", token); signOutRequest.send(); - return false; } - - // - - - - - Changing tabs - - - - - // - function showPage(ourEvent, name) { - // - - Fixing the tabs - - // // Unselect all let tabcontent = document.getElementById("tabDiv"); @@ -488,8 +452,6 @@ function showPage(ourEvent, name) { // Select only the one we want let div = ourEvent.target; div.style.backgroundColor = "lightgreen"; - - // - - Fixing the content - - // // Unselect all let allPages = document.getElementsByClassName("tabcontent"); @@ -499,22 +461,17 @@ function showPage(ourEvent, name) { // Select only the one we want let selected_tab = document.getElementById(name); selected_tab.style.display = "block"; - return false; } - - // - - - - - Changing Password - - - - - // - //Function for changing password -function change_password(ourEvent){ +function change_password(ourEvent) { let old_pass = document.getElementById("old_password").value; let new_pass = document.getElementById("new_password").value; let confirm_pass = document.getElementById("confirm_pass").value; let token = localStorage.getItem("currentUser"); let error_text = document.getElementById("match_error"); - // New password have to be entered twice, otherwise throw error if (new_pass.length < minPassLength) { error_text.innerHTML = "New password too short"; @@ -525,82 +482,68 @@ function change_password(ourEvent){ else { ChangePassRequest.open("PUT", url + "change_password", true); ChangePassRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); - ChangePassRequest.setRequestHeader("Authorization", token) - ChangePassRequest.send(JSON.stringify({old_password:old_pass, new_password:new_pass})); + ChangePassRequest.setRequestHeader("Authorization", token); + ChangePassRequest.send(JSON.stringify({ old_password: old_pass, new_password: new_pass })); } return false; } - // - - - - - Changing the wall - - - - - // - // Submit text button -function updateWall(who){ +function updateWall(who) { // "who" could be either home or browse, this way know which wall to write on let messageToWall = document.getElementById(who + 'Textarea').value; let errorMessage = document.getElementById('searchMessage'); let token = localStorage.getItem("currentUser"); let email = localStorage.getItem(who + "Email"); curr_page = who; - if (email != null && email != "" && token != null && token != "") { - // Send user's message to the server postMessageRequest.open("POST", url + "post", true); postMessageRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); - postMessageRequest.setRequestHeader("Authorization", token) + postMessageRequest.setRequestHeader("Authorization", token); postMessageRequest.send(JSON.stringify({ email: email, message: messageToWall })); - errorMessage.innerHTML = ""; } - else{ + else { errorMessage.innerHTML = "No user selected to write to"; } - // Clear the text area the user just wrote in document.getElementById(who + 'Textarea').value = ""; return false; } - // Reload button function reloadWall(who) { // "who" could be either home or browse, this way know which wall to load to let token = localStorage.getItem("currentUser"); let email = localStorage.getItem(who + "Email"); - // If wanting messages from my own wall if (who == 'home') { // Send request to server about receiving the info messagesByTokenRequest.open("GET", url + "getUserMessageByToken", true); messagesByTokenRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); - messagesByTokenRequest.setRequestHeader("Authorization", token) + messagesByTokenRequest.setRequestHeader("Authorization", token); messagesByTokenRequest.send(); } - // If wanting messages from another's wall else if (who == 'browse' && email != null && email != "") { // Send request to server about receiving the info messagesByEmailRequest.open("GET", url + "getMessagesByEmail/" + email, true); messagesByEmailRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); - messagesByEmailRequest.setRequestHeader("Authorization", token) + messagesByEmailRequest.setRequestHeader("Authorization", token); messagesByEmailRequest.send(); - } - + } return false; } - // Changing another's wall -function searchAnotherUser(event){ +function searchAnotherUser(event) { let token = localStorage.getItem("currentUser"); - // Reseting the error messages document.getElementById('searchMessage').innerHTML = ""; - - if(token != "") { - + if (token != "") { // Store the searched email in localStorage so that it can be reached in "setUserDetails()" let email = event.target["searchInput"].value; localStorage.setItem("browseEmail", email); setUserDetails("browse"); } return false; -} \ No newline at end of file +}