Skip to content
Snippets Groups Projects
Commit cd7927bc authored by Johan Thörnblom's avatar Johan Thörnblom
Browse files

ddd

parents e87f4603 25bf0017
No related branches found
No related tags found
No related merge requests found
"""Server""" """Server"""
from flask import Flask, jsonify, request, make_response from flask import Flask, jsonify, request, make_response
from gevent.pywsgi import WSGIServer from gevent.pywsgi import WSGIServer
...@@ -7,8 +8,6 @@ import json ...@@ -7,8 +8,6 @@ import json
from flask_sock import Sock from flask_sock import Sock
from gevent import monkey from gevent import monkey
monkey.patch_all() monkey.patch_all()
#Remember: #Remember:
#PUT for updating data, POST for adding new data #PUT for updating data, POST for adding new data
#save token on client and server (lab 3) #save token on client and server (lab 3)
...@@ -17,28 +16,20 @@ monkey.patch_all() ...@@ -17,28 +16,20 @@ monkey.patch_all()
# python3 server.py # python3 server.py
# http://127.0.0.1:5000/myServer # http://127.0.0.1:5000/myServer
# sqlite3 database.db ".read schema.sql" # sqlite3 database.db ".read schema.sql"
#Questions: #Questions:
#Why does localhost in URL not work? #Why does localhost in URL not work?
app = Flask(__name__, static_url_path = '/static')#in case flask does not recognize folder app = Flask(__name__, static_url_path = '/static')#in case flask does not recognize folder
sock = Sock(app) sock = Sock(app)
app.debug = True app.debug = True
session = {'token': ("email", "wsObj")} session = {'token': ("email", "wsObj")}
@app.route('/') @app.route('/')
def root(): def root():
return app.send_static_file('client.html') return app.send_static_file('client.html')
@app.route('/myServer') @app.route('/myServer')
def myServer(): def myServer():
return app.send_static_file('client.html') return app.send_static_file('client.html')
def token_has_error(token): def token_has_error(token):
"""All token standard error checks""" """All token standard error checks"""
if token is None: if token is None:
...@@ -51,7 +42,6 @@ def token_has_error(token): ...@@ -51,7 +42,6 @@ def token_has_error(token):
#"User not signed in or invalid access token" #"User not signed in or invalid access token"
return True, 401 return True, 401
return False, 0 return False, 0
def input_has_error(input): def input_has_error(input):
"""All standard input error checks""" """All standard input error checks"""
try: try:
...@@ -63,16 +53,25 @@ def input_has_error(input): ...@@ -63,16 +53,25 @@ def input_has_error(input):
if len(str) > 50: # "Server received too long " + str if len(str) > 50: # "Server received too long " + str
return True, 400, "" return True, 400, ""
return False, 0, str return False, 0, str
#--------------------------------------
# # Close my socket
# print(session)
# try:
# session[token][1].close()
# except:
# pass # samma sak som ingenting
# print(session)
#
#
# set user to not logged in
#session.pop(token)
#--------------------------------------
@sock.route('/myServer/api') @sock.route('/myServer/api')
def echo(socket): def echo(socket):
while True: while True:
# Making sure we have a valid socket # Making sure we have a valid socket
if not socket: if not socket:
return return
# Making sure message format is OK and store email & token in string # Making sure message format is OK and store email & token in string
data = socket.receive() data = socket.receive()
try: try:
...@@ -83,24 +82,54 @@ def echo(socket): ...@@ -83,24 +82,54 @@ def echo(socket):
myToken = json.loads(data)["token"] myToken = json.loads(data)["token"]
except: except:
return return
try:
# sign out if I am logged in somewhere else mode = json.loads(data)["mode"]
print(session) except:
for token in list(session.keys()): return
if session[token][0] == myEmail and token != myToken:
if session[token][1] != "": #When sign_in is called
session[token][1].send(json.dumps({"action" : "signOut"})) if mode == 0:
session[token][1].close() print("/n")
print("You got kicked out") print("Inside mode 0")
session.pop(token) print("/n")
print(session) # sign out if I am logged in somewhere else
print("/n")
# Put socket in global dict so server knows my connection is open print(session)
session[myToken] = (myEmail, socket) print("/n")
print(session) for token in list(session.keys()):
socket.send(json.dumps({"action" : "signIn"})) if session[token][0] == myEmail and token != myToken:
print("after first if")
if session[token][1] != "":
print("after second if")
session[token][1].send(json.dumps({"action" : "signOut"}))
session[token][1].close()
print("You got kicked out")
session.pop(token)
print("/n")
print(session)
print("/n")
print("-------------------------------")
# Put socket in global dict so server knows my connection is open
session[myToken] = (myEmail, socket)
print(session)
socket.send(json.dumps({"action" : "signIn"}))
#When sign_out is called
else:
# Close my socket
print("/n")
print("Inside mode 1")
print("/n")
print(session)
print("/n")
session[token][1].send(json.dumps({"action" : "signOut"}))
session[token][1].close()
session.pop(token)
print("/n")
print(session)
print("/n")
#set user to not logged in
@app.route("/myServer/sign_in", methods=['POST']) @app.route("/myServer/sign_in", methods=['POST'])
def sign_in(): def sign_in():
"""Sign in user""" """Sign in user"""
...@@ -110,21 +139,17 @@ def sign_in(): ...@@ -110,21 +139,17 @@ def sign_in():
if tmp[0]: if tmp[0]:
return jsonify({}), tmp[1] return jsonify({}), tmp[1]
email = tmp[2] email = tmp[2]
# Validate Password # Validate Password
tmp = input_has_error('password') tmp = input_has_error('password')
if tmp[0]: if tmp[0]:
return jsonify({}), tmp[1] return jsonify({}), tmp[1]
password = tmp[2] password = tmp[2]
# Do the user have an account? # Do the user have an account?
rows = database_helper.find_user(email) rows = database_helper.find_user(email)
if rows is None or rows == []: if rows is None or rows == []:
return jsonify({}), 404 #"No user found by your email" return jsonify({}), 404 #"No user found by your email"
if password != rows[1]: if password != rows[1]:
return jsonify({}), 401 #"Incorrect password") return jsonify({}), 401 #"Incorrect password")
# Generate a random token # Generate a random token
token = str(uuid.uuid4()) token = str(uuid.uuid4())
session[token] = (email, "") session[token] = (email, "")
...@@ -134,18 +159,14 @@ def sign_in(): ...@@ -134,18 +159,14 @@ def sign_in():
response.headers.add("Access-Control-Allow-Origin", "*") response.headers.add("Access-Control-Allow-Origin", "*")
response.headers["Authorization"] = token response.headers["Authorization"] = token
return response, 204 return response, 204
@app.route("/myServer/sign_up", methods=['POST']) @app.route("/myServer/sign_up", methods=['POST'])
def sign_up(): def sign_up():
"""Sign up a user""" """Sign up a user"""
tmp = input_has_error('email') tmp = input_has_error('email')
if tmp[0]: if tmp[0]:
print(tmp[1]) # print(tmp[1])
return jsonify({}), tmp[1] return jsonify({}), tmp[1]
email = tmp[2] email = tmp[2]
# Checking that the user does not already exist # Checking that the user does not already exist
if database_helper.find_user(email) is not None: if database_helper.find_user(email) is not None:
return jsonify({}), 409 #"Error: User already exists" return jsonify({}), 409 #"Error: User already exists"
...@@ -176,14 +197,11 @@ def sign_up(): ...@@ -176,14 +197,11 @@ def sign_up():
if tmp[0]: if tmp[0]:
return jsonify({}), tmp[1] return jsonify({}), tmp[1]
country = tmp[2] country = tmp[2]
# Attempts to insert the user data to the database # Attempts to insert the user data to the database
if database_helper.create_user(email, password, firstname, familyname, gender, city, country): if database_helper.create_user(email, password, firstname, familyname, gender, city, country):
return jsonify({}), 204 #"Server inserted user data into database" return jsonify({}), 204 #"Server inserted user data into database"
else: else:
return jsonify({}), 500 #"General Error: Server failed to insert user data into database" return jsonify({}), 500 #"General Error: Server failed to insert user data into database"
@app.route("/myServer/sign_out", methods=['POST']) @app.route("/myServer/sign_out", methods=['POST'])
def sign_out(): def sign_out():
"""Sign out user""" """Sign out user"""
...@@ -194,121 +212,97 @@ def sign_out(): ...@@ -194,121 +212,97 @@ def sign_out():
if tmp[0]: if tmp[0]:
return jsonify({}), tmp[1] return jsonify({}), tmp[1]
# Close my socket #--------------------------------------
print(session) # # Close my socket
try: # print(session)
session[token][1].close() # try:
except: # session[token][1].close()
pass # samma sak som ingenting # except:
print(session) # pass # samma sak som ingenting
# print(session)
# set user to not logged in
try:
session.pop(token) # #set user to not logged in
except: # session.pop(token)
pass # samma sak som ingenting #--------------------------------------
return jsonify({}), 204 # "Successfully signed out") return jsonify({}), 204 # "Successfully signed out")
@app.route("/myServer/change_password", methods=['PUT']) @app.route("/myServer/change_password", methods=['PUT'])
def change_password(): def change_password():
"""Change password for the current user""" """Change password for the current user"""
token = request.headers["Authorization"] token = request.headers["Authorization"]
# Validate Token # Validate Token
tmp = token_has_error(token) tmp = token_has_error(token)
if tmp[0]: if tmp[0]:
print("validate token") #print("validate token")
return jsonify({}), tmp[1] return jsonify({}), tmp[1]
# Validate Old Password # Validate Old Password
tmp = input_has_error('old_password') tmp = input_has_error('old_password')
if tmp[0]: if tmp[0]:
print("validate old password") #print("validate old password")
return jsonify({}), tmp[1] return jsonify({}), tmp[1]
old_password = tmp[2] old_password = tmp[2]
# Validate New Password # Validate New Password
tmp = input_has_error('new_password') tmp = input_has_error('new_password')
if tmp[0]: if tmp[0]:
print("validate new password") #print("validate new password")
return jsonify({}), tmp[1] return jsonify({}), tmp[1]
new_password = tmp[2] new_password = tmp[2]
# Extracting theemail of the current user # Extracting theemail of the current user
email = session[token][0] email = session[token][0]
# Validation of the old password and attemption to change it to the new one # 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 if old_password == database_helper.find_user(email)[1]: #checks if old_password is correct
status = database_helper.update_user(new_password, email) status = database_helper.update_user(new_password, email)
if status: if status:
print("Password changed") # print("Password changed")
return jsonify({}), 204 # "Password has been changed!" return jsonify({}), 204 # "Password has been changed!"
else: else:
return jsonify({}), 500 # "Password has not been changed" return jsonify({}), 500 # "Password has not been changed"
else: else:
return jsonify({}), 400 # "Old password is incorrect" return jsonify({}), 400 # "Old password is incorrect"
@app.route("/myServer/getDataByToken", methods=['GET']) @app.route("/myServer/getDataByToken", methods=['GET'])
def get_user_data_by_token(): def get_user_data_by_token():
"""Verify current user through token and attemp to return the data of the user""" """Verify current user through token and attemp to return the data of the user"""
token = request.headers["Authorization"] token = request.headers["Authorization"]
# Validate token # Validate token
if token not in session: if token not in session:
return jsonify({}), 401 # "User not signed in or invalid access token" return jsonify({}), 401 # "User not signed in or invalid access token"
# Extracting the email of the current user # Extracting the email of the current user
email = session[token][0] email = session[token][0]
return get_user_data_by_email(email) return get_user_data_by_email(email)
@app.route("/myServer/getDataByEmail/<email>", methods=['GET']) @app.route("/myServer/getDataByEmail/<email>", methods=['GET'])
def get_user_data_by_email(email): def get_user_data_by_email(email):
"""Get user data by email""" """Get user data by email"""
token = request.headers["Authorization"] token = request.headers["Authorization"]
# Validate Token # Validate Token
tmp = token_has_error(token) tmp = token_has_error(token)
if tmp[0]: if tmp[0]:
return jsonify({}), tmp[1] return jsonify({}), tmp[1]
# Validate email # Validate email
if email is None: if email is None:
return True, 400 return True, 400
if len(email) > 50: if len(email) > 50:
return True, 400 return True, 400
# Attempting to find the data of the current user in the database # Attempting to find the data of the current user in the database
data = database_helper.find_user(email) data = database_helper.find_user(email)
if data is None or data == []: if data is None or data == []:
return jsonify({}), 404 #"No user found by your destination email" 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]} 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!" return jsonify({"data" : formated_data}), 200 # "Data successfully sent to you!"
@app.route("/myServer/getUserMessageByToken", methods=['GET']) @app.route("/myServer/getUserMessageByToken", methods=['GET'])
def get_user_messages_by_token(): def get_user_messages_by_token():
"""Get user's message wall thought the token of the user""" """Get user's message wall thought the token of the user"""
token = request.headers["Authorization"] token = request.headers["Authorization"]
# Validate Token # Validate Token
tmp = token_has_error(token) tmp = token_has_error(token)
if tmp[0]: if tmp[0]:
return jsonify({}), tmp[1] return jsonify({}), tmp[1]
# Extracting the email of the current user # Extracting the email of the current user
email = session[token][0] email = session[token][0]
return get_user_messages_by_email(email) return get_user_messages_by_email(email)
@app.route("/myServer/getMessagesByEmail/<req_email>", methods=['GET']) @app.route("/myServer/getMessagesByEmail/<req_email>", methods=['GET'])
def get_user_messages_by_email(req_email): def get_user_messages_by_email(req_email):
"""Get user's message wall thought the email of the user""" """Get user's message wall thought the email of the user"""
token = request.headers["Authorization"] token = request.headers["Authorization"]
# Validate Token # Validate Token
tmp = token_has_error(token) tmp = token_has_error(token)
if tmp[0]: if tmp[0]:
...@@ -319,36 +313,28 @@ def get_user_messages_by_email(req_email): ...@@ -319,36 +313,28 @@ def get_user_messages_by_email(req_email):
return True, 400 return True, 400
if len(req_email) > 50: if len(req_email) > 50:
return True, 400 return True, 400
# Find requested user in the data base # Find requested user in the data base
rows = database_helper.find_user(req_email) rows = database_helper.find_user(req_email)
# Error check # Error check
if rows is None or rows == []: if rows is None or rows == []:
return jsonify({}), 404 #"No user found by your destination email" return jsonify({}), 404 #"No user found by your destination email"
# Insert post-info into array # Insert post-info into array
rows = database_helper.get_post(req_email) rows = database_helper.get_post(req_email)
result = [] result = []
for row in rows: for row in rows:
result.append({"email": row[0], "person_who_posted": row[1], "message": row[2]}) 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 # Notify user if the wall is empty or not, and if not, return the all messages
if result == []: if result == []:
return jsonify({}), 204 #"user's wall had no messages to collect" return jsonify({}), 204 #"user's wall had no messages to collect"
return jsonify({"data" : result}), 200 # User posts has been displayed" return jsonify({"data" : result}), 200 # User posts has been displayed"
@app.route("/myServer/post", methods=['POST']) @app.route("/myServer/post", methods=['POST'])
def post_message(): def post_message():
"""Post a message on sombody's wall""" """Post a message on sombody's wall"""
# Find out sender's email # Find out sender's email
token = request.headers["Authorization"] token = request.headers["Authorization"]
tmp = token_has_error(token) tmp = token_has_error(token)
if tmp[0]: if tmp[0]:
return jsonify({}), tmp[1] return jsonify({}), tmp[1]
# Extracting the email of the current user # Extracting the email of the current user
my_email = session[token][0] my_email = session[token][0]
...@@ -357,24 +343,19 @@ def post_message(): ...@@ -357,24 +343,19 @@ def post_message():
if tmp[0]: if tmp[0]:
return jsonify({}), tmp[1] return jsonify({}), tmp[1]
destination_email = tmp[2] destination_email = tmp[2]
# Finding out if the user exist, who we wanna write a message to # Finding out if the user exist, who we wanna write a message to
rows = database_helper.find_user(destination_email) rows = database_helper.find_user(destination_email)
if rows is None or rows == []: if rows is None or rows == []:
return jsonify({}), 404 #"No user found by your destination email" return jsonify({}), 404 #"No user found by your destination email"
# Verify message that we want to post # Verify message that we want to post
tmp = input_has_error('message') tmp = input_has_error('message')
if tmp[0]: if tmp[0]:
return jsonify({}), tmp[1] return jsonify({}), tmp[1]
message = tmp[2] message = tmp[2]
# Calling and error checking function # Calling and error checking function
if not database_helper.create_post(my_email, destination_email, message): if not database_helper.create_post(my_email, destination_email, message):
return jsonify({}), 500 #"Server failed to post message to database" return jsonify({}), 500 #"Server failed to post message to database"
return jsonify({}), 204 #"Succeeded to post message") return jsonify({}), 204 #"Succeeded to post message")
if __name__ == '__main__': if __name__ == '__main__':
# app.run(port=5000, debug=True) # app.run(port=5000, debug=True)
app.debug = True app.debug = True
......
// Global variables // Global variables
var minPassLength = 2; var minPassLength = 2;
var windowDiv; var windowDiv;
...@@ -6,76 +7,63 @@ var profileDiv; ...@@ -6,76 +7,63 @@ var profileDiv;
var url = 'http://' + document.domain + ':5000/myServer/'; var url = 'http://' + document.domain + ':5000/myServer/';
var curr_page = ""; var curr_page = "";
var socket; var socket;
// source "/Users/lorenzo/OneDrive - Linköpings universitet/Skola/DI3B/TDDD97/virtualenv/bin/activate" // source "/Users/lorenzo/OneDrive - Linköpings universitet/Skola/DI3B/TDDD97/virtualenv/bin/activate"
function allowDrop(event) { function allowDrop(event) {
event.preventDefault(); event.preventDefault();
} }
function drag(event) { function drag(event) {
event.dataTransfer.setData("text/plain", event.target.innerHTML); event.dataTransfer.setData("text/plain", event.target.innerHTML);
} }
function dropHome(event) { function dropHome(event) {
event.preventDefault(); event.preventDefault();
let data = event.dataTransfer.getData("text/plain"); let data = event.dataTransfer.getData("text/plain");
// Replaces parts of the string. "g" gör att alla accurences av substringen byts ut // Replaces parts of the string. "g" gör att alla accurences av substringen byts ut
let newStr = data.replace(/<br>/g, "\n"); let newStr = data.replace(/<br>/g, "\n");
// newStr = tmp.replace(/ /g, ''); // newStr = tmp.replace(/ /g, '');
document.getElementById("homeTextarea").innerHTML = newStr; document.getElementById("homeTextarea").innerHTML = newStr;
} }
function dropBrowse(event) { function dropBrowse(event) {
event.preventDefault(); event.preventDefault();
let data = event.dataTransfer.getData("text/plain"); let data = event.dataTransfer.getData("text/plain");
// Replaces parts of the string. "g" gör att alla accurences av substringen byts ut // Replaces parts of the string. "g" gör att alla accurences av substringen byts ut
let newStr = data.replace(/<br>/g, "\n"); let newStr = data.replace(/<br>/g, "\n");
// newStr = tmp.replace(/ /g, ''); // newStr = tmp.replace(/ /g, '');
document.getElementById("browseTextarea").innerHTML = newStr; document.getElementById("browseTextarea").innerHTML = newStr;
} }
// Socket // Socket
function connectWithSocket() { function connectWithSocket(mode) {
let token = localStorage.getItem("currentUser"); let token = localStorage.getItem("currentUser");
// Changes the view to profile view and loads user info // Changes the view to profile view and loads user info
displayView(); displayView();
setUserDetails("home"); setUserDetails("home");
// Establish web socket // Establish web socket
socket = new WebSocket('ws://' + document.domain + ':5000/myServer/api'); socket = new WebSocket('ws://' + document.domain + ':5000/myServer/api');
socket.onopen = function (event) { socket.onopen = function (event) {
let myEmail = localStorage.getItem("homeEmail"); 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 // Todo - ändra så att token skickas i header istället
this.send(JSON.stringify({token: token, email: myEmail}));
console.log("Nu har jag skickat"); console.log("Nu har jag skickat");
} }
socket.onmessage = function (event) { socket.onmessage = function (event) {
let response = JSON.parse(event.data); let response = JSON.parse(event.data);
console.log("Nu fick jag svar");
console.log("Nu fick jag svar");
switch (response["action"]) { switch (response["action"]) {
case "signOut": case "signOut":
// If old socket open, close it. // If old socket open, close it.
socket.close(); socket.close();
console.log(response); console.log(response);
// Reset token in the localStorage // Reset token in the localStorage
localStorage.setItem("currentUser", ""); localStorage.setItem("currentUser", "");
localStorage.setItem("homeEmail", ""); localStorage.setItem("homeEmail", "");
localStorage.setItem("browseEmail", ""); localStorage.setItem("browseEmail", "");
// Changes the view to welcome view // Changes the view to welcome view
displayView(); displayView();
document.getElementById("error").innerHTML = "Signed Out, you signed in elsewhere"; document.getElementById("error").innerHTML = "Signed Out, you signed in elsewhere";
...@@ -84,50 +72,46 @@ function connectWithSocket() { ...@@ -84,50 +72,46 @@ function connectWithSocket() {
console.log(response); console.log(response);
console.log("ja är signed in"); console.log("ja är signed in");
break; break;
} }
} }
} }
// - - - - - Init Request Objects - - - - - // // - - - - - Init Request Objects - - - - - //
// Sign In Request Object // Sign In Request Object
var signInRequest = new XMLHttpRequest(); var signInRequest = new XMLHttpRequest();
signInRequest.onreadystatechange = function() { signInRequest.onreadystatechange = function () {
if (this.readyState == 4) { if (this.readyState == 4) {
let errorMessage = document.getElementById("error"); let errorMessage = document.getElementById("error");
if (this.status == 204) { if (this.status == 204) {
let token = this.getResponseHeader("Authorization"); let token = this.getResponseHeader("Authorization");
localStorage.setItem("currentUser", token); localStorage.setItem("currentUser", token);
connectWithSocket(); console.log("Inside SignInRequest")
connectWithSocket(0);
} }
else if (this.status == 400) { else if (this.status == 400) {
errorMessage.innerHTML = "Error 400: Incorrect format"; errorMessage.innerHTML = "Error 400: Incorrect format";
} }
else if (this.status == 404) { 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) { else if (this.status == 401) {
errorMessage.innerHTML = "Error 401: Incorrect password"; errorMessage.innerHTML = "Error 401: Incorrect password";
} }
else { else {
errorMessage.innerHTML = "Unknown error"; errorMessage.innerHTML = "Unknown error";
} }
} }
}; };
// Sign Out Request Object // Sign Out Request Object
var signOutRequest = new XMLHttpRequest(); var signOutRequest = new XMLHttpRequest();
signOutRequest.onreadystatechange = function() { signOutRequest.onreadystatechange = function () {
if (this.readyState == 4) { if (this.readyState == 4) {
// Reset token in the localStorage // Reset token in the localStorage
localStorage.setItem("currentUser", ""); localStorage.setItem("currentUser", "");
localStorage.setItem("homeEmail", ""); localStorage.setItem("homeEmail", "");
localStorage.setItem("browseEmail", ""); localStorage.setItem("browseEmail", "");
console.log("Inside signOutRequest")
if (this.status == 204) { if (this.status == 204) {
connectWithSocket(1);
// Changes the view to welcome view // Changes the view to welcome view
displayView(); displayView();
} }
...@@ -138,15 +122,13 @@ signOutRequest.onreadystatechange = function() { ...@@ -138,15 +122,13 @@ signOutRequest.onreadystatechange = function() {
else { else {
console.log("Unknown error"); console.log("Unknown error");
displayView(); displayView();
} }
} }
}; };
// Sign Up Request Object // Sign Up Request Object
var signUpRequest = new XMLHttpRequest(); var signUpRequest = new XMLHttpRequest();
signUpRequest.onreadystatechange = function () { signUpRequest.onreadystatechange = function () {
if (this.readyState == 4) { if (this.readyState == 4) {
let errorMessage = document.getElementById("error"); let errorMessage = document.getElementById("error");
if (this.status == 204) { if (this.status == 204) {
errorMessage.innerHTML = "You have signed up"; errorMessage.innerHTML = "You have signed up";
...@@ -159,18 +141,16 @@ signUpRequest.onreadystatechange = function () { ...@@ -159,18 +141,16 @@ signUpRequest.onreadystatechange = function () {
} }
else if (this.status == 500) { else if (this.status == 500) {
errorMessage.innerHTML = "Error 500: Error at server side"; errorMessage.innerHTML = "Error 500: Error at server side";
} }
else { else {
errorMessage.innerHTML = "Unknown error"; errorMessage.innerHTML = "Unknown error";
} }
} }
}; };
// Change Password Request Object // Change Password Request Object
var ChangePassRequest = new XMLHttpRequest(); var ChangePassRequest = new XMLHttpRequest();
ChangePassRequest.onreadystatechange = function () { ChangePassRequest.onreadystatechange = function () {
if (this.readyState == 4) { if (this.readyState == 4) {
let errorMessage = document.getElementById("match_error"); let errorMessage = document.getElementById("match_error");
if (this.status == 204) { if (this.status == 204) {
errorMessage.innerHTML = "Password has been changed!"; errorMessage.innerHTML = "Password has been changed!";
...@@ -190,15 +170,12 @@ ChangePassRequest.onreadystatechange = function () { ...@@ -190,15 +170,12 @@ ChangePassRequest.onreadystatechange = function () {
errorMessage.style.display = "block"; errorMessage.style.display = "block";
} }
}; };
// Get user data by token Request Object // Get user data by token Request Object
var dataByTokenRequest = new XMLHttpRequest(); var dataByTokenRequest = new XMLHttpRequest();
dataByTokenRequest.onreadystatechange = function() { dataByTokenRequest.onreadystatechange = function () {
if (this.readyState == 4) { if (this.readyState == 4) {
if (this.status == 200) { if (this.status == 200) {
let userDataArray = JSON.parse(this.responseText); let userDataArray = JSON.parse(this.responseText);
// Putting the user data we retrieved from server to the corresponding html table // Putting the user data we retrieved from server to the corresponding html table
let userTable = document.getElementById("homeUserInfo"); let userTable = document.getElementById("homeUserInfo");
userTable.rows[0].cells[1].innerHTML = userDataArray["data"].email; userTable.rows[0].cells[1].innerHTML = userDataArray["data"].email;
...@@ -207,7 +184,6 @@ dataByTokenRequest.onreadystatechange = function() { ...@@ -207,7 +184,6 @@ dataByTokenRequest.onreadystatechange = function() {
userTable.rows[3].cells[1].innerHTML = userDataArray["data"].gender; userTable.rows[3].cells[1].innerHTML = userDataArray["data"].gender;
userTable.rows[4].cells[1].innerHTML = userDataArray["data"].city; userTable.rows[4].cells[1].innerHTML = userDataArray["data"].city;
userTable.rows[5].cells[1].innerHTML = userDataArray["data"].country; userTable.rows[5].cells[1].innerHTML = userDataArray["data"].country;
localStorage.setItem("homeEmail", userDataArray["data"].email); localStorage.setItem("homeEmail", userDataArray["data"].email);
reloadWall("home"); reloadWall("home");
} }
...@@ -225,17 +201,13 @@ dataByTokenRequest.onreadystatechange = function() { ...@@ -225,17 +201,13 @@ dataByTokenRequest.onreadystatechange = function() {
} }
} }
}; };
// Get user data by email Request Object // Get user data by email Request Object
var dataByEmailRequest = new XMLHttpRequest(); var dataByEmailRequest = new XMLHttpRequest();
dataByEmailRequest.onreadystatechange = function() { dataByEmailRequest.onreadystatechange = function () {
if (this.readyState == 4) { if (this.readyState == 4) {
let errorMessage = document.getElementById("searchMessage"); let errorMessage = document.getElementById("searchMessage");
if (this.status == 200) { if (this.status == 200) {
let userDataArray = JSON.parse(this.responseText); let userDataArray = JSON.parse(this.responseText);
// Putting the user data we retrieved from server to the corresponding html table // Putting the user data we retrieved from server to the corresponding html table
let userTable = document.getElementById("browseUserInfo"); let userTable = document.getElementById("browseUserInfo");
userTable.rows[0].cells[1].innerHTML = userDataArray["data"].email; userTable.rows[0].cells[1].innerHTML = userDataArray["data"].email;
...@@ -244,38 +216,33 @@ dataByEmailRequest.onreadystatechange = function() { ...@@ -244,38 +216,33 @@ dataByEmailRequest.onreadystatechange = function() {
userTable.rows[3].cells[1].innerHTML = userDataArray["data"].gender; userTable.rows[3].cells[1].innerHTML = userDataArray["data"].gender;
userTable.rows[4].cells[1].innerHTML = userDataArray["data"].city; userTable.rows[4].cells[1].innerHTML = userDataArray["data"].city;
userTable.rows[5].cells[1].innerHTML = userDataArray["data"].country; userTable.rows[5].cells[1].innerHTML = userDataArray["data"].country;
localStorage.setItem("browseEmail", userDataArray["data"].email); localStorage.setItem("browseEmail", userDataArray["data"].email);
errorMessage.iinnerHTML = "" errorMessage.iinnerHTML = ""
reloadWall("browse"); reloadWall("browse");
} }
else { else {
if (this.status == 401) { 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) { else if (this.status == 400) {
errorMessage.innerHTML = "Error 400: Incorrect format"; errorMessage.innerHTML = "Error 400: Incorrect format";
} }
else if (this.status == 404) { 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 { else {
errorMessage.innerHTML = "Unknown error"; errorMessage.innerHTML = "Unknown error";
} }
localStorage.setItem("browseEmail", ""); localStorage.setItem("browseEmail", "");
} }
} }
}; };
// Get Messages By Token Request Object // Get Messages By Token Request Object
var messagesByTokenRequest = new XMLHttpRequest(); var messagesByTokenRequest = new XMLHttpRequest();
messagesByTokenRequest.onreadystatechange = function() { messagesByTokenRequest.onreadystatechange = function () {
if (this.readyState == 4) { if (this.readyState == 4) {
if (this.status == 200) { if (this.status == 200) {
let currentWall = JSON.parse(this.responseText); let currentWall = JSON.parse(this.responseText);
// Formating the text before putting to wall // Formating the text before putting to wall
let complete = ""; let complete = "";
for (let i = 0; i < currentWall.data.length; i++) { for (let i = 0; i < currentWall.data.length; i++) {
...@@ -297,26 +264,21 @@ messagesByTokenRequest.onreadystatechange = function() { ...@@ -297,26 +264,21 @@ messagesByTokenRequest.onreadystatechange = function() {
} }
else { else {
console.log("Unknown error"); console.log("Unknown error");
} }
} }
}; };
// Get Messages By Email Request Object // Get Messages By Email Request Object
var messagesByEmailRequest = new XMLHttpRequest(); var messagesByEmailRequest = new XMLHttpRequest();
messagesByEmailRequest.onreadystatechange = function() { messagesByEmailRequest.onreadystatechange = function () {
if (this.readyState == 4) { if (this.readyState == 4) {
if (this.status == 200) { if (this.status == 200) {
let currentWall = JSON.parse(this.responseText); let currentWall = JSON.parse(this.responseText);
// Fromating the text before putting to wall // Fromating the text before putting to wall
let complete = ""; let complete = "";
for (let i = 0; i < currentWall.data.length; i++) { for (let i = 0; i < currentWall.data.length; i++) {
complete += currentWall.data[i].person_who_posted + ': ' + currentWall.data[i].message + "</br>"; complete += currentWall.data[i].person_who_posted + ': ' + currentWall.data[i].message + "</br>";
} }
document.getElementById('browsePostedMessagesDiv').innerHTML = complete; document.getElementById('browsePostedMessagesDiv').innerHTML = complete;
} }
else if (this.status == 204) { else if (this.status == 204) {
console.log("Success, but no messages to receive"); console.log("Success, but no messages to receive");
...@@ -332,17 +294,15 @@ messagesByEmailRequest.onreadystatechange = function() { ...@@ -332,17 +294,15 @@ messagesByEmailRequest.onreadystatechange = function() {
} }
else { else {
console.log("Unknown error"); console.log("Unknown error");
} }
} }
}; };
// Post Message Request Object // Post Message Request Object
var postMessageRequest = new XMLHttpRequest(); var postMessageRequest = new XMLHttpRequest();
postMessageRequest.onreadystatechange = function () { postMessageRequest.onreadystatechange = function () {
if (this.readyState == 4) { if (this.readyState == 4) {
let errorMessage = document.getElementById('searchMessage'); let errorMessage = document.getElementById('searchMessage');
if (this.status == 204) { if (this.status == 204) {
console.log('Message posted!') console.log('Message posted!')
errorMessage.innerHTML = ""; errorMessage.innerHTML = "";
if (curr_page != null && curr_page != "") if (curr_page != null && curr_page != "")
...@@ -365,28 +325,20 @@ postMessageRequest.onreadystatechange = function () { ...@@ -365,28 +325,20 @@ postMessageRequest.onreadystatechange = function () {
} }
} }
}; };
// - - - - - Init functions - - - - - // // - - - - - Init functions - - - - - //
// Function for displaying the right view // Function for displaying the right view
displayView = function(){ displayView = function () {
if (localStorage.getItem("currentUser") == "") if (localStorage.getItem("currentUser") == "")
windowDiv.innerHTML = welcomeDiv.innerHTML; windowDiv.innerHTML = welcomeDiv.innerHTML;
else else
windowDiv.innerHTML = profileDiv.innerHTML; windowDiv.innerHTML = profileDiv.innerHTML;
}; };
// - - - - - The function when page loads - - - - - // // - - - - - The function when page loads - - - - - //
window.onload = function () { window.onload = function () {
// Delete when done - används för att hoppa tillbaka till rtt view under utveckling // Delete when done - används för att hoppa tillbaka till rtt view under utveckling
// localStorage.setItem("currentUser", ""); // localStorage.setItem("currentUser", "");
// localStorage.setItem("homeEmail", ""); // localStorage.setItem("homeEmail", "");
// localStorage.setItem("browseEmail", ""); // localStorage.setItem("browseEmail", "");
// All key/value pairs stored in out localStorage // All key/value pairs stored in out localStorage
// If first time? check this: // If first time? check this:
if (localStorage.getItem("homeEmail") == null) if (localStorage.getItem("homeEmail") == null)
...@@ -395,31 +347,25 @@ window.onload = function () { ...@@ -395,31 +347,25 @@ window.onload = function () {
localStorage.setItem("browseEmail", ""); localStorage.setItem("browseEmail", "");
if (localStorage.getItem("currentUser") == null) if (localStorage.getItem("currentUser") == null)
localStorage.setItem("currentUser", ""); localStorage.setItem("currentUser", "");
// Initialize div objects (global variables) // Initialize div objects (global variables)
welcomeDiv = document.getElementById("welcomeview"); welcomeDiv = document.getElementById("welcomeview");
profileDiv = document.getElementById("profileview"); profileDiv = document.getElementById("profileview");
windowDiv = document.getElementById("windowDiv"); windowDiv = document.getElementById("windowDiv");
if (localStorage.getItem("currentUser") != "") {//if logged in if (localStorage.getItem("currentUser") != "") {//if logged in
connectWithSocket(); connectWithSocket(0);
} }
else { else {
// Set correct view depending on if someone is signed in or not // Set correct view depending on if someone is signed in or not
displayView(); displayView();
} }
}; };
// Function for setting user details, either for yourself or for some other user // Function for setting user details, either for yourself or for some other user
function setUserDetails(who) { function setUserDetails(who) {
// "who" could be either home or browse, this way know which info we are displaying and where // "who" could be either home or browse, this way know which info we are displaying and where
let token = localStorage.getItem("currentUser"); let token = localStorage.getItem("currentUser");
if (token != null && token != "" ){ if (token != null && token != "") {
let userTable = document.getElementById(who + "UserInfo"); let userTable = document.getElementById(who + "UserInfo");
let email = localStorage.getItem(who + "Email"); let email = localStorage.getItem(who + "Email");
// Display my own info // Display my own info
if (who == 'home') { if (who == 'home') {
// Send request to server about receiving the info // Send request to server about receiving the info
...@@ -428,7 +374,6 @@ function setUserDetails(who) { ...@@ -428,7 +374,6 @@ function setUserDetails(who) {
dataByTokenRequest.setRequestHeader("Authorization", token); dataByTokenRequest.setRequestHeader("Authorization", token);
dataByTokenRequest.send(); dataByTokenRequest.send();
} }
// Display the info about the searched user // Display the info about the searched user
else if (who == 'browse' && email != null && email != "") { else if (who == 'browse' && email != null && email != "") {
// Send request to server about receiving the info // Send request to server about receiving the info
...@@ -440,11 +385,8 @@ function setUserDetails(who) { ...@@ -440,11 +385,8 @@ function setUserDetails(who) {
} }
return false; return false;
} }
// - - - - - Sign Up/In/Out - - - - - // // - - - - - Sign Up/In/Out - - - - - //
function sign_up() { function sign_up() {
let form = document.getElementById("signup_form"); let form = document.getElementById("signup_form");
let errorMess = document.getElementById("signUpError"); let errorMess = document.getElementById("signUpError");
let user = { let user = {
...@@ -457,15 +399,12 @@ function sign_up() { ...@@ -457,15 +399,12 @@ function sign_up() {
password: form[6].value, password: form[6].value,
repeat_password: form[7].value repeat_password: form[7].value
}; };
// Error checks // Error checks
if (user.password.length < minPassLength) if (user.password.length < minPassLength)
errorMess.innerHTML = "Password's length is too short"; errorMess.innerHTML = "Password's length is too short";
else if (user.password != user.repeat_password) else if (user.password != user.repeat_password)
errorMess.innerHTML = "Passwords does not match"; errorMess.innerHTML = "Passwords does not match";
else { else {
// Sending sign_ou request to "server" // Sending sign_ou request to "server"
signUpRequest.open("POST", url + "sign_up", true); signUpRequest.open("POST", url + "sign_up", true);
signUpRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); signUpRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
...@@ -473,44 +412,34 @@ function sign_up() { ...@@ -473,44 +412,34 @@ function sign_up() {
} }
return false; return false;
} }
function sign_in() { function sign_in() {
let form = document.getElementById("sign_in_form"); let form = document.getElementById("sign_in_form");
let email = form[0].value; let email = form[0].value;
let password = form[1].value; let password = form[1].value;
let errorMess = document.getElementById("error"); let errorMess = document.getElementById("error");
// Error checks // Error checks
if (password.length < minPassLength) if (password.length < minPassLength)
errorMess.innerHTML = "Password's length is too short"; errorMess.innerHTML = "Password's length is too short";
else { else {
// Sending sign_in request to "server" // Sending sign_in request to "server"
signInRequest.open("POST", url + "sign_in", true); signInRequest.open("POST", url + "sign_in", true);
signInRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); 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; return false;
} }
function sign_out() {
function sign_out(){
let token = localStorage.getItem("currentUser"); let token = localStorage.getItem("currentUser");
// Sending sign_out request to "server" // Sending sign_out request to "server"
signOutRequest.open("POST", url + "sign_out", true); signOutRequest.open("POST", url + "sign_out", true);
signOutRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); signOutRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
signOutRequest.setRequestHeader("Authorization", token); signOutRequest.setRequestHeader("Authorization", token);
signOutRequest.send(); signOutRequest.send();
return false; return false;
} }
// - - - - - Changing tabs - - - - - // // - - - - - Changing tabs - - - - - //
function showPage(ourEvent, name) { function showPage(ourEvent, name) {
// - - Fixing the tabs - - // // - - Fixing the tabs - - //
// Unselect all // Unselect all
let tabcontent = document.getElementById("tabDiv"); let tabcontent = document.getElementById("tabDiv");
...@@ -520,8 +449,6 @@ function showPage(ourEvent, name) { ...@@ -520,8 +449,6 @@ function showPage(ourEvent, name) {
// Select only the one we want // Select only the one we want
let div = ourEvent.target; let div = ourEvent.target;
div.style.backgroundColor = "lightgreen"; div.style.backgroundColor = "lightgreen";
// - - Fixing the content - - // // - - Fixing the content - - //
// Unselect all // Unselect all
let allPages = document.getElementsByClassName("tabcontent"); let allPages = document.getElementsByClassName("tabcontent");
...@@ -531,22 +458,17 @@ function showPage(ourEvent, name) { ...@@ -531,22 +458,17 @@ function showPage(ourEvent, name) {
// Select only the one we want // Select only the one we want
let selected_tab = document.getElementById(name); let selected_tab = document.getElementById(name);
selected_tab.style.display = "block"; selected_tab.style.display = "block";
return false; return false;
} }
// - - - - - Changing Password - - - - - // // - - - - - Changing Password - - - - - //
//Function for changing password //Function for changing password
function change_password(ourEvent){ function change_password(ourEvent) {
let old_pass = document.getElementById("old_password").value; let old_pass = document.getElementById("old_password").value;
let new_pass = document.getElementById("new_password").value; let new_pass = document.getElementById("new_password").value;
let confirm_pass = document.getElementById("confirm_pass").value; let confirm_pass = document.getElementById("confirm_pass").value;
let token = localStorage.getItem("currentUser"); let token = localStorage.getItem("currentUser");
let error_text = document.getElementById("match_error"); let error_text = document.getElementById("match_error");
// New password have to be entered twice, otherwise throw error // New password have to be entered twice, otherwise throw error
if (new_pass.length < minPassLength) { if (new_pass.length < minPassLength) {
error_text.innerHTML = "New password too short"; error_text.innerHTML = "New password too short";
...@@ -558,47 +480,39 @@ function change_password(ourEvent){ ...@@ -558,47 +480,39 @@ function change_password(ourEvent){
ChangePassRequest.open("PUT", url + "change_password", true); ChangePassRequest.open("PUT", url + "change_password", true);
ChangePassRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); ChangePassRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
ChangePassRequest.setRequestHeader("Authorization", token); ChangePassRequest.setRequestHeader("Authorization", token);
ChangePassRequest.send(JSON.stringify({old_password:old_pass, new_password:new_pass})); ChangePassRequest.send(JSON.stringify({ old_password: old_pass, new_password: new_pass }));
} }
return false; return false;
} }
// - - - - - Changing the wall - - - - - // // - - - - - Changing the wall - - - - - //
// Submit text button // Submit text button
function updateWall(who){ function updateWall(who) {
// "who" could be either home or browse, this way know which wall to write on // "who" could be either home or browse, this way know which wall to write on
let messageToWall = document.getElementById(who + 'Textarea').value; let messageToWall = document.getElementById(who + 'Textarea').value;
let errorMessage = document.getElementById('searchMessage'); let errorMessage = document.getElementById('searchMessage');
let token = localStorage.getItem("currentUser"); let token = localStorage.getItem("currentUser");
let email = localStorage.getItem(who + "Email"); let email = localStorage.getItem(who + "Email");
curr_page = who; curr_page = who;
if (email != null && email != "" && token != null && token != "") { if (email != null && email != "" && token != null && token != "") {
// Send user's message to the server // Send user's message to the server
postMessageRequest.open("POST", url + "post", true); postMessageRequest.open("POST", url + "post", true);
postMessageRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); 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 })); postMessageRequest.send(JSON.stringify({ email: email, message: messageToWall }));
errorMessage.innerHTML = ""; errorMessage.innerHTML = "";
} }
else{ else {
errorMessage.innerHTML = "No user selected to write to"; errorMessage.innerHTML = "No user selected to write to";
} }
// Clear the text area the user just wrote in // Clear the text area the user just wrote in
document.getElementById(who + 'Textarea').value = ""; document.getElementById(who + 'Textarea').value = "";
return false; return false;
} }
// Reload button // Reload button
function reloadWall(who) { function reloadWall(who) {
// "who" could be either home or browse, this way know which wall to load to // "who" could be either home or browse, this way know which wall to load to
let token = localStorage.getItem("currentUser"); let token = localStorage.getItem("currentUser");
let email = localStorage.getItem(who + "Email"); let email = localStorage.getItem(who + "Email");
// If wanting messages from my own wall // If wanting messages from my own wall
if (who == 'home') { if (who == 'home') {
// Send request to server about receiving the info // Send request to server about receiving the info
...@@ -607,7 +521,6 @@ function reloadWall(who) { ...@@ -607,7 +521,6 @@ function reloadWall(who) {
messagesByTokenRequest.setRequestHeader("Authorization", token); messagesByTokenRequest.setRequestHeader("Authorization", token);
messagesByTokenRequest.send(); messagesByTokenRequest.send();
} }
// If wanting messages from another's wall // If wanting messages from another's wall
else if (who == 'browse' && email != null && email != "") { else if (who == 'browse' && email != null && email != "") {
// Send request to server about receiving the info // Send request to server about receiving the info
...@@ -615,24 +528,19 @@ function reloadWall(who) { ...@@ -615,24 +528,19 @@ function reloadWall(who) {
messagesByEmailRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); messagesByEmailRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
messagesByEmailRequest.setRequestHeader("Authorization", token); messagesByEmailRequest.setRequestHeader("Authorization", token);
messagesByEmailRequest.send(); messagesByEmailRequest.send();
} }
return false; return false;
} }
// Changing another's wall // Changing another's wall
function searchAnotherUser(event){ function searchAnotherUser(event) {
let token = localStorage.getItem("currentUser"); let token = localStorage.getItem("currentUser");
// Reseting the error messages // Reseting the error messages
document.getElementById('searchMessage').innerHTML = ""; document.getElementById('searchMessage').innerHTML = "";
if (token != "") {
if(token != "") {
// Store the searched email in localStorage so that it can be reached in "setUserDetails()" // Store the searched email in localStorage so that it can be reached in "setUserDetails()"
let email = event.target["searchInput"].value; let email = event.target["searchInput"].value;
localStorage.setItem("browseEmail", email); localStorage.setItem("browseEmail", email);
setUserDetails("browse"); setUserDetails("browse");
} }
return false; return false;
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment