From 353395f1b7ba91383fd180c88e1629ca714286ff Mon Sep 17 00:00:00 2001
From: Ayesha Gamage <144423992+ayega233@users.noreply.github.com>
Date: Mon, 22 Jan 2024 11:36:52 +0100
Subject: [PATCH] initial

---
 client.css    |  30 ++++++++
 client.html   |  32 +++++++++
 client.js     |   0
 serverstub.js | 187 ++++++++++++++++++++++++++++++++++++++++++++++++++
 wimage.png    | Bin 0 -> 14312 bytes
 5 files changed, 249 insertions(+)
 create mode 100644 client.css
 create mode 100644 client.html
 create mode 100644 client.js
 create mode 100644 serverstub.js
 create mode 100644 wimage.png

diff --git a/client.css b/client.css
new file mode 100644
index 0000000..fbeded8
--- /dev/null
+++ b/client.css
@@ -0,0 +1,30 @@
+body{
+    width: 500px;
+    #height: 500px;
+    background-color: deepskyblue;
+}
+
+#main-left{
+width: 340px;
+height: 400px;
+background-image: url("wimage.png");
+border: solid;
+}
+
+#right-top {
+    width: 250px;
+    height: 100px;
+    margin-left: 350px;
+    margin-top: -404px;
+    background-color: white;
+    border: solid;
+}
+
+#right-dow {
+    margin-left: 350px;
+    margin-top: 10px;
+    background-color: white;
+    width: 250px;
+    height: 284px;
+    border: solid;
+}
\ No newline at end of file
diff --git a/client.html b/client.html
new file mode 100644
index 0000000..a1b09b7
--- /dev/null
+++ b/client.html
@@ -0,0 +1,32 @@
+<html>
+    <head>
+        <link href="client.css" type="text/css" rel="stylesheet">
+        <script src="client.js" type="text/javascript"></script>
+        <script src="serverstub.js" type="text/javascript"></script>
+    </head>
+    <body>
+        <div id="main-left">
+        </div>
+        <div id="right-top">
+            <form action="" id="save-form" onsubmit="saveContent(this); return false">
+                <div><label for="name">Name</label><input type="text" id="name" name="name"></div>
+                <div><label for="number">Number</label><input type="text" id="number" name="phonenumber"></div>
+                <input type="submit">
+            </form>  
+        </div>
+        <div id="right-dow">
+            <form action="" id="save-form" onsubmit="saveContent(this); return false">
+                <div><label for="name">FirstName</label><input type="text" id="name" name="name"></div>
+                <div><label for="number">FamilyName</label><input type="text" id="number" name="phonenumber"></div>
+                <div><label for="name">FirstName</label><input type="text" id="name" name="name"></div>
+                <div><label for="number">FamilyName</label><input type="text" id="number" name="phonenumber"></div>
+                <div><label for="name">FirstName</label><input type="text" id="name" name="name"></div>
+                <div><label for="number">FamilyName</label><input type="text" id="number" name="phonenumber"></div>
+                <input type="submit">
+            </form>  
+            
+        </div>
+
+
+    </body>
+</html>
\ No newline at end of file
diff --git a/client.js b/client.js
new file mode 100644
index 0000000..e69de29
diff --git a/serverstub.js b/serverstub.js
new file mode 100644
index 0000000..06590bf
--- /dev/null
+++ b/serverstub.js
@@ -0,0 +1,187 @@
+/**
+ * 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;
+  })();
+  
\ No newline at end of file
diff --git a/wimage.png b/wimage.png
new file mode 100644
index 0000000000000000000000000000000000000000..048bdd2fcf666069f57f0aab8521dc49f9914725
GIT binary patch
literal 14312
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

literal 0
HcmV?d00001

-- 
GitLab