public async Task <Usuario> LoginUsuario(string contrasena, Usuario usuario, UsuarioGrupoUsuario usuarioGrupoUsuario) { try { var resultUsuarioGrupoUsuario = await _context.UsuarioGrupoUsuario .Include(x => x.Usuario) .FirstOrDefaultAsync(x => x.Usuario.CodUsuario == usuario.CodUsuario && x.GrupoUsuarioId == usuarioGrupoUsuario.GrupoUsuarioId); if (resultUsuarioGrupoUsuario == null) { return(null); } var user = resultUsuarioGrupoUsuario.Usuario; if (user == null) { return(null); } if (!VerifyPasswordHash(contrasena, user.ContrasenaHash, user.ContrasenaSalt)) { return(null); } return(user); } catch (Exception) { throw new Exception("Ocurrio un error interno, por favor comunicare con el administrador"); } }
public async Task <IActionResult> Login([FromBody] UsuarioLoginDto usuarioLoginDto) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (usuarioLoginDto == null) { return(Unauthorized()); } var usuarioLogin = new Usuario { CodUsuario = usuarioLoginDto.CodUsuario }; var usuarioGrupoUsuario = new UsuarioGrupoUsuario { GrupoUsuarioId = usuarioLoginDto.GrupoUsuarioId }; var userFromRepo = await _usuario.LoginUsuario(usuarioLoginDto.Contrasena, usuarioLogin, usuarioGrupoUsuario); if (userFromRepo == null) { return(Unauthorized()); } var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.ASCII.GetBytes(_configuration.GetSection("AppSettings:Token").Value); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.NameIdentifier, userFromRepo.Id.ToString()), new Claim(ClaimTypes.Name, userFromRepo.CodUsuario), new Claim(ClaimTypes.Role, usuarioLoginDto.GrupoUsuarioId.ToString()) }), Expires = DateTime.Now.AddDays(1), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha512Signature) }; var token = tokenHandler.CreateToken(tokenDescriptor); var tokenString = tokenHandler.WriteToken(token); return(Ok(new { tokenString })); }
public async Task <IActionResult> ActualizarClave(int id, [FromBody] UsuarioClaveDto UsuarioClaveDto) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (UsuarioClaveDto.ContrasenaNueva != UsuarioClaveDto.ConfirmarContrasena) { ModelState.AddModelError("ContrasenaNueva", "Las contrasenas no son iguales"); } var currentUserId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value); var userFromRepo = await _usuario.ObtenerUsuario(new Usuario { Id = id }); if (userFromRepo == null) { return(NotFound($"No se pido encontrar el usuario con el ID {id}")); } if (currentUserId != userFromRepo.Id) { return(Unauthorized()); } var usuarioGrupoUsuario = new UsuarioGrupoUsuario { GrupoUsuarioId = int.Parse(User.FindFirst(ClaimTypes.Role).Value) }; var userFromLogin = await _usuario.LoginUsuario(UsuarioClaveDto.Contrasena, userFromRepo, usuarioGrupoUsuario); if (userFromLogin == null) { return(Unauthorized()); } if (await _usuario.ActualizarClaveUsuario(userFromRepo.Id, UsuarioClaveDto.ContrasenaNueva)) { return(NoContent()); } throw new Exception($"Actualizacion del usuario {id} Fallo"); }
public async Task <IActionResult> Register([FromBody] UsuarioRegisterDto usuarioRegisterDto) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var usuarioRegistro = new Usuario { CodUsuario = usuarioRegisterDto.CodUsuario, Nombres = usuarioRegisterDto.Nombres }; var usuarioGrupoUsuario = new UsuarioGrupoUsuario { GrupoUsuarioId = usuarioRegisterDto.GrupoUsuarioId }; if (!string.IsNullOrEmpty(usuarioRegisterDto.CodUsuario)) { usuarioRegisterDto.CodUsuario = usuarioRegisterDto.CodUsuario.ToLower(); } if (usuarioRegisterDto.GrupoUsuarioId == 1) { ModelState.AddModelError("GrupoUsuarioId", "No de puede crear el usuario con este grupo"); } if (await _grupoUsuario.ObtenerGrupoUsuario(new GrupoUsuario { Id = usuarioRegisterDto.GrupoUsuarioId }) == null) { ModelState.AddModelError("GrupoUsuarioId", "El Grupo no existe"); } if (await _usuario.VerificarUsuario(usuarioRegistro) != null) { ModelState.AddModelError("CodLogin", "Usuario ya existe"); } var userCreate = await _usuario.GuardarUsuario(usuarioRegisterDto.Contrasena, usuarioRegistro, usuarioGrupoUsuario); return(StatusCode(201)); }
public async Task <Usuario> GuardarUsuario(string contrasena, Usuario usuario, UsuarioGrupoUsuario usuarioGrupoUsuario) { try { byte[] contrasenaHash, contrasenaSalt; CreatePasswordHash(contrasena, out contrasenaHash, out contrasenaSalt); usuario.ContrasenaHash = contrasenaHash; usuario.ContrasenaSalt = contrasenaSalt; await _context.Usuario.AddAsync(usuario); usuarioGrupoUsuario.UsuarioId = usuario.Id; await _context.UsuarioGrupoUsuario.AddAsync(usuarioGrupoUsuario); await _context.SaveChangesAsync(); return(usuario); } catch (Exception) { throw new Exception("Ocurrio un error interno, por favor comunicare con el administrador"); } }