public async Task<ActionResult> Profile(RegisterViewModel model, bool captchaValid, string captchaErrorMessage)
        {
            if (!model.IsUserProfile)
            {
                VerifyCaptcha(model, captchaValid, captchaErrorMessage);
                ValidateUserLoginDetails(model.userLoginViewModel);
                if (ModelState.IsValid)
                {
                    model.Active = true;
                    if (model.TermsCondition)
                    {
                        if (model.UserType == (short)UserType.Self)
                            model.IsOrganization = 0;
                        if (model.UserType == (short)UserType.Organization)
                            model.IsOrganization = 1;

                        var mappedUserProfile = Mapper.Map<RegisterViewModel, User>(model);

                        mappedUserProfile.UserLogins.FirstOrDefault().SecurityQuestionId = model.SecurityQuestionId;
                        if (mappedUserProfile.Id == 0)
                        {
                            mappedUserProfile.CreatedDate = DateTime.Now;
                            mappedUserProfile.CreatedBy = 0;
                            mappedUserProfile.UpdatedDate = DateTime.Now;
                            mappedUserProfile.UpdatedBy = 0;
                            mappedUserProfile.Active = true;
                            var userFromDb = _wcfService.InvokeService<IUserService, User>(svc => svc.AddUser(mappedUserProfile));
                            if (userFromDb != null)
                            {
                                model.CreationSuccessful = true;
                                model.Message = "Dear '{0}'. You have been registered successfully and a welcome email has been sent to '{1}' and a welcome sms is sent to '{2}'.".ToFormat(model.FullName, model.Email, model.Mobile);
                            }
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("TermsCondition", "Terms and Conditions is required.");
                    }
                    model.userLoginViewModel = new List<UserLoginViewModel>();
                    model.IsUserProfile = false;
                    BindDropDowns(model);
                }
            }
            else
            {
                if (ModelState.IsValid)
                {
                    var userFromDb = _wcfService.InvokeService<IUserService, User>((svc) => svc.GetUserById(model.Id));
                    model.userLoginViewModel.ForEach(x =>
                    {
                        x.Password = userFromDb.UserLogins.FirstOrDefault().Password;
                        x.SecurityAnswer = userFromDb.UserLogins.FirstOrDefault().SecurityAnswer;
                        x.Captcha = userFromDb.UserLogins.FirstOrDefault().Captcha;
                        x.UserHistoryViewModel = new List<UserHistoryViewModel>();
                        var userHstry = userFromDb.UserLogins.Select(z => z.UserHistories);
                        foreach (var item in userFromDb.UserLogins.FirstOrDefault().UserHistories)
                        {
                            UserHistoryViewModel userHistoryViewModel = new UserHistoryViewModel()
                            {
                                UserId = item.UserloginId,
                                UserHistoryId = item.Id,
                                SaltKey = item.saltkey,
                                PasswordCap = item.PasswordCap,
                                IpAddress = item.IpAddress,
                                CreatedDate = item.CreatedDate,
                                Captcha = item.Captcha
                            };
                            x.UserHistoryViewModel.Add(userHistoryViewModel);
                        }
                    });

                    var mappedUserProfile = Mapper.Map<RegisterViewModel, User>(model);

                    mappedUserProfile.UserLogins.FirstOrDefault().SecurityQuestionId = model.SecurityQuestionId;
                    mappedUserProfile.UserLogins.FirstOrDefault().PasswordCap = userFromDb.UserLogins.FirstOrDefault().PasswordCap;
                    mappedUserProfile.UserLogins.FirstOrDefault().saltkey = userFromDb.UserLogins.FirstOrDefault().saltkey;
                    mappedUserProfile.UserLogins.FirstOrDefault().Id = userFromDb.UserLogins.FirstOrDefault().Id;
                    mappedUserProfile.UpdatedDate = DateTime.Now;
                    mappedUserProfile.UpdatedBy = SessionContext.CurrentUser.Id;
                    var userProfile = _wcfService.InvokeService<IUserService, User>((svc) => svc.UpdateUserProfile(mappedUserProfile));
                    if (userProfile.IsNotNull())
                    {
                        var registerMappedProfile = Mapper.Map<User, RegisterViewModel>(userProfile);
                        registerMappedProfile.Message = "Saved Successfully.";
                        registerMappedProfile.CreationSuccessful = true;
                    }

                }
            }


            return View(model);
        }
 public void VerifyCaptcha(RegisterViewModel model, bool captchaValid, string captchaErrorMessage)
 {
     if (!captchaValid)
     {
         model.CaptchaUserInput = string.Empty;
         ModelState.AddModelError("recaptcha", captchaErrorMessage);
     }
     else
     {
         var userHistoryLst = new List<UserHistoryViewModel>();
         var userHistory = new UserHistoryViewModel();
         model.CaptchaValid = model.CaptchaUserInput;
         userHistory.Captcha = model.CaptchaValid;
         userHistory.CreatedDate = DateTime.Now;
         var ipAddress = GetClientIpAddress();
         model.IpAddress = userHistory.IpAddress = ipAddress;
         userHistoryLst.Add(userHistory);
         model.userLoginViewModel.FirstOrDefault().Captcha = model.CaptchaUserInput;
         model.userLoginViewModel.FirstOrDefault().UserHistoryViewModel = model.UserHistoryViewModel = userHistoryLst;
     }
 }
        public ActionResult Login(LoginViewModel model, string returnUrl, bool captchaValid, string captchaErrorMessage)
        {
            if (ModelState.IsValid)
            {
                User user = new Domain.User();
                var loginType = CheckInputType(model.UserName);
                user = _wcfService.InvokeService<IUserService, User>(svc => svc.GetUserByUsername(model.UserName, loginType));
                if (user != null)
                {
                    var userLogin = user.UserLogins.FirstOrDefault();
                    if (!user.Active)
                        ModelState.AddModelError("", "Your account has been disabled. Please contact your administrator.");
                    var hashedPassword = Common.Common.CreatePasswordHash(model.Password, userLogin.saltkey);
                    if (hashedPassword.Equals(userLogin.Password))
                    {
                        var userHistry = user.UserLogins.Select(x => x.UserHistories.FirstOrDefault(y => y.IpAddress == GetClientIpAddress())).ToList();
                        var hashedPasswordCap = Common.Common.CreatePasswordCapHash(model.Password, userLogin.saltkey, userLogin.Captcha);
                        if (userHistry == null)
                        {
                            //if (!hashedPasswordCap.Equals(userLogin.PasswordCap))
                            //{
                            if (model.IsCaptchaDisplay.HasValue)
                            {
                                if (captchaValid)
                                {
                                    var encryptedCaptcha = EncryptionExtensions.Encrypt(model.CaptchaUserInput);
                                    model.Captcha = encryptedCaptcha;
                                    try
                                    {
                                        var userHistryViewModel = new UserHistoryViewModel()
                                        {
                                            Captcha = model.Captcha,
                                            IpAddress = GetClientIpAddress(),
                                            PasswordCap = hashedPasswordCap,
                                            SaltKey = user.UserLogins.First().saltkey,
                                            UserId = user.Id
                                        };
                                        var mappedModel = Mapper.Map<UserHistoryViewModel, UserHistory>(userHistryViewModel);
                                        var userHistory = _wcfService.InvokeService<IUserService, UserHistory>((svc) => svc.AddUserHistory(mappedModel));
                                    }
                                    catch (Exception e)
                                    {

                                    }
                                }
                            }
                            //}
                        }
                        else
                        {
                            var passwordCapFromDb = userHistry;
                            if (!passwordCapFromDb.Equals(hashedPasswordCap))
                            {
                                _wcfService.InvokeService<IUserService>((svc) => svc.UpdateUserLogin(userHistry.FirstOrDefault()));
                            }
                            else
                            {
                                SessionContext.SuspiciousErrorMessage = "NOTE: Please change your password immediately.";
                            }
                        }

                        AuthenticateUser(user, userLogin);

                        if (returnUrl != null)
                        {
                            return RedirectToLocal(returnUrl);
                        }
                        else
                        {
                            if (user.OrganizationId == 0)
                                return RedirectToAction("Organization", "Dashboard");
                            else
                            {
                                if (user.OrganizationId.HasValue)
                                {
                                    var organization = _wcfService.InvokeService<IOrganizationService, Organization>((svc) => svc.GetOrganizationById(user.OrganizationId.Value));
                                    var docFolder = organization.LibraryFolders.FirstOrDefault(x => x.FolderName == "Documents");
                                    if (!docFolder.LibraryAssets.IsCollectionValid())
                                    {
                                        return RedirectToAction("OrganizationDocs", "Dashboard");
                                    }
                                    else if (!organization.Roles.IsCollectionValid())
                                    {
                                        return RedirectToAction("AddRole", "Dashboard");
                                    }
                                    else
                                    {
                                        return RedirectToAction("Index", "Dashboard");
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("", "Please enter a valid Username/Password");
                    }
                }
                else
                {
                    ModelState.AddModelError("", "Please enter a valid Username/Password");
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }