public async Task <IActionResult> UpdatePassword([FromBody] UserRedefinicaoSenhaDTO request) { try { var user = await _userManager.FindByNameAsync(request.UserName); if (user != null) { var validarNovaSenha = _passwordValidator.ValidateAsync(_userManager, user, request.NovaSenha); if (!validarNovaSenha.Result.Succeeded) { return(BadRequest(new ApiResponseError(HttpStatusCode.BadRequest, "Erro na Modificação da Senha") { Errors = validarNovaSenha.Result.Errors.Select(p => p.Description).ToList() })); } var autenticado = await _signInManager.PasswordSignInAsync(user, request.SenhaAtual, isPersistent : false, lockoutOnFailure : false); if (!autenticado.Succeeded) { return(BadRequest(new ApiResponseError(HttpStatusCode.BadRequest, "Usuário ou Senha Inválidos") { Errors = new List <string>() { "Usuário ou Senha Inválidos" } })); } var verificarUltimasSenhas = _usuarioSenhaHistoryService.UltimasSenhas(user.Id, _appSettings.Auth.QtdSenhasVerificar); foreach (var item in verificarUltimasSenhas) { var igualUltimasTres = _passwordHasher.VerifyHashedPassword(null, item.PasswordHash, request.NovaSenha); if (igualUltimasTres == PasswordVerificationResult.Success) { return(BadRequest(new ApiResponseError(HttpStatusCode.BadRequest, "Senha não pode ser igual as últimas 3 Senhas válidas") { Errors = new List <string>() { "Senha não pode ser igual as últimas 3 Senhas válidas" } })); } } var hashPass = _passwordHasher.HashPassword(user, request.NovaSenha); await _userManager.RemovePasswordAsync(user); var result = await _userManager.AddPasswordAsync(user, hashPass); if (result.Succeeded) { user.DataUltimaTrocaSenha = DateTime.Now; user.FirstLogin = false; user.ForcaTrocaSenha = false; user.Logado = true; user.DataUltimoLogin = DateTime.Now; user.PasswordHash = hashPass; await _userManager.UpdateAsync(user); var usuarioSenhaHistory = new UsuarioSenhaHistory() { UsuarioId = user.Id, DataCriacao = DateTime.Now, PasswordHash = user.PasswordHash }; _usuarioSenhaHistoryService.Add(usuarioSenhaHistory); var roles = await _userManager.GetRolesAsync(user); var buildToken = TokenHelper.BuildToken(user, roles.ToList(), _appSettings.Auth.JWTSecret, _appSettings.Auth.Expiration); var userAutentication = new UserAutenticationDTO() { UserName = user.UserName, DataLogin = user.DataUltimoLogin, Token = buildToken, Autenticated = true, ForcaTrocaSenha = false }; return(Ok(new ApiResponseSuccess <UserAutenticationDTO>(userAutentication, "Senha Redefina com Sucesso!"))); } else { return(BadRequest(new ApiResponseError(HttpStatusCode.BadRequest, "Erro na Modificação da Senha") { Errors = result.Errors.Select(p => p.Description).ToList() })); } } else { return(BadRequest(new ApiResponseError(HttpStatusCode.BadRequest, "Usuário ou Senha Inválidos") { Errors = new List <string>() { "Usuário ou Senha Inválidos" } })); } } catch (Exception ex) { _logger.LogError("Erro ao Modificar a Senha {message}", ex.Message); return(NotFound(new ApiResponseError(HttpStatusCode.NotFound, "Erro na Troca de Senha") { Errors = new List <string>() { $"Erro ao tentar Trocar a Senha" } })); } }
public async Task <IActionResult> Register([FromBody] Usuario request) { try { if (request.PerfilId == null) { return(BadRequest("Nenhum Perfil Associado!")); } request.ForcaTrocaSenha = true; request.DataCriacao = DateTime.Now; request.Logado = false; request.Ativo = true; request.DataUltimaTrocaSenha = DateTime.Now; request.DataUltimoLogin = DateTime.Now; var existUser = await _userManager.FindByNameAsync(request.UserName); if (existUser == null) { var result = await _userManager.CreateAsync(request, request.PasswordHash); if (result.Succeeded) { var perfil = await _roleManager.FindByIdAsync(request.PerfilId.ToString()); if (perfil != null) { await _userManager.AddToRoleAsync(request, perfil.Name); } var user = await _userManager.FindByIdAsync(request.Id.ToString()); var usuarioSenhaHistory = new UsuarioSenhaHistory() { UsuarioId = user.Id, DataCriacao = DateTime.Now, PasswordHash = user.PasswordHash }; _usuarioSenhaHistoryService.Add(usuarioSenhaHistory); return(Ok(new ApiResponseSuccess <Usuario>(user, "Usuário cadastrado com sucesso!"))); } else { return(BadRequest(new ApiResponseError(HttpStatusCode.BadRequest, "Erro na Criação de Usuários") { Errors = result.Errors.Select(p => p.Description).ToList() })); } } else { return(BadRequest(new ApiResponseError(HttpStatusCode.BadRequest, "Usuário já Existente na base") { Errors = new List <string>() { "Usuário já existente na base" } })); } } catch (Exception ex) { return(NotFound(new ApiResponseError(HttpStatusCode.BadRequest, "Erro genérico na Criação de Usuários") { Errors = new List <string>() { $"Erro: {ex.Message}" } })); } }