Exemplo n.º 1
0
        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");
            }
        }
Exemplo n.º 2
0
        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 }));
        }
Exemplo n.º 3
0
        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");
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
        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");
            }
        }