diff --git a/client.css b/client.css new file mode 100644 index 0000000000000000000000000000000000000000..fbeded876e26b9eec78a5ed3a1d22423bc022d9a --- /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 0000000000000000000000000000000000000000..a1b09b771868c9239c63a72ecebd4d61050c2884 --- /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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/serverstub.js b/serverstub.js new file mode 100644 index 0000000000000000000000000000000000000000..06590bf1dbb930708dcc2355f33e361dbd9c918b --- /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 Binary files /dev/null and b/wimage.png differ