//* * * CREATION METHODS
        public int createUser(string forname, string surname, string email, string username, string cryptedPassword)
        {
            User user = new User
            {
               Forename = forname, Surname = surname, Email = email, Username = username, Password = cryptedPassword
            };

            return mediator.DataManager.saveUser(user);
        }
        public bool emailIsUnique(string email)
        {
            User user = new User();

            try
            {
                user = mediator.DataManager.getUserByEmail(email);
            }

            catch
            {
                user = null;
            }

            return user == null;
        }
 public abstract User editUser(int userId, User newUser);
 //SET METHODS - for data storage
 public abstract int saveUser(User user);
        public int validateUser(string username, string password)
        {
            User user = new User();
            try
            {
                user = mediator.DataManager.getUserByUsername(username);
            }
            catch
            {
                return 0;
            }

            string storedPassword = mediator.DataManager.getUserPassword(user.Id);
            if (storedPassword == password)
            {
                return user.Id;
            }
            else
            {
                return 0;
            }
        }
        public bool usernameIsUnique(string username)
        {
            User user = new User();

            try
            {
                user = mediator.DataManager.getUserByUsername(username);
            }
            catch
            {
                user = null;
            }

            return user == null;
        }
 //* * * SET METHODS - all data storage methods
 /// <summary>
 /// Store the user object in the database
 /// </summary>
 /// <param name="user"></param>
 /// <returns>id of created user</returns>
 public override int saveUser(User user)
 {
     emdb.Users.Add(user);
     emdb.SaveChanges();
     return user.Id;
 }
        /// <summary>
        /// Update with specified id.  Child objects ARE NOT updated.
        /// </summary>
        /// <param name="userId">id of user to update</param>
        /// <param name="newUser">user object with replacement data</param>
        public override User editUser(int userId, User newUser)
        {
            User oldUser = emdb.Users.Find(userId);

            oldUser.Email = newUser.Email;
            oldUser.Forename = newUser.Forename;
            oldUser.Password = newUser.Password;
            oldUser.Surname = newUser.Surname;
            oldUser.Username = newUser.Username;

            emdb.SaveChanges();
            return oldUser;
        }
        public ActionResult LogOn(User user, string returnUrl)
        {
            try
            {
                string cryptedPassword = encryptPassword(user.Password, user.Username);

                int userId = ResponseReader.convertTo<int>(emAPI.validateUser(user.Username, cryptedPassword));

                if (userId != 0)
                {
                    ///FormsAuthentication.SetAuthCookie(user.Username, false);
                    if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                        && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                    {
                        ModelState.AddModelError("", "The user name or password provided is incorrect.");
                        return View(user);
                    }
                    else
                    {
                        ///store userId in cookie
                        FormsAuthentication.SetAuthCookie(userId.ToString(), false);

                        ///take the user to their homepage
                        return RedirectToAction("UserHome", "Home", new { id = userId });
                    }
                }
                else
                {
                    return View(user);
                }
            }
            catch
            {
                // If we got this far, something failed, redisplay form
                return View("Error");
            }
        }