public async Task <LoginResponseViewModel> LoginAsync(AuthenticateViewModel model)
        {
            logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  input : {model.ToJsonString()} UserIPAddress: {  _userIPAddress.GetUserIP().Result }");
            var responseModel = new LoginResponseViewModel()
            {
                Success      = false,
                IsAuthorized = false,
                Message      = ClientMessageConstant.InvalidUserNameAndPassword,
            };

            try
            {
                var client = new HttpClient();

                //HttpClientHandler clientHandler = new HttpClientHandler();
                //clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; };

                //// Pass the handler to httpclient(from you are calling api)
                //HttpClient client = new HttpClient(clientHandler);

                var disco = await client.GetDiscoveryDocumentAsync(_settings.AuthorizeUrl);

                if (disco.IsError)
                {
                    logger.Error($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  error : {disco.Error}");
                    return(responseModel);
                }


                var pwdToken = await client.RequestPasswordTokenAsync(new PasswordTokenRequest()
                {
                    Address      = _settings.AuthorizeUrl + "/connect/token",
                    UserName     = model.Username,
                    Password     = model.Password,
                    ClientId     = _settings.ClientId,
                    ClientSecret = _settings.ClientSecret,
                    Scope        = _settings.Scope
                });

                if (pwdToken.IsError)
                {
                    logger.Error($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  error : {pwdToken.Error}");
                    return(responseModel);
                }

                // request token
                var tokenResponse = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
                {
                    Address      = disco.TokenEndpoint,
                    ClientId     = _settings.ClientId,
                    ClientSecret = _settings.ClientSecret,
                    Scope        = _settings.ApiScope
                });

                if (tokenResponse.IsError)
                {
                    logger.Error($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  error : {tokenResponse.Error}");
                    return(responseModel);
                }

                var userInfo = await _appDbContext.UserInfos.FirstOrDefaultAsync(k => k.Email == model.Username);

                if (model.DeviceId != null)
                {
                    var deviceInfo = new UserDeviceInfoViewModel()
                    {
                        DeviceType = model.DeviceType,
                        DeviceId   = model.DeviceId,
                        UserId     = userInfo.UserId,
                        IsActive   = true
                    };

                    await AddOrUpdateDeviceInfoAsync(deviceInfo);
                }



                responseModel.UserDetails = (await GetUserDetailsAsync(userInfo?.UserId ?? 0))?.Resource;

                responseModel.ExpireMinutes = tokenResponse.ExpiresIn;
                responseModel.Token         = tokenResponse.AccessToken;
                responseModel.Success       = true;
                responseModel.IsAuthorized  = true;
                responseModel.Message       = ClientMessageConstant.Success;

                return(responseModel);
            }
            catch (Exception e)
            {
                new AccountResponse(e);
                responseModel.Message = ClientMessageConstant.WeAreUnableToProcessYourRequest;

                return(responseModel);
            }
        }
        private async Task <IActionResult> AddOrUpdateDeviceInfoAsync([FromBody] UserDeviceInfoViewModel model)
        {
            var result = await _service.AddOrUpdateDeviceInfoAsync(model);

            return(Ok(result.DiviceInfoViewModel));
        }
 private AccountResponse(bool success, string message, UserDeviceInfoViewModel diviceInfoViewModel, Exception e) : base(success, message, e)
 {
     DiviceInfoViewModel = diviceInfoViewModel;
 }