public Task <JsonResponse> TurnOffTwoFactor(int UserID)
        {
            return(Task.Run(() =>
            {
                using (MIUEntities db = new MIUEntities())
                {
                    try
                    {
                        User user = db.Users.Where(x => x.ID == UserID).SingleOrDefault();
                        if (user == null)
                        {
                            return new JsonResponse()
                            {
                                Flag = true, Message = "User is not found"
                            };
                        }
                        else
                        {
                            //bool flag = false;
                            string Message = "";
                            var aspNetUserID = db.AspNetUsers.Where(x => x.UserName == user.LoginName).Select(x => x.Id).SingleOrDefault();
                            TwoFactorAuthenticatedUser twoFactorUser = db.TwoFactorAuthenticatedUsers.Where(x => x.AspNetUserID == aspNetUserID).SingleOrDefault();

                            if (twoFactorUser != null)
                            {
                                db.TwoFactorAuthenticatedUsers.Remove(twoFactorUser);
                                db.SaveChanges();
                                Message = "Two-Factor Authentication is Off.";
                                //flag = true;
                            }
                            return new JsonResponse()
                            {
                                Flag = true, Message = Message
                            };
                        }
                    }
                    catch (Exception ex)
                    {
                        return new JsonResponse()
                        {
                            Flag = false, Message = ex.Message
                        };
                    }
                }
            }));
        }
        public Task <JsonResponse> TwoFactorVerify(string AspNetUserID, string Code)
        {
            return(Task.Run(() =>
            {
                using (MIUEntities db = new MIUEntities())
                {
                    try
                    {
                        TwoFactorAuthenticatedUser user = db.TwoFactorAuthenticatedUsers.Where(x => x.AspNetUserID == AspNetUserID && x.Code == Code).SingleOrDefault();

                        if (user == null)
                        {
                            return new JsonResponse()
                            {
                                Flag = true, Message = "User is not found"
                            };
                        }
                        else
                        {
                            string Message = "Your code is expired.";
                            if (user.UpdatedDate.AddMinutes(2).ToUniversalTime() > DateTime.Now.ToUniversalTime())
                            {
                                user.IsVerified = true;
                                //db.TwoFactorAuthenticatedUsers.Add(user);
                                db.SaveChanges();
                                Message = "Two-Factor Authentication is On.";
                            }
                            return new JsonResponse()
                            {
                                Flag = true, Message = Message
                            };
                        }
                    }
                    catch (Exception ex)
                    {
                        return new JsonResponse()
                        {
                            Flag = false, Message = ex.Message
                        };
                    }
                }
            }));
        }
        public Task <JsonResponse> TwoFactorAuthentication(string email)
        {
            return(Task.Run(() =>
            {
                using (MIUEntities db = new MIUEntities())
                {
                    try
                    {
                        User user = db.Users.Where(x => x.EmailAccount == email).FirstOrDefault();
                        if (user == null)
                        {
                            return new JsonResponse()
                            {
                                Flag = true, Message = "User is not found"
                            };;
                        }
                        else
                        {
                            Random rnd = new Random();
                            string code = rnd.Next(1, 999999).ToString("D6");
                            AspNetUser aspNetUser = db.AspNetUsers.Where(x => x.Email == email).FirstOrDefault();
                            var check = (from a in db.TwoFactorAuthenticatedUsers where a.AspNetUserID == aspNetUser.Id select a.AspNetUserID).FirstOrDefault();
                            TwoFactorAuthenticatedUser auth = new TwoFactorAuthenticatedUser();
                            if (check == null)
                            {
                                auth = new TwoFactorAuthenticatedUser()
                                {
                                    AspNetUserID = aspNetUser.Id,
                                    Code = code,
                                    CreatedDate = DateTime.Now,
                                    UpdatedDate = DateTime.Now
                                };
                                db.TwoFactorAuthenticatedUsers.Add(auth);
                                db.SaveChanges();
                            }
                            else
                            {
                                auth = new TwoFactorAuthenticatedUser();
                                auth = db.TwoFactorAuthenticatedUsers.Where(a => a.AspNetUserID == aspNetUser.Id).FirstOrDefault();
                                auth.Code = code;
                                auth.UpdatedDate = DateTime.Now;
                                db.SaveChanges();
                            }
                            code = "Your two factor authentication code is below \n" + code;
                            EmailManager.SendEmail(code, email, "Two Factor Authentication Code");

                            //db.SaveChanges();
                            return new JsonResponse()
                            {
                                Flag = true, Message = "Successfully Sent", ReferenceKey = auth.AspNetUserID
                            };
                        }
                    }
                    catch (Exception ex)
                    {
                        return new JsonResponse()
                        {
                            Flag = false, Message = ex.Message
                        };
                    }
                }
            }));
        }