From 3130f07929d0d2080da391e6cc63432f62a1c5fe Mon Sep 17 00:00:00 2001 From: Adeel Ahmad <adeah090@student.liu.se> Date: Sun, 26 Feb 2023 13:11:22 +0000 Subject: [PATCH] Upload serverstub.js --- serverstub.js | 201 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 serverstub.js diff --git a/serverstub.js b/serverstub.js new file mode 100644 index 0000000..c2cc1fb --- /dev/null +++ b/serverstub.js @@ -0,0 +1,201 @@ +/** + * Serverstub.js + * + * Simple dummy server for TDDD97 + * + * If you're a student, you shouldn't need to look through this file, + * the description of how it works is in the lab instructions. + **/ +var serverstub = (function () { + "use strict"; + + var users; + var loggedInUsers; + + var syncStorage = function () { + if (localStorage.getItem("users") === null) { + users = {}; + } else { + users = JSON.parse(localStorage.getItem("users")); + } + + if (localStorage.getItem("loggedinusers") === null) { + loggedInUsers = {}; + } else { + loggedInUsers = JSON.parse(localStorage.getItem("loggedinusers")); + } + }; + + var persistUsers = function () { + localStorage.setItem("users", JSON.stringify(users)); + }; + var persistLoggedInUsers = function () { + localStorage.setItem("loggedinusers", JSON.stringify(loggedInUsers)); + }; + var tokenToEmail = function (token) { + return loggedInUsers[token]; + }; + var copyUser = function (user) { + return JSON.parse(JSON.stringify(user)); + }; + + var serverstub = { + signIn: function (email, password) { + syncStorage(); + if (users[email] != null && users[email].password == password) { + var letters = + "abcdefghiklmnopqrstuvwwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; + var token = ""; + for (var i = 0; i < 36; ++i) { + token += letters[Math.floor(Math.random() * letters.length)]; + } + loggedInUsers[token] = email; + persistLoggedInUsers(); + return { + success: true, + message: "Successfully signed in.", + data: token, + }; + } else { + return { success: false, message: "Wrong username or password." }; + } + }, + + postMessage: function (token, content, toEmail) { + syncStorage(); + var fromEmail = tokenToEmail(token); + if (fromEmail != null) { + if (toEmail == null) { + toEmail = fromEmail; + } + if (users[toEmail] != null) { + var recipient = users[toEmail]; + var message = { writer: fromEmail, content: content }; + recipient.messages.unshift(message); + persistUsers(); + return { success: true, message: "Message posted" }; + } else { + return { success: false, message: "No such user." }; + } + } else { + return { success: false, message: "You are not signed in." }; + } + }, + + getUserDataByToken: function (token) { + syncStorage(); + var email = tokenToEmail(token); + return serverstub.getUserDataByEmail(token, email); + }, + + getUserDataByEmail: function (token, email) { + syncStorage(); + if (loggedInUsers[token] != null) { + if (users[email] != null) { + var match = copyUser(users[email]); + delete match.messages; + delete match.password; + return { + success: true, + message: "User data retrieved.", + data: match, + }; + } else { + return { success: false, message: "No such user." }; + } + } else { + return { success: false, message: "You are not signed in." }; + } + }, + + getUserMessagesByToken: function (token) { + syncStorage(); + var email = tokenToEmail(token); + return serverstub.getUserMessagesByEmail(token, email); + }, + + getUserMessagesByEmail: function (token, email) { + syncStorage(); + if (loggedInUsers[token] != null) { + if (users[email] != null) { + var match = copyUser(users[email]).messages; + return { + success: true, + message: "User messages retrieved.", + data: match, + }; + } else { + return { success: false, message: "No such user." }; + } + } else { + return { success: false, message: "You are not signed in." }; + } + }, + + signOut: function (token) { + syncStorage(); + if (loggedInUsers[token] != null) { + delete loggedInUsers[token]; + persistLoggedInUsers(); + return { success: true, message: "Successfully signed out." }; + } else { + return { success: false, message: "You are not signed in." }; + } + }, + + signUp: function (inputObject) { + // {email, password, firstname, familyname, gender, city, country} + syncStorage(); + if (users[inputObject.email] === undefined) { + if ( + typeof inputObject.email === "string" && + typeof inputObject.password === "string" && + typeof inputObject.firstname === "string" && + typeof inputObject.familyname === "string" && + typeof inputObject.gender === "string" && + typeof inputObject.city === "string" && + typeof inputObject.country === "string" + ) { + var user = { + email: inputObject.email, + password: inputObject.password, + firstname: inputObject.firstname, + familyname: inputObject.familyname, + gender: inputObject.gender, + city: inputObject.city, + country: inputObject.country, + messages: [], + }; + users[inputObject.email] = user; + persistUsers(); + return { success: true, message: "Successfully created a new user." }; + } else { + return { + success: false, + message: "Form data missing or incorrect type.", + }; + } + } else { + return { success: false, message: "User already exists." }; + } + }, + + changePassword: function (token, oldPassword, newPassword) { + syncStorage(); + if (loggedInUsers[token] != null) { + var email = tokenToEmail(token); + if (users[email].password == oldPassword) { + users[email].password = newPassword; + persistUsers(); + return { success: true, message: "Password changed." }; + } else { + return { success: false, message: "Wrong password." }; + } + } else { + return { success: false, message: "You are not logged in." }; + } + }, + }; + + return serverstub; +})(); -- GitLab