public bool AuthenticateToken(IResetToken token)
        {
            bool isDead;

            _context.ResetTokenRepository.CheckToken(token, out isDead);

            return(isDead);
        }
        public bool GetToken(string tokenString, out IResetToken token)
        {
            bool realToken;

            token = _context.ResetTokenRepository.GetToken(tokenString, out realToken);

            // return if it's trustworthy
            return(realToken);
        }
        public bool UseToken(IResetToken token, string newPassword, out string errormsg)
        {
            // get user from token
            IUser user;
            var   userExists = _context.UserRepository.GetUserIfExists(token.UserId, out user);

            if (!userExists)
            {
                errormsg = "User doesn't exist.";
                return(false);
            }

            // User service hashes password and gens salt
            bool success;

            success = _userService.ChangePassword(user, newPassword, out errormsg);

            // Kill token after use.
            _context.ResetTokenRepository.KillToken(token);

            return(true);
        }