public async Task <IActionResult> Post([FromForm] WebLoginRequestViewModel value, string returnUrl = null)
        {
            var response = new SingleResponse <LoginResponseViewModel>();

            try
            {
                if (ModelState.IsValid)
                {
                    var loginResponseData = new LoginResponseViewModel();

                    var loginstatus = (await _unit.IUser.AuthenticateUsers(value.UserName, EncryptionLibrary.EncryptText(value.Password))).UserObject;

                    if (loginstatus)
                    {
                        var userdetails = (await _userManager.FindByEmailAsync(value.UserName));

                        if (userdetails != null)
                        {
                            var tokenHandler    = new JwtSecurityTokenHandler();
                            var key             = Encoding.ASCII.GetBytes(_appSettings.Secret);
                            var tokenDescriptor = new SecurityTokenDescriptor
                            {
                                Subject = new ClaimsIdentity(new Claim[]
                                {
                                    new Claim(ClaimTypes.Name, userdetails.Id.ToString()),
                                    new Claim(ClaimTypes.MobilePhone, userdetails.PhoneNumber.ToString()),
                                    new Claim(ClaimTypes.Email, userdetails.Email.ToString())
                                }),
                                Expires            = DateTime.UtcNow.AddDays(1),
                                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key),
                                                                            SecurityAlgorithms.HmacSha256Signature)
                            };
                            var token = tokenHandler.CreateToken(tokenDescriptor);
                            loginResponseData.Token   = tokenHandler.WriteToken(token);
                            loginResponseData.EmailId = userdetails.Email;
                            response.Data             = loginResponseData;
                            response.Status           = true;
                            return(response.ToHttpResponse());
                        }
                        else
                        {
                            response.Data    = null;
                            response.Message = "Not valid user";
                            response.Status  = true;
                            return(response.ToHttpResponse());
                        }
                    }
                    else
                    {
                        response.Data    = null;
                        response.Message = "Not valid user";
                        response.Status  = true;
                        return(response.ToHttpResponse());
                    }
                }
            }
            catch (Exception ex)
            {
                ErrorTrace.Logger(LogArea.ApplicationTier, ex);
                return(response.ToHttpResponse());
            }
            return(response.ToHttpResponse());
        }
        public async Task <IActionResult> PostUserVerification([FromForm] LoginRequestViewModel value)
        {
            int    userId    = 0;
            string userIdStr = User.FindFirstValue(ClaimTypes.Name);

            if (!string.IsNullOrWhiteSpace(userIdStr))
            {
                userId = Convert.ToInt32(userIdStr);
            }

            var dd = User.Identity.Name;

            var model    = new UserResponseViewModel();
            var response = new SingleResponse <UserResponseViewModel>();

            if (ModelState.IsValid)
            {
                if (!(await _unit.IUser.Exists(u => u.PhoneNumber == value.MobileNo)).UserObject)
                {
                    ModelState.AddModelError("PEmail", "Phone No. Not register");
                    response.Message = "Phone no. does not register";
                    response.Status  = true;
                }
                else
                {
                    var Id         = (await _unit.IUser.GetSelectedAsync(t => t.PhoneNumber.Equals(value.MobileNo) && t.UserType == 1, m => m.Id)).UserObject;
                    var resultdata = await _userManager.FindByIdAsync(Convert.ToString(Id));

                    string strPhone = ("91" + value.MobileNo);
                    resultdata.FCMToken     = value.FcmToken;
                    resultdata.DeviceId     = value.DeviceId;
                    resultdata.DeviceType   = value.DeviceType;
                    resultdata.ModifiedDate = DateTime.Now;

                    response.Message = "user registered.";
                    response.Status  = true;
                    var otpresposedata = await _smsHandler.VerifyOtpAsync(mobile : strPhone, OTP : value.OTP);

                    if (otpresposedata.type == "success")
                    {
                        try
                        {
                            await _userManager.UpdateAsync(resultdata);

                            model.Name     = resultdata.FullName;
                            model.EmailId  = resultdata.Email;
                            model.MobileNo = resultdata.PhoneNumber;
                            if (!string.IsNullOrEmpty(resultdata.CustomerImage))
                            {
                                model.userImageProfileImage = resultdata.CustomerImage;
                            }
                            if (resultdata != null)
                            {
                                JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
                                byte[] key = Encoding.ASCII.GetBytes(_appSettings.Secret);
                                SecurityTokenDescriptor tokenDescriptor = new SecurityTokenDescriptor
                                {
                                    Subject = new ClaimsIdentity(new Claim[]
                                    {
                                        new Claim(ClaimTypes.Name, Id.ToString()),
                                        new Claim(ClaimTypes.MobilePhone, resultdata.PhoneNumber.ToString())
                                    }),
                                    Expires            = DateTime.UtcNow.AddDays(180),
                                    SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key),
                                                                                SecurityAlgorithms.HmacSha256Signature)
                                };
                                SecurityToken token = tokenHandler.CreateToken(tokenDescriptor);
                                model.Token = tokenHandler.WriteToken(token);
                                // remove password before returning
                                value.OTP        = null;
                                response.Data    = model;
                                response.Message = "OTP verifed successfully";
                                response.Status  = true;
                                return(response.ToHttpResponse());
                            }
                            else
                            {
                                response.Message       = "Worng OTP";
                                response.Status        = false;
                                response.ErrorTypeCode = (int)ErrorMessage.WorngOTP;
                                return(response.ToHttpResponse());
                            }
                        }
                        catch (Exception ex)
                        {
                            response.Status  = false;
                            response.Message = "There was an internal error, please contact to technical support.";
                            ErrorTrace.Logger(LogArea.ApplicationTier, ex);
                            return(response.ToHttpResponse());
                        }
                    }
                }
            }
            return(response.ToHttpResponse());
        }