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