예제 #1
0
        public UsuarioAutenticado Authenticate(string nombreUsuario, string contrasena)
        {
            UsuariosModel usuario;

            using (var ctx = new EFContext())
            {
                usuario = ctx.Usuarios.SingleOrDefault(u => u.Usuario == nombreUsuario && u.Estatus == true);
            }

            if (usuario == null)
            {
                return(null);
            }

            var contrasenaSalada   = usuario.Sal + contrasena;
            var usuarioAutenticado = HashContrasena.CheckPassword(contrasenaSalada, usuario.Contrasena);

            if (!usuarioAutenticado)
            {
                return(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, usuario.Usuario.ToString()),
                    new Claim(ClaimTypes.Gender, usuario.Sexo.ToString()),
                    new Claim(ClaimTypes.NameIdentifier, usuario.Id.ToString()),
                    new Claim(ClaimTypes.Email, usuario.Correo.ToString()),
                }),
                Expires            = DateTime.UtcNow.AddDays(7),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
            };

            var token = tokenHandler.CreateToken(tokenDescriptor);

            UsuarioAutenticado ua = new UsuarioAutenticado
            {
                Id      = usuario.Id,
                Usuario = usuario.Usuario,
                Correo  = usuario.Correo,
                Estatus = usuario.Estatus,
                Sexo    = usuario.Sexo,
                Token   = tokenHandler.WriteToken(token)
            };

            return(ua);
        }
예제 #2
0
        public IActionResult Put(int id, [FromBody] ModificarUsuarioDTO usuarioDTO)
        {
            using (EFContext ctx = new EFContext())
            {
                var usuario = ctx.Usuarios.Where(u => u.Id == id && u.Estatus == true).FirstOrDefault();

                if (usuario == null)
                {
                    return(NotFound());
                }

                usuario.Usuario = usuarioDTO.Usuario;
                usuario.Correo  = usuarioDTO.Correo;
                usuario.Sexo    = usuarioDTO.Sexo;

                if (usuarioDTO.Contrasena != null || usuarioDTO.Contrasena != "")
                {
                    var contrasena = HashContrasena.GetHash(usuarioDTO.Contrasena);
                    usuario.Contrasena = contrasena.Contrasena;
                    usuario.Sal        = contrasena.Sal;
                }

                try
                {
                    ctx.SaveChanges();
                    return(Ok(ctx.Usuarios
                              .Where(r => r.Id == usuario.Id)
                              .Select(r => new { r.Id, r.Correo, r.Usuario, r.Sexo, r.FechaCreacion })
                              .FirstOrDefault()));
                }
                catch (DbUpdateException ex)
                {
                    SqlException innerException = ex.InnerException as SqlException;
                    if (innerException != null && (innerException.Number == 2627 || innerException.Number == 2601))
                    {
                        return(Conflict(new { message = "No se puede modificar porque se el usuario o el correo ya están repetidos" }));
                    }
                    else
                    {
                        throw;
                    }
                }
            }
        }
예제 #3
0
        public IActionResult Post([FromBody] CrearUsuarioDTO usuarioDTO)
        {
            using (EFContext ctx = new EFContext())
            {
                // Hasheamos la contraseña
                var hash = HashContrasena.GetHash(usuarioDTO.Contrasena);

                // Construimos nuestro modelo Usuario
                var usuarioModel = new UsuariosModel()
                {
                    Usuario    = usuarioDTO.Usuario,
                    Correo     = usuarioDTO.Correo,
                    Contrasena = hash.Contrasena,
                    Sal        = hash.Sal,
                    Sexo       = usuarioDTO.Sexo,
                };
                var usuario = ctx.Usuarios.Add(usuarioModel);

                try
                {
                    ctx.SaveChanges();
                    return(Created($"api/usuarios/{usuario.Entity.Id}/", ctx.Usuarios
                                   .Where(r => r.Id == usuario.Entity.Id)
                                   .Select(r => new { r.Id, r.Correo, r.Usuario, r.Sexo, r.FechaCreacion })
                                   .FirstOrDefault()));
                }
                catch (DbUpdateException ex)
                {
                    SqlException innerException = ex.InnerException as SqlException;
                    if (innerException != null && (innerException.Number == 2627 || innerException.Number == 2601))
                    {
                        return(Conflict(new { message = "El registro ya existe" }));
                    }
                    else
                    {
                        throw;
                    }
                }
            }
        }