public ActionResult verifyPassword(string pass)
        {
            if (string.IsNullOrEmpty(pass))
            {
                return(RedirectToAction(nameof(UserControl)));
            }

            string password = AppHash.HashPassword(pass);
            string id       = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

            if (!string.IsNullOrEmpty(id))
            {
                if (password == GetUserPassword(id))
                {
                    Message = string.Empty;
                    return(RedirectToAction(nameof(ChangePassword), new { UId = password }));
                }
                else
                {
                    Message = "كلمة المرور المدخلة غير صحيحة!!!";
                }
            }

            return(RedirectToAction(nameof(UserControl)));
        }
        private bool IsLoged(string username, string password)
        {
            DataTable dt   = new DataTable();
            Users     cs   = new Users();
            string    hash = AppHash.HashPassword(password);

            dt = cs.CheckLogin(username, hash);
            if (dt.Rows.Count > 0)
            {
                return(true);
            }

            return(false);
        }
        public static AppHash GenerateNewSecret()
        {
            char[] chars = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
                             'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
                             'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
                             'Y', 'Z', '2', '3', '4', '5', '6', '7' };

            string  output = "";
            AppHash code   = new AppHash();
            Random  rnd    = new Random();

            for (int i = 0; i < 16; i++)
            {
                output += chars[rnd.Next(0, chars.Count() - 1)];
            }

            code.Secret = output;
            return(code);
        }
        public async Task <IActionResult> Create([Bind("id,UserName,Email,Password,PasswordConfirm,Phone,EmailConfirm")] AppUser appUser)
        {
            Message    = string.Empty;
            successMsg = string.Empty;

            if (ModelState.IsValid)
            {
                string input = appUser.Password;
                if (!string.IsNullOrEmpty(input))
                {
                    DataTable dt       = new DataTable();
                    Users     users    = new Users();
                    string    userName = appUser.UserName;
                    string    email    = appUser.Email;
                    dt = users.CheckUserNameExist(userName);

                    if (dt.Rows.Count < 1)
                    {
                        if (!IsEmailAddressExist(email))
                        {
                            appUser.Password        = AppHash.HashPassword(input);
                            appUser.PasswordConfirm = AppHash.HashPassword(input);
                            _context.Add(appUser);
                            await _context.SaveChangesAsync();

                            return(RedirectToAction(nameof(Index)));
                        }
                        else
                        {
                            Message = "البريد الالكتروني المدخل (" + email + ") مستعمل";
                            return(View());
                        }
                    }
                    else
                    {
                        Message = "اسم المستخدم المدخل (" + userName + ") مستعمل";
                        return(View());
                    }
                }
            }
            return(View(appUser));
        }
        public async Task <ActionResult> ChangePassword(string pass, string passConfirm)
        {
            if (pass == null || passConfirm == null)
            {
                return(RedirectToAction(nameof(UserControl)));
            }

            string password = AppHash.HashPassword(pass);
            string id       = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

            if (!string.IsNullOrEmpty(id))
            {
                if (pass == passConfirm)
                {
                    var user = await db.AppUsers.FirstOrDefaultAsync(a => a.id == id);

                    if (user != null)
                    {
                        user.Password        = password;
                        user.PasswordConfirm = password;
                        db.Attach(user);
                        db.Entry(user).Property(x => x.Password).IsModified        = true;
                        db.Entry(user).Property(x => x.PasswordConfirm).IsModified = true;
                        await db.SaveChangesAsync();

                        return(RedirectToAction(nameof(UserControl)));
                    }
                }
                else
                {
                    ViewBag.msg = "كلمتا المرور غير متطابقتين!!";
                }
            }
            else
            {
                return(RedirectToAction("Index", "Home"));
            }

            return(View());
        }
        public async Task <bool> PasswordReset(string id, string password)
        {
            try
            {
                var user = await db.AppUsers.FirstOrDefaultAsync(s => s.id == id);

                if (user != null)
                {
                    string pass = AppHash.HashPassword(password);
                    user.Password        = pass;
                    user.PasswordConfirm = pass;
                    db.Attach(user);
                    db.Entry(user).Property(x => x.Password).IsModified        = true;
                    db.Entry(user).Property(x => x.PasswordConfirm).IsModified = true;
                    await db.SaveChangesAsync();

                    return(true);
                }
            }
            catch { }

            return(false);
        }
        public async Task <IActionResult> Register([Bind("id, UserName, Email, Password, PasswordConfirm, Phone, EmailConfirm")] AppUser appUser)
        {
            Message    = string.Empty;
            successMsg = string.Empty;

            if (ModelState.IsValid)
            {
                if (!string.IsNullOrEmpty(IsEmailConfirm()))
                {
                    if (IsEmailConfirm() == "true")
                    {
                        appUser.EmailConfirm = true;
                    }
                    else
                    {
                        appUser.EmailConfirm = false;
                    }
                }
                else
                {
                    appUser.EmailConfirm = false;
                }

                string input = appUser.Password;
                if (!string.IsNullOrEmpty(input))
                {
                    if (PasswordMinimumLength() > 0 && PasswordMaximumLength() > 0)
                    {
                        int min = PasswordMinimumLength();
                        int max = PasswordMaximumLength();
                        if (input.Length < min)
                        {
                            Message = "الخد الأدني لعدد احرف الباسوورد " + min + " مقاطع";
                            return(View());
                        }
                        if (input.Length > max)
                        {
                            Message = "الخد الأعلي لعدد احرف الباسوورد " + max + " مقاطع";
                            return(View());
                        }
                    }

                    if (!string.IsNullOrEmpty(IsPasswordDigit()))
                    {
                        string isdigit = IsPasswordDigit();
                        if (isdigit == "true")
                        {
                            if (!input.Any(char.IsDigit))
                            {
                                Message = "يجب ارفاق علي الاقل رقم واحد بكلمة المرور";
                                return(View());
                            }
                        }
                    }

                    if (!string.IsNullOrEmpty(IsPasswordUpper()))
                    {
                        string isupper = IsPasswordUpper();
                        if (isupper == "true")
                        {
                            if (!input.Any(char.IsUpper))
                            {
                                Message = "يجب ارفاق علي الاقل حرف كابيتال بكلمة المرور";
                                return(View());
                            }
                        }
                    }


                    appUser.Password        = AppHash.HashPassword(input);
                    appUser.PasswordConfirm = AppHash.HashPassword(input);

                    DataTable dt       = new DataTable();
                    Users     users    = new Users();
                    string    userName = appUser.UserName;
                    string    email    = appUser.Email;
                    dt = users.CheckUserNameExist(userName);

                    if (dt.Rows.Count < 1)
                    {
                        if (!IsEmailAddressExist(email))
                        {
                            int userCount = db.AppUsers.Count();

                            db.Add(appUser);
                            string userId = appUser.id;
                            await db.SaveChangesAsync();

                            string title = "تاكيد اشتراكك بموقع التجربة";
                            string body  = "مرحبا " + userName + "<br />";
                            body += "يرجي الضغط علي الرابط ادناه لتفعيل اشتراكك بموق التجربة" + "<br />" + "<br />";
                            body += "https://localhost:44313/Acount/AccountValidate?UId=" + userId;
                            if (SendEmail(email, body, title))
                            {
                                if (await InsertEmailConfirm(userId))
                                {
                                    successMsg = "تم انشاء حسابك بنجاح يرجي زيارة بريدك الالكتروني لتفعيل حسابك";
                                    if (!string.IsNullOrEmpty(IsSendEmailAfterRegister()))
                                    {
                                        if (IsSendEmailAfterRegister() == "true")
                                        {
                                            title = "شكرا لتسجيلك معنا بموقع التجربة";
                                            body  = "مرحبا " + userName + "<br />";
                                            body += "شكرا لتسجيلك معنا بموقع التجربة";
                                            SendEmail(email, body, title);
                                        }
                                    }
                                }
                                else
                                {
                                    Message = "خطأ بعملية اضافة الحساب, يرجي المحاولة لاحقا";
                                }
                            }
                            else
                            {
                                if (await InsertEmailConfirm(userId))
                                {
                                    Message = "تم انشاء حسابك بنجاح وتعذر ارسال رسالة التفعيل الي بريدك الالكتروني";
                                }
                            }

                            string roleId = string.Empty;
                            if (userCount <= 0)
                            {
                                AppRole appRole = new AppRole();
                                appRole.RoleName = "Admin";
                                await db.AddAsync(appRole);

                                await db.SaveChangesAsync();

                                roleId = appRole.id;

                                appRole.id       = Guid.NewGuid().ToString();
                                appRole.RoleName = "SuperVisor";
                                await db.AddAsync(appRole);

                                await db.SaveChangesAsync();

                                appRole.id       = Guid.NewGuid().ToString();
                                appRole.RoleName = "Member";
                                await db.AddAsync(appRole);

                                await db.SaveChangesAsync();

                                UserRole userRole = new UserRole();
                                userRole.RoleId = roleId;
                                userRole.UserId = userId;
                                await db.AddAsync(userRole);

                                await db.SaveChangesAsync();
                            }
                            else
                            {
                                roleId = Data.AppAuthentication.GetRoleId("Member");
                                if (!string.IsNullOrEmpty(roleId))
                                {
                                    UserRole userRole = new UserRole();
                                    userRole.RoleId = roleId;
                                    userRole.UserId = userId;
                                    await db.AddAsync(userRole);

                                    await db.SaveChangesAsync();
                                }
                            }

                            return(RedirectToAction(nameof(Register)));
                        }
                        else
                        {
                            Message = "البريد الالكتروني المدخل (" + email + ") غير متوفر";
                            return(View());
                        }
                    }
                    else
                    {
                        Message = "اسم المستخدم المدخل (" + userName + ") غير متوفر";
                        return(View());
                    }
                }
            }

            return(RedirectToAction(nameof(Register)));
        }
        public async Task <IActionResult> Edit(string id, [Bind("id,UserName,Email,Password,PasswordConfirm,Phone,EmailConfirm")] AppUser appUser)
        {
            if (id != appUser.id)
            {
                return(NotFound());
            }

            Message    = string.Empty;
            successMsg = string.Empty;

            if (ModelState.IsValid)
            {
                try
                {
                    string input = appUser.Password;
                    if (input != pass)
                    {
                        appUser.Password        = AppHash.HashPassword(input);
                        appUser.PasswordConfirm = AppHash.HashPassword(input);
                    }

                    DataTable dt    = new DataTable();
                    Users     users = new Users();

                    if (user != appUser.UserName)
                    {
                        dt = users.CheckUserNameExist(appUser.UserName);
                        if (dt.Rows.Count > 0)
                        {
                            Message = "اسم المستخدم المدخل (" + appUser.UserName + ") مستعمل";
                            return(View());
                        }
                    }

                    if (email != appUser.Email)
                    {
                        if (IsEmailAddressExist(email))
                        {
                            Message = "البريد الالكتروني المدخل (" + appUser.Email + ") مستعمل";
                            return(View());
                        }
                    }

                    _context.Update(appUser);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!AppUserExists(appUser.id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(appUser));
        }