public static Login AddNewLoginAndPerson(RegisterViewModel model, string emailConfirmToken)
        {
            var salt         = UtilService.GeneratePassword(10, 5);
            var passwordHash = AccountService.CreatePasswordHash(model.Password, salt);

            try
            {
                var user = new Login
                {
                    UserName                         = model.UserName,
                    Email                            = model.UserName,
                    PasswordHash                     = passwordHash,
                    SecurityStamp                    = salt,
                    EmailConfirmationToken           = emailConfirmToken.ToString(),
                    EmailConfirmationTokenExpiryDate = DateTime.Now.AddHours(2).ToUniversalTime(),  // FOR TESTING PUPROSE VALIDITY ONLY FOR 2HRS
                    EmailConfirmed                   = false,
                    CreatedBy                        = model.UserName,
                    CreatedOn                        = DateTime.Now,
                    IsActive                         = false
                };
                var person = new Person
                {
                    FirstName  = model.FirstName,
                    MiddleName = model.MiddleName,
                    LastName   = model.LastName,
                    Login      = user,

                    Address = new Address
                    {
                        CountryId = 1,
                        IsActive  = true,
                    },
                    Address1 = new Address
                    {
                        CountryId = 1,
                        IsActive  = true
                    },

                    UID      = Guid.NewGuid(),
                    IsActive = true
                };
                var loginRole = new LoginRole
                {
                    RoleId          = model.RoleId,
                    IsActive        = true,
                    PendingApproval = false
                };
                var result = AddNewUser(user, person, loginRole);
                return(result.IsSuccess ? user : null);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
        public static ServiceResponseResult ChangePasswordAfterLogin(ChangePasswordModel model, String login)
        {
            var result = new ServiceResponseResult
            {
                IsSuccess = false
            };

            using (var db = new KeysEntities())
            {
                try
                {
                    var currentUser = db.Login.FirstOrDefault(x => x.UserName == login);

                    if (currentUser == null)
                    {
                        result.ErrorMessage = "User is not found!";
                        return(result);
                    }
                    else
                    {
                        var salt         = UtilService.GeneratePassword(10, 5);
                        var passwordHash = AccountService.CreatePasswordHash(model.NewPassword, salt);
                        currentUser.PasswordHash       = passwordHash;
                        currentUser.SecurityStamp      = salt;
                        currentUser.ResetPasswordToken = "";
                        db.SaveChanges();
                        result.IsSuccess = true;
                        return(result);
                    }
                }
                catch (Exception ex)
                {
                    result.ErrorMessage = _serverError;
                    return(result);
                }
            }
        }
        public static ServiceResponseResult CreateTenantAccount(AddTenantToPropertyModel model, Login creartor, string temPass)
        {
            using (var db = new KeysEntities())
            {
                var salt = UtilService.GeneratePassword(10, 5);
                //var temPass = UtilService.GeneraterRandomKey(8);
                var passwordHash = AccountService.CreatePasswordHash(temPass, salt);
                var login        = new Login
                {
                    UserName       = model.TenantEmail,
                    Email          = model.TenantEmail,
                    PasswordHash   = passwordHash,
                    SecurityStamp  = salt,
                    EmailConfirmed = true,
                    CreatedBy      = creartor.Email,
                    CreatedOn      = DateTime.Now,
                    IsActive       = true
                };

                var person = new Person
                {
                    FirstName = model.FirstName,
                    LastName  = model.LastName,
                    Login     = login,
                    Address   = new Address
                    {
                        CountryId = 1,
                        IsActive  = true,
                    },
                    Address1 = new Address
                    {
                        CountryId = 1,
                        IsActive  = true
                    },

                    UID      = Guid.NewGuid(),
                    IsActive = true
                };
                var loginRole = new LoginRole
                {
                    RoleId          = 5,
                    IsActive        = true,
                    PendingApproval = false
                };
                db.Login.Add(login);
                person.Login = login;
                db.Person.Add(person);
                loginRole.Person = person;
                db.LoginRole.Add(loginRole);
                var tenant = new Tenant
                {
                    Person = person,
                    IsCompletedPersonalProfile = false,
                    HasProofOfIdentity         = false,
                    CreatedOn = DateTime.UtcNow,
                    CreatedBy = creartor.Id,
                    UpdatedOn = DateTime.UtcNow,
                    IsActive  = true,
                    Address   = new Address
                    {
                        CountryId = 1,
                        IsActive  = true,
                    }
                };
                db.Tenant.Add(tenant);
                try
                {
                    db.SaveChanges();
                    return(new ServiceResponseResult {
                        IsSuccess = true, NewObject = login
                    });
                }
                catch (Exception e)
                {
                    return(new ServiceResponseResult {
                        IsSuccess = false
                    });
                }
            }
        }
        public static ServiceResponseResult ChangePassword(ResetPasswordViewModel model, string HdToken)
        {
            var result = new ServiceResponseResult
            {
                IsSuccess = false
            };

            using (var db = new KeysEntities())
            {
                try
                {
                    var currentUser = db.Login.FirstOrDefault(x => x.UserName == model.Email && x.ResetPasswordToken == HdToken);
                    //if current doesn't exist or not active or disable
                    if (currentUser == null)
                    {
                        result.ErrorMessage = "Oops, Either you have clicked an expired link or the link as has tampered!";
                        return(result);
                    }
                    else
                    {
                        if (currentUser.ResetPasswordTokenExpiryDate < DateTime.Now)
                        {
                            result.ErrorMessage = "Your Account Reset password token has expired! Please do reset again";
                            return(result);
                        }
                        else
                        {
                            var salt         = UtilService.GeneratePassword(10, 5);
                            var passwordHash = AccountService.CreatePasswordHash(model.Password, salt);
                            //var newPasswordHash = AccountService.CreatePasswordHash(model.Password, currentUser.SecurityStamp);
                            currentUser.PasswordHash       = passwordHash;
                            currentUser.SecurityStamp      = salt;
                            currentUser.ResetPasswordToken = "";
                            db.SaveChanges();
                            result.IsSuccess = true;
                            return(result);
                        }
                    }
                    //if (currentUser.ResetPasswordTokenExpiryDate < DateTime.Now)
                    //{
                    //    result.ErrorMessage = "Your Account Reset password token has expired! Please do reset again";
                    //    return result;
                    //}
                    //generate new password hash from new password
                    //var salt = UtilService.GeneratePassword(10, 5);
                    //var passwordHash = AccountService.CreatePasswordHash(model.Password, salt);
                    ////var newPasswordHash = AccountService.CreatePasswordHash(model.Password, currentUser.SecurityStamp);
                    //currentUser.PasswordHash = passwordHash;
                    //currentUser.SecurityStamp = salt;
                    //currentUser.ResetPasswordToken = "";
                    //db.SaveChanges();
                    //result.IsSuccess = true;
                    //return result;
                }
                catch (Exception ex)
                {
                    result.ErrorMessage = _serverError;
                    return(result);
                }
            }
        }