/** * 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; })();