예제 #1
0
 protected void Page_Load(object sender, EventArgs e)
 {
     //var usuarios = new UsuarioDomain().GetList(new APP.Model.dataShape.Usuario() { iid = 134 });
     var usuarios = new UsuarioDomain().GetList(new APP.Model.dataShape.Usuario());
     dataGrid1.DataSource = usuarios;
     dataGrid1.DataBind();
 }
        public async Task<IHttpActionResult> Post([FromBody] UsuarioPostModel viewModel)
        {
            var domainModel = Mapper.Map<UsuarioPostModel, Usuario>(viewModel);
            var domain = new UsuarioDomain();

            await domain.CreateAsync(domainModel);
            viewModel.Id = domainModel.Id;

            return Created(Request.RequestUri, viewModel);
        }
        public async Task<IHttpActionResult> Put(long? id, [FromBody] UsuarioPutModel viewModel)
        {
            var domailModel = Mapper.Map<UsuarioPutModel, Usuario>(viewModel);
            var domain = new UsuarioDomain();

            domailModel.Id = id.Value;
            await domain.UpdateAsync(domailModel);

            return Ok();
        }
        public async Task<IHttpActionResult> Get(long? id)
        {
            var domain = new UsuarioDomain();
            var domainModel = await domain.FindByIdAsync(id.Value);

            if (domainModel == null)
                return NotFound();

            var viewModel = Mapper.Map<Usuario, UsuarioGetModel>(domainModel);

            return Ok(viewModel);
        }
예제 #5
0
        public async Task<IHttpActionResult> Ativar(long? id, string token)
        {
            var domain = new UsuarioDomain();
            var identityResult = await domain.ConfirmEmailAsync(id.Value, token);

            if (!identityResult.Succeeded)
                return GetErrorResult(identityResult);

            await domain.EnviarNotificacaoAtivacaoConta(id.Value);

            return Ok();
        }
예제 #6
0
 public void Cadastrar(UsuarioDomain novoUsuario)
 {
     using (SqlConnection con = new SqlConnection(stringConexao))
     {
         string queryInsert = "INSERT INTO Usuario(idTipoUsuario, email,senha) VALUES (@idTipoUsuario, @email, @senha)";
         using (SqlCommand cmd = new SqlCommand(queryInsert, con))
         {
             cmd.Parameters.AddWithValue("@idTipoUsuario", novoUsuario.idTipoUsuario);
             cmd.Parameters.AddWithValue("@email", novoUsuario.email);
             cmd.Parameters.AddWithValue("@senha", novoUsuario.senha);
             con.Open();
             cmd.ExecuteNonQuery();
         }
     }
 }
예제 #7
0
        public static string getHash(UsuarioDomain usuario)
        {
            string sal  = "protegendoseucodigo";
            var    salt = Encoding.ASCII.GetBytes(sal);
            string hash = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                                                     password: usuario.Senha,
                                                     salt: salt,
                                                     prf: KeyDerivationPrf.HMACSHA256,
                                                     iterationCount: 10000,
                                                     numBytesRequested: 256 / 8

                                                     ));

            return(hash);
        }
        public IActionResult Post(LoginViewModel login)
        {
            try
            {
                UsuarioDomain usuario = UsuarioRepository.BuscarPorEmailSenha(login.Email, login.Senha);

                if (usuario == null)
                {
                    return(NotFound(new
                    {
                        mensagem = "Usuário não encontrado...",
                    }
                                    ));
                }

                var claims = new[]
                {
                    new Claim(JwtRegisteredClaimNames.Email, usuario.Email),
                    new Claim(JwtRegisteredClaimNames.Jti, usuario.Id.ToString()),
                    new Claim(ClaimTypes.Role, usuario.TipoUsuario)
                };

                var key = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes("svigufo-chave-autenticacao"));

                var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

                var token = new JwtSecurityToken(
                    issuer: "Svigufo.WebApi",
                    audience: "Svigufo.WebApi",
                    claims: claims,
                    expires: DateTime.Now.AddMinutes(30),
                    signingCredentials: creds
                    );

                return(Ok(new
                {
                    token = new JwtSecurityTokenHandler().WriteToken(token)
                }));
            }
            catch
            {
                return(BadRequest(new
                {
                    mensagem = "Deu Bug, aqui é possível deixar uma mensagem sobre o BadRequest."
                }
                                  ));
            }
        }
        public IActionResult Post(LoginViewModel login)
        {
            try
            {
                // UsuarioDomain usuario = UsuarioRepository.BuscarPorEmailESenha(login);
                UsuarioDomain usuario = UsuarioRepository.BuscarPorEmailESenha(login.Email, login.Senha);
                if (usuario == null)
                {
                    return(NotFound(
                               new
                    {
                        mensagem = "Usuário ou senha inválidos."
                    }
                               ));
                }
                var claims = new[]
                {
                    new Claim(JwtRegisteredClaimNames.Email, login.Email),
                    new Claim(JwtRegisteredClaimNames.Jti, usuario.Id.ToString()),
                    new Claim(ClaimTypes.Role, usuario.TipoUsuario),
                };

                //recebe uma instancia da classe SymmetricSecurityKey
                //armazenando a chave de criptografia usada na criação do token
                var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("svigufo-chave-autenticacao"));

                //recebe um objeto do tipo SigninCredentials contendo a chave de
                //criptografia e o algoritmo de segurança empregados na geração
                // de assinaturas digitais para tokens
                var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

                var token = new JwtSecurityToken(
                    issuer: "Svigufo.WebApi",
                    audience: "Svigufo.WebApi",
                    claims: claims,
                    expires: DateTime.Now.AddMinutes(30),
                    signingCredentials: creds);

                return(Ok(new
                {
                    token = new JwtSecurityTokenHandler().WriteToken(token)
                }));
            }
            catch (Exception ex)
            {
                return(BadRequest(new { mensagem = ex.Message }));
            }
        }
예제 #10
0
        public void Atualizar(int id, UsuarioDomain usuario)
        {
            using (SqlConnection con = new SqlConnection(stringConexao))
            {
                string query = "update Usuarios set Email = @Email, Senha = @Senha  where IdUsuario = @Id";

                using (SqlCommand cmd = new SqlCommand(query, con))
                {
                    cmd.Parameters.AddWithValue("@Id", id);

                    string verificar = "select  Usuarios.Email, Usuarios.Senha from Usuarios where IdUsuario = @Id";

                    using (SqlCommand verificarUser = new SqlCommand(verificar, con))
                    {
                        verificarUser.Parameters.AddWithValue("@Id", id);

                        con.Open();

                        SqlDataReader rdrVerificar = verificarUser.ExecuteReader();

                        if (rdrVerificar.Read())
                        {
                            UsuarioDomain userBackup = new UsuarioDomain();
                            userBackup.Email       = rdrVerificar["Email"].ToString();
                            userBackup.Senha       = rdrVerificar["Senha"].ToString();
                            userBackup.NomeUsuario = rdrVerificar["NomeUsuario"].ToString();

                            if (String.IsNullOrEmpty(usuario.Email))
                            {
                                cmd.Parameters.AddWithValue("@Email", userBackup.Email);
                                cmd.Parameters.AddWithValue("@Senha", usuario.Senha);
                                cmd.Parameters.AddWithValue("@NomeUsuario", usuario.NomeUsuario);
                            }
                            else if (String.IsNullOrEmpty(usuario.Senha))
                            {
                                cmd.Parameters.AddWithValue("@Email", usuario.Email);
                                cmd.Parameters.AddWithValue("@Senha", userBackup.Senha);
                                cmd.Parameters.AddWithValue("@NomeUsuario", usuario.NomeUsuario);
                            }

                            rdrVerificar.Close();

                            cmd.ExecuteNonQuery();
                        }
                    }
                }
            }
        }
예제 #11
0
        /// <summary>
        /// Gera o token de login com informações de usuário e permissões
        /// </summary>
        /// <param name="usuario"> informações de usuario</param>
        /// <param name="signingConfigurations">configurações de assinatura</param>
        /// <param name="tokenConfigurations">configurações de token</param>
        /// <returns></returns>
        public object GerarToken(UsuarioDomain usuario, int empresaId, string setor, SigningConfigurations signingConfigurations,
                                 TokenConfigurations tokenConfigurations)
        {
            ClaimsIdentity identity = new ClaimsIdentity(
                new GenericIdentity(usuario.Id.ToString(), "Login"),
                new[] {
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString("N")),
                new Claim(JwtRegisteredClaimNames.UniqueName, usuario.Id.ToString()),
                new Claim("Nome", usuario.Id.ToString()),
                new Claim("EmpresaId", empresaId.ToString()),
                new Claim("Setor", setor),
                new Claim(ClaimTypes.Email, usuario.Email)
            }
                );

            foreach (var usuarioPermissao in usuario.Permissoes)
            {
                identity.AddClaim(new Claim(ClaimTypes.Role, usuarioPermissao.Permissao.Permissao));
            }

            DateTime dataCriacao   = DateTime.Now;
            DateTime dataExpiracao = dataCriacao.AddMonths(6);

            //gerar token JWT
            var tokenHandler  = new JwtSecurityTokenHandler();
            var securityToken = tokenHandler.CreateToken(new SecurityTokenDescriptor
            {
                Issuer             = tokenConfigurations.Issuer,
                Audience           = tokenConfigurations.Audience,
                SigningCredentials = signingConfigurations.SigningCredentials,
                Subject            = identity,
                NotBefore          = dataCriacao,
                Expires            = dataExpiracao
            });

            var token = tokenHandler.WriteToken(securityToken);

            var retorno = new
            {
                authenticated = true,
                created       = dataCriacao.ToString("yyyy-MM-dd HH:mm:ss"),
                expiration    = dataExpiracao.ToString("yyyy-MM-dd HH:mm:ss"),
                accessToken   = token,
                message       = "OK"
            };

            return(retorno);
        }
예제 #12
0
        public IActionResult Cadastrar([FromBody] UsuarioDomain usuario)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    UsuarioDomain retornoUsuario = _usuarioRepository.BuscarPorEmail(usuario.Email);
                    if (retornoUsuario != null)
                    {
                        return(BadRequest("Email já cadastrado"));
                    }
                    _usuarioRepository.Inserir(usuario);
                    return(Ok(usuario));
                }

                var errors = ModelState.Select(x => x.Value.Errors)
                             .Where(y => y.Count > 0)
                             .ToList();

                if (errors.Any())
                {
                    return(BadRequest(errors));
                }
                else
                {
                    var retornoUsuarios = new {
                        id     = usuario.UsuarioId,
                        email  = usuario.Email,
                        role   = usuario.Role,
                        ativo  = usuario.Ativo,
                        perfil = new  {
                            id        = usuario.Perfil.PerfilId,
                            usuarioId = usuario.UsuarioId,
                            nome      = usuario.Perfil.Nome,
                            miniBio   = usuario.Perfil.MiniBio,
                            cep       = usuario.Perfil.Cep,
                            sedeId    = usuario.Perfil.SedeId
                        }
                    };
                }

                return(Ok(usuario));
            }
            catch (System.Exception e)
            {
                return(BadRequest(e.Message));
            }
        }
        public IActionResult Login(UsuarioDomain login)
        {
            //Busca o usuário pelo e-mail e senha
            UsuarioDomain usuarioBuscado = _usuarioRepository.BuscarPorEmailSenha(login.email, login.senha);

            //caso não encontre nenhum usuário  irá retornar um status code Not Found
            if (usuarioBuscado == null)
            {
                return(NotFound("E-mail ou senha invalidos"));
            }

            //caso encontre prossegue a criação do token
            //Define os dados que serão fornecidos no Token - Payload
            var claims = new[]
            {
                //TipoDaClaim, ValorDaClaim
                new Claim(JwtRegisteredClaimNames.Email, usuarioBuscado.email),
                new Claim(JwtRegisteredClaimNames.Jti, usuarioBuscado.idUsuario.ToString()),
                new Claim(ClaimTypes.Role, usuarioBuscado.permissao),
                new Claim("Claim Personalizada", "Valor Teste")
            };

            //chave de acesso ao Token
            var key = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes("filmes-chave-autenticação"));

            //Define as credenciais do token- Header
            var cred = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            //gera token
            var token = new JwtSecurityToken
                        (
                issuer: "Filmes.WebApi",                //definindo o emissor do token
                audience: "Filmes.WebApi",              //destinatário do token
                claims: claims,                         //dados definidos na linha 47
                expires: DateTime.Now.AddMinutes(30),   //tempo de expiração
                signingCredentials: cred                //credenciais do token
                        );

            //retorna um Status code - 200(OK)

            return(Ok
                   (
                       new
            {
                token = new JwtSecurityTokenHandler().WriteToken(token)
            }
                   ));
        }
예제 #14
0
        public async Task<IHttpActionResult> Post([FromBody] ContaPostModel viewModel)
        {
            var domainModel = Mapper.Map<ContaPostModel, Usuario>(viewModel);
            var domain = new UsuarioDomain();

            var identityResult = await domain.CreateAsync(domainModel, domainModel.Senha);

            if (!identityResult.Succeeded)
                return GetErrorResult(identityResult);

            viewModel.Id = domainModel.Id;

            await domain.EnviarSolicitacaoAtivacaoConta(domainModel);

            return Created(Request.RequestUri, viewModel);
        }
예제 #15
0
        public void Register(UsuarioDomain newTEntity)
        {
            using (SqlConnection con = new SqlConnection(connectionString)) {
                string queryInsert = "INSERT INTO Usuario(email, senha, idTipoUsuario) VALUES(@email, @senha, @idTipoUsuario)";

                using (SqlCommand cmd = new SqlCommand(queryInsert, con)) {
                    cmd.Parameters.AddWithValue("@email", newTEntity.email);
                    cmd.Parameters.AddWithValue("@senha", newTEntity.senha);
                    cmd.Parameters.AddWithValue("@idTipoUsuario", newTEntity.idTipoUsuario);

                    con.Open();

                    cmd.ExecuteNonQuery();
                }
            }
        }
        /// <summary>
        /// MéTODO PARA DELETAR USUÁRIOS NO BANCO DE DADOS
        /// </summary>
        /// <param name="domain"> Deletar os dados de um usuário</param>
        /// <returns> Retorna true se o usuário for excluido e false, caso ocorra algum erro </returns>
        public bool Deletar(UsuarioDomain domain)
        {
            var usuario = _contexto.Usuarios.Single(o => o.Id == domain.Id);

            _contexto.Usuarios.Remove(usuario);
            int linhasExcluidas = _contexto.SaveChanges();

            if (linhasExcluidas > 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #17
0
 // O POST SERVE PARA CADASTRAR UM NOVO ITEM
 public IActionResult Cadastrar(UsuarioDomain usuario)
 {
     try
     {
         if (usuario.IdTipoUsuario == 2)
         {
             return(BadRequest(new { mensagem = "Erro: Você não possui a autorização necessária para cadastrar este tipo de usuário." }));
         }
         UsuarioRepository.Cadastrar(usuario);
         return(Ok());
     }
     catch (Exception ex)
     {
         return(BadRequest(new { mensagem = "Erro: " + ex.Message }));
     }
 }
예제 #18
0
        /// <summary>
        /// Lista todos os usuários
        /// </summary>
        /// <returns>Retorna uma lista de usuários</returns>
        public List <UsuarioDomain> Listar()
        {
            // Cria uma lista usuários onde serão armazenados os dados
            List <UsuarioDomain> usuarios = new List <UsuarioDomain>();

            // Declara a SqlConnection passando a string de conexão
            using (SqlConnection con = new SqlConnection(stringConexao))
            {
                // Declara a instrução a ser executada
                string querySelectAll = "SELECT IdUsuario, Email, Senha, IdTipoUsuario FROM Usuarios";

                // Abre a conexão com o banco de dados
                con.Open();

                // Declara o SqlDataReader para receber os dados do banco de dados
                SqlDataReader rdr;

                // Declara o SqlCommand passando o comando a ser executado e a conexão
                using (SqlCommand cmd = new SqlCommand(querySelectAll, con))
                {
                    // Executa a query e armazena os dados no rdr
                    rdr = cmd.ExecuteReader();

                    // Enquanto houver registros para serem lidos no rdr, o laço se repete
                    while (rdr.Read())
                    {
                        // Instancia um objeto usuario
                        UsuarioDomain usuario = new UsuarioDomain
                        {
                            // Atribui às propriedades os valores das colunas da tabela do banco
                            IdUsuario = Convert.ToInt32(rdr[0]),

                            Email = rdr["Email"].ToString(),

                            Senha = rdr["Senha"].ToString(),

                            IdTipoUsuario = Convert.ToInt32(rdr[0]),
                        };

                        // Adiciona o usuario criado à lista usuarios
                        usuarios.Add(usuario);
                    }
                }
            }
            // Retorna a lista de usuários
            return(usuarios);
        }
예제 #19
0
        /// <summary>
        /// Valida o usuário
        /// </summary>
        /// <param name="email">E-mail do usuário</param>
        /// <param name="senha">Senha do usuário</param>
        /// <returns>Retorna um usuário validado</returns>
        public UsuarioDomain BuscarPorEmailSenha(string email, string senha)
        {
            // Define a conexão passando a string
            using (SqlConnection con = new SqlConnection(stringConexao))
            {
                // Define a query a ser executada no banco
                string querySelect = "SELECT U.IdUsuario, U.Email, U.IdTipoUsuario, TU.Titulo FROM Usuarios U INNER JOIN TiposUsuario TU ON U.IdTipoUsuario = TU.IdTipoUsuario WHERE Email = @Email AND Senha = @Senha";

                // Define o comando passando a query e a conexão
                using (SqlCommand cmd = new SqlCommand(querySelect, con))
                {
                    // Define o valor dos parâmetros
                    cmd.Parameters.AddWithValue("@Email", email);
                    cmd.Parameters.AddWithValue("@Senha", senha);

                    // Abre a conexão com o banco
                    con.Open();

                    // Executa o comando e armazena os dados no objeto rdr
                    SqlDataReader rdr = cmd.ExecuteReader();

                    // Caso o resultado da query possua registro
                    if (rdr.Read())
                    {
                        // Instancia um objeto usuario
                        UsuarioDomain usuario = new UsuarioDomain
                        {
                            // Atribui às propriedades os valores das colunas da tabela do banco
                            IdUsuario       = Convert.ToInt32(rdr["IdUsuario"])
                            , Email         = rdr["Email"].ToString()
                            , IdTipoUsuario = Convert.ToInt32(rdr["IdTipoUsuario"])
                            , TipoUsuario   = new TipoUsuarioDomain
                            {
                                IdTipoUsuario = Convert.ToInt32(rdr["IdTipoUsuario"])
                                , Titulo      = rdr["Titulo"].ToString()
                            }
                        };

                        // Retorna o usuario buscado
                        return(usuario);
                    }
                }

                // Caso não encontre um email e senha correspondente, retorna null
                return(null);
            }
        }
        public ActionResult AlterarSenha(AlterarSenhaViewModel senha)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    ViewBag.Erro = "Dados inválidos. Verifique!";
                    return(View());
                }

                //Obtêm as Claims do usuário logado
                var identity = User.Identity as ClaimsIdentity;
                //Pega o valor do Id do usuário
                var id = identity.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier).Value;
                //Obtêm o valor de uma Claim nâo definida
                var telefone = identity.Claims.FirstOrDefault(x => x.Type == "Telefone").Value;

                //Cria uma instancia de UsuarioRepositorio
                using (UsuarioRepositorio objRepoUsuario = new UsuarioRepositorio())
                {
                    //Busca o usuário pelo seu Id
                    UsuarioDomain objUsuario = objRepoUsuario.BuscarPorId(new Guid(id));

                    //Verifico se a senha informada é igual a Atual
                    if (Hash.GerarHash(senha.SenhaAtual) != objUsuario.Senha)
                    {
                        //Senha inválida eu informo ao usuário
                        ModelState.AddModelError("SenhaAtual", "Senha incorreta");
                        return(View());
                    }
                    //Atribuimos o valor da nova senha ao objeto usuário
                    objUsuario.Senha = Hash.GerarHash(senha.NovaSenha);
                    //Alteramos o usuário no banco
                    objRepoUsuario.Alterar(objUsuario);
                    //Definimos a mensagem que irá aparecer na tela
                    TempData["Sucesso"] = "Senha Alterada";
                    //Retornamos ao Controller Usuário, Index
                    return(RedirectToAction("Index", "Usuario"));
                }
            }
            catch (System.Exception ex)
            {
                ViewBag.Erro = "Ocorreu um erro " + ex.Message;
                return(View());
            }
        }
예제 #21
0
        public void Update(UsuarioDomain newTEntity)
        {
            using (SqlConnection con = new SqlConnection(connectionString)) {
                string queryUpdateBody = "UPDATE Usuario SET email = @email, senha = @senha, idTipoUsuario = @idTipoUsuario WHERE idUsuario = @id";

                using (SqlCommand cmd = new SqlCommand(queryUpdateBody, con)) {
                    cmd.Parameters.AddWithValue("@id", newTEntity.idUsuario);
                    cmd.Parameters.AddWithValue("@email", newTEntity.email);
                    cmd.Parameters.AddWithValue("@senha", newTEntity.senha);
                    cmd.Parameters.AddWithValue("@idTipoUsuario", newTEntity.idTipoUsuario);

                    con.Open();

                    cmd.ExecuteNonQuery();
                }
            }
        }
예제 #22
0
        public void Cadastrar(UsuarioDomain usuario)
        {
            using (SqlConnection con = new SqlConnection(stringConexao))
            {
                string queryInsert = "INSERT INTO Usuarios VALUES(@Email, @Senha, @NomeUsuario";

                using (SqlCommand cmd = new SqlCommand(queryInsert, con))
                {
                    cmd.Parameters.AddWithValue("@Email", usuario.Email);
                    cmd.Parameters.AddWithValue("@Senha", usuario.Senha);
                    cmd.Parameters.AddWithValue("@NomeUsuario", usuario.NomeUsuario);

                    con.Open();
                    cmd.ExecuteNonQuery();
                }
            }
        }
예제 #23
0
        public UsuarioDomain BuscarPorId(int id)
        {
            using (SqlConnection con = new SqlConnection(stringConexao))
            {
                string querySelectById = "SELECT IdtipoUsuario,Email,Senha FROM Usuario" +
                                         "WHERE Idusuario = @ID";

                con.Open();

                SqlDataReader rdr;

                using (SqlCommand cmd = new SqlCommand(querySelectById, con))
                {
                    cmd.Parameters.AddWithValue("@ID", id);

                    rdr = cmd.ExecuteReader();

                    if (rdr.Read())
                    {
                        // Instancia um objeto usuario
                        UsuarioDomain usuario = new UsuarioDomain
                        {
                            // Atribui às propriedades os valores das colunas da tabela do banco
                            IdUsuario = Convert.ToInt32(rdr["IdUsuario"])
                            ,
                            Email = rdr["Email"].ToString()
                            ,
                            IdTipoUsuario = Convert.ToInt32(rdr["IdTipoUsuario"])
                            ,
                            TipoUsuario = new TipoUsuarioDomain
                            {
                                IdTipoUsuario = Convert.ToInt32(rdr["IdTipoUsuario"])
                                ,
                                Titulo = rdr["Titulo"].ToString()
                            }
                        };

                        // Retorna o usuario buscado
                        return(usuario);
                    }

                    // Caso o resultado da query não possua registros, retorna null
                    return(null);
                }
            }
        }
예제 #24
0
        public IActionResult Post(UsuarioDomain usuario)
        {
            try
            {
                //Chama o repositorio para efetuar o cadastro do usuário
                UsuarioRepository.Cadastrar(usuario);

                //Retorna um status code 200 informando que o usuário foi cadastrado
                return(Ok(new {
                    mensagem = "Usuário Cadastrado"
                }));
            }
            catch
            {
                return(BadRequest());
            }
        }
예제 #25
0
        public UsuarioDomain LoginUsuario(string nomeUsuario, string password)
        {
            UsuarioDomain usuario = AcharUsuario(nomeUsuario.ToLower());

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

            //verifica a validade da senha
            if (!VerificarPassword(password, usuario.PasswordHash, usuario.PasswordSalt))
            {
                return(null);
            }

            return(usuario);
        }
        public IActionResult Login(UsuarioDomain login)
        {
            // Busca o usuário pelo e-mail e senha
            UsuarioDomain usuarioBuscado = _usuarioRepository.BuscarPorEmailSenha(login.email, login.senha);

            // Caso não encontre nenhum usuário com o e-mail e senha informados
            if (usuarioBuscado == null)
            {
                // retorna NotFound com uma mensagem personalizada
                return(NotFound("E-mail ou senha inválidos!"));
            }


            // Caso encontre, prossegue para a criação do token

            // Define os dados que serão fornecidos no token - Payload
            var claims = new[]
            {
                // TipoDaClaim, ValorDaClaim
                new Claim(JwtRegisteredClaimNames.Email, usuarioBuscado.email),
                new Claim(JwtRegisteredClaimNames.Jti, usuarioBuscado.idUsuario.ToString()),
                new Claim(ClaimTypes.Role, usuarioBuscado.idTipoUsuario.ToString()),
                new Claim("Claim personalizada", "Valor teste")
            };

            // Define a chave de acesso ao token
            var key = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes("peoples-chave-autenticacao"));

            // Define as credenciais do token - Header
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            // Define a composição do token
            var token = new JwtSecurityToken(
                issuer: "T_Peoples.webApi",           // emissor do token
                audience: "T_Peoples.webApi",         // destinatário do token
                claims: claims,                       // dados definidos acima (linha 59)
                expires: DateTime.Now.AddMinutes(5),  // tempo de expiração
                signingCredentials: creds             // credenciais do token
                );

            // Retorna um status code 200 - Ok com o token criado
            return(Ok(new
            {
                token = new JwtSecurityTokenHandler().WriteToken(token)
            }));
        }
        public IActionResult GetById(int id)
        {
            // cria um objeto "funcionarioBuscado" que irá receber o "funcionarioBuscado" no banco de dados
            UsuarioDomain usuarioBuscado = _usuarioRepository.BuscarPorId(id);

            // um "=" é atribuição, um "==" é uma comparação

            // verifica se nenhum funcionário foi encontrado
            if (usuarioBuscado == null)
            {
                // caso não seja encontrado, retorna um status code 404 - Not Found com uma mensagem personalizada
                return(NotFound("Nenhum usuário encontrado!"));
            }

            // caso seja encontrado, retorna o funcionário buscado com um status code 200 - Ok
            return(Ok(usuarioBuscado));
        }
예제 #28
0
        // O POST SERVE PARA CADASTRAR UM NOVO ITEM
        public IActionResult Login(LoginViewModel login)
        {
            try
            {
                UsuarioDomain Usuario = UsuarioRepository.BuscarPorEmailESenha(login);
                if (Usuario == null)
                {
                    return(NotFound(new { mensagem = "Email ou senha inválidos." }));
                }
                // SÃO AS INFORMAÇÕES DO USUARIO
                var claims = new[]
                {
                    // EMAIL DO USUARIO
                    new Claim(JwtRegisteredClaimNames.Email, Usuario.Email),
                    // ID DO USUARIO
                    new Claim(JwtRegisteredClaimNames.Jti,
                              Usuario.IdUsuario.ToString()),
                    // ESSE É O TIPO DO USUÁRIO
                    new Claim(ClaimTypes.Role, Usuario.IdTipoUsuarioNavigation.Nome),
                };

                // ESSA CHAVE ESTA CONFIGURADA NO STARTUP
                var key = new SymmetricSecurityKey
                              (System.Text.Encoding.UTF8.GetBytes("opflix-chave-autenticacao"));
                // CRIPTOGRAFIA
                var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
                var token = new JwtSecurityToken(
                    // QUEM ESTA MANDANDO E QUEM ESTA VALIDANDO
                    issuer: "OpFlix.WebApi",
                    audience: "OpFlix.WebApi",
                    // ESSA É A DATA DE EXPIRAÇÃO
                    claims: claims, expires: DateTime.Now.AddMinutes(30),
                    // ESSA É A CHAVE
                    signingCredentials: creds);

                // SERVE PARA GERAR AS CHAVES
                return(Ok(new
                {
                    token = new JwtSecurityTokenHandler().WriteToken(token)
                }));
            }
            catch (Exception ex)
            {
                return(BadRequest(new { mensagem = "Erro." + ex.Message }));
            }
        }
        public void Cadastrar(UsuarioDomain usuario)
        {
            using (SqlConnection con = new SqlConnection(stringConexao))
            {
                string query = "INSERT INTO Usuarios (Email, Senha, IdTipoUsuario)VALUES (@Email, @Senha, @IdTipoUsuario)";

                SqlCommand cmd = new SqlCommand(query, con);

                cmd.Parameters.AddWithValue("@Email", usuario.Email);
                cmd.Parameters.AddWithValue("@Senha", usuario.Senha);
                cmd.Parameters.AddWithValue("@IdTipoUsuario", usuario.IdTipoUsuario);

                con.Open();

                cmd.ExecuteNonQuery();
            }
        }
        public UsuarioDomain BuscarPorEmailSenha(string email, string senha)
        {
            using (SqlConnection con = new SqlConnection(stringConexao))
            {
                string querySelect = "SELECT U.IdUsuario, U.Email, U.IdTipoUsuario, TU.Titulo FROM Usuarios U INNER JOIN TipoUsuario TU ON U.IdTipoUsuario = TU.IdTipoUsuario WHERE Email = @Email AND Senha = @Senha";


                using (SqlCommand cmd = new SqlCommand(querySelect, con))
                {
                    cmd.Parameters.AddWithValue("@Email", email);
                    cmd.Parameters.AddWithValue("@Senha", senha);


                    con.Open();


                    SqlDataReader rdr = cmd.ExecuteReader();


                    if (rdr.Read())
                    {
                        UsuarioDomain usuario = new UsuarioDomain
                        {
                            IdUsuario = Convert.ToInt32(rdr["IdUsuario"]),

                            Email = rdr["Email"].ToString(),

                            IdTipoUsuario = Convert.ToInt32(rdr["IdTipoUsuario"]),

                            TipoUsuario = new TipoUsuarioDomain
                            {
                                IdTipoUsuario = Convert.ToInt32(rdr["IdTipoUsuario"]),

                                Titulo = rdr["Titulo"].ToString()
                            }
                        };


                        return(usuario);
                    }
                }


                return(null);
            }
        }
        public IActionResult Cadastrar(UsuarioDomain user)
        {
            try
            {
                if ((user.Email == "") || (user.Senha == "") || (user.IdTipoUsuario == 0))
                {
                    return(BadRequest("Preecha todos os campos!"));
                }

                _usuarioRepository.Cadastrar(user);
                return(StatusCode(201));
            }
            catch (Exception erro)
            {
                return(BadRequest(erro));
            }
        }
예제 #32
0
        public IActionResult Post(LoginViewModel login)
        {
            try
            {
                UsuarioDomain usuarioBuscado = _repository.Login(login.Email, login.Senha);

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


                var claims = new[]
                {
                    new Claim(JwtRegisteredClaimNames.Email, usuarioBuscado.Email),

                    new Claim(JwtRegisteredClaimNames.Jti, usuarioBuscado.Id)
                };

                var key = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes("Churrasco-chave-autenticacao"));

                var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

                var token = new JwtSecurityToken(
                    issuer: "ChurrascoApi",
                    audience: "ChurrascoApi",
                    claims: claims,
                    expires: DateTime.Now.AddMinutes(30),
                    signingCredentials: creds
                    );

                return(Ok(new
                {
                    token = new JwtSecurityTokenHandler().WriteToken(token)
                }));
            }
            catch (Exception error)
            {
                return(BadRequest(new
                {
                    mensagem = "Não foi possível gerar o token",
                    error
                }));
            }
        }
        public IActionResult Post(UsuarioDomain usuario)
        {
            try
            {
                usuario = UsuarioRepository.BuscarPorEmailSenha(usuario.Email, usuario.Senha);
                if (usuario == null)
                {
                    return(NotFound(new
                    {
                        mensagem = "Usuario não encontrado"
                    }
                                    ));
                }
                //SENTA QUE LÁ VEM MERDA 2.0
                var claims = new[]
                {
                    new Claim(JwtRegisteredClaimNames.Email, usuario.Email),
                    new Claim(JwtRegisteredClaimNames.Jti, usuario.UsuarioId.ToString()),
                    new Claim(ClaimTypes.Role, usuario.TipoUsuario)
                };

                var key   = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes("InLockGames-authenticacao"));
                var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

                var token = new JwtSecurityToken(
                    //Nome do Issuer, de onde esta vindo
                    issuer: "InLockGames.WebApi",
                    //Nome da Audience, de onde está vindo
                    audience: "InLockGames.WebApi",
                    claims: claims,
                    expires: DateTime.Now.AddMinutes(30),
                    signingCredentials: creds

                    );

                return(Ok(new
                {
                    token = new JwtSecurityTokenHandler().WriteToken(token)
                }));
            }
            catch
            {
                return(BadRequest());
            }
        }
예제 #34
0
        /// <summary>
        /// Busca um usuário através do ID
        /// </summary>
        /// <param name="id">ID do usuário que será buscado</param>
        /// <returns>Retorna um usuário buscado</returns>
        public UsuarioDomain BuscarPorId(int id)
        {
            // Declara a conexão passando a string de conexão
            using (SqlConnection con = new SqlConnection(stringConexao))
            {
                // Declara a query que será executada
                string querySelectById = "SELECT IdUsuario, Email, Senha, IdTipoUsuario FROM Usuarios WHERE IdUsuario = @ID";

                // Abre a conexão com o banco de dados
                con.Open();

                // Declara o SqlDataReader para receber os dados do banco de dados
                SqlDataReader rdr;

                // Declara o SqlCommand passando o comando a ser executado e a conexão
                using (SqlCommand cmd = new SqlCommand(querySelectById, con))
                {
                    // Passa o valor do parâmetro
                    cmd.Parameters.AddWithValue("@ID", id);

                    // Executa a query e armazena os dados no rdr
                    rdr = cmd.ExecuteReader();

                    // Caso o resultado da query possua registro
                    if (rdr.Read())
                    {
                        // Instancia um objeto usuario
                        UsuarioDomain usuario = new UsuarioDomain
                        {
                            // Atribui às propriedades os valores das colunas da tabela do banco
                            IdUsuario     = Convert.ToInt32(rdr["IdUsuario"]),
                            Email         = rdr["Email"].ToString(),
                            Senha         = rdr["Senha"].ToString(),
                            IdTipoUsuario = Convert.ToInt32(rdr["IdTipoUsuario"]),
                        };

                        // Retorna o usuario buscado
                        return(usuario);
                    }

                    // Caso o resultado da query não possua registros, retorna null
                    return(null);
                }
            }
        }
        public ActionResult AlterarSenha(AlterarSenhaViewModel senha)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    ViewBag.Erro = "Ocorreu um erro. Verifique digite uma senha válida!";
                    return(View());
                }
                //obtem claims do usuario
                var identity = User.Identity as ClaimsIdentity;
                // pega valor do id do Usuario
                var id = identity.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier).Value;
                // obtem o valor de uma clais não definica anteriormente em contaController
                var telefomne = identity.Claims.FirstOrDefault(x => x.Type == "Telefone").Value;

                using (UsuarioRepositorio objRepUsuario = new UsuarioRepositorio())
                {
                    // verifica se a senha ionformada é igual a atual
                    UsuarioDomain objUsuario = objRepUsuario.BuscarPorId(new Guid(id));
                    if (Hash.GerarHash(senha.SenhaAtual) != objUsuario.Senha)
                    {
                        //  senha invalida informo o usuario
                        ModelState.AddModelError("Senha Atual", "Senha incorreta");
                        return(View());
                    }
                    // atribue o valor da nova senha ao objeto usuario
                    objUsuario.Senha = Hash.GerarHash(senha.NovaSenha);
                    // altera o usuario no bando
                    objRepUsuario.Alterar(objUsuario);
                    // Defimos a mensagem que ira aparecer na tela
                    TempData["Sucesso"] = "Senha Altereda";
                    // retornamos ao controller Usuario , Index
                    return(RedirectToAction("Index", "Usuario"));
                }
            }
            catch (Exception ex)
            {
                ViewBag.message = "Ocorreu um erro" + ex.Message;
                return(View());
            }


            return(RedirectToAction("Index", "Usuario"));
        }
        public int Deletar(int id)
        {
            try{
                //encontrar funcionario pelo id
                FuncionarioDomain funcionario = _context.Funcionarios.FirstOrDefault(x => x.Id == id);
                UsuarioDomain     usuario     = _context.Usuarios.FirstOrDefault(y => y.Id == funcionario.UsuarioId);

                //remover funcionario e usuario
                _context.Funcionarios.Remove(funcionario);
                _context.Usuarios.Remove(usuario);

                return(_context.SaveChanges());
            }
            catch (Exception e) {
                throw new Exception(e.Message);
            }
            throw new System.NotImplementedException();
        }
        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            // 1. Reading the allowed origin value for this client from the Owin context, then we use this value 
            // to add the header “Access-Control-Allow-Origin” to Owin context response, by doing this and for 
            // any JavaScript application we’ll prevent using the same client id to build another JavaScript 
            // application hosted on another domain; because the origin for all requests coming from this app will be 
            // from a different domain and the back-end API will return 405 status.

            var allowedOrigin = context.OwinContext.Get<string>("as:clientAllowedOrigin") ?? "*";

            context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin });

            // 2. We’ll check the username/password for the resource owner if it is valid, and if this is the case 
            // we’ll generate set of claims for this user along with authentication properties which contains the client 
            // id and userName, those properties are needed for the next steps.

            var usuarioDomain = new UsuarioDomain();
            var usuario = await usuarioDomain.FindAsync(context.UserName, context.Password);

            if (usuario == null)
            {
                context.SetError("invalid_grant", "The user name or password is incorrect.");
                return;
            }

            // 3. Retorna Claims do usuário
            var claimsCollection = await usuarioDomain.GetClaimsByUsernameAsync(usuario.UserName);

            var identity = new ClaimsIdentity(context.Options.AuthenticationType);
            if (claimsCollection != null)
                identity.AddClaims(claimsCollection);

            // MOCKING START
            identity.AddClaim(new Claim(ClaimTypes.Name, usuario.UserName));
            // MOCKING END

            var props = new AuthenticationProperties(new Dictionary<string, string>
            {
                {"as:client_id", context.ClientId ?? string.Empty},
                {"userName", context.UserName}
            });

            // 4. Now the access token will be generated behind the scenes when we call “context.Validated(ticket)”
            var ticket = new AuthenticationTicket(identity, props);
            context.Validated(ticket);
        }
        public override async Task GrantRefreshToken(OAuthGrantRefreshTokenContext context)
        {
            // pega o id do cliente gravado no ticket e o id do cliente da requisição
            var originalClient = context.Ticket.Properties.Dictionary["as:client_id"];
            var currentClient = context.ClientId;

            // se os ID forem diferentes
            if (originalClient != currentClient)
            {
                // invalida o cliente
                context.SetError("invalid_clientId", "Refresh token is issued to a different clientId.");
                return;
            }

            // adiciona ou remove novas claims setadas para este determinado usuário
            var newIdentity = new ClaimsIdentity(context.Options.AuthenticationType);

            var usuarioDomain = new UsuarioDomain();
            var claimsCollection = await usuarioDomain.GetClaimsByUsernameAsync(context.Ticket.Identity.Name);
            if (claimsCollection != null)
                newIdentity.AddClaims(claimsCollection);

            // MOCKING START
            newIdentity.AddClaim(new Claim(ClaimTypes.Name, context.Ticket.Identity.Name));
            // MOCKING END

            // gera um novo ticket e valida o contexto fazendo gerar um novo token de acesso
            // e retorná-lo na resposta da requisição
            var newTicket = new AuthenticationTicket(newIdentity, context.Ticket.Properties);
            context.Validated(newTicket);
        }
예제 #39
0
        public async Task<IHttpActionResult> SolicitarRedefinicaoSenha(
            [FromBody] ContaSolicitarRedefinicaoSenhaModel viewModel)
        {
            var domain = new UsuarioDomain();
            await domain.EnviarSolicitacaoRedefinicaoSenha(viewModel.Email);

            return Ok();
        }
예제 #40
0
        public async Task<IHttpActionResult> RedefinirSenha([FromUri] long? id, [FromUri] string token,
            [FromBody] ContaRedefinirSenhaViewModel viewModel)
        {
            var domain = new UsuarioDomain();
            var identityResult = await domain.ResetPasswordAsync(id.Value, token, viewModel.Senha);

            if (!identityResult.Succeeded)
                return GetErrorResult(identityResult);

            await domain.EnviarNotificacaoRedefinicaoSenha(id.Value);

            return Ok();
        }