示例#1
0
        public async Task <IActionResult> Login([FromBody] Login login)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest());
                }

                UsuarioLogadoViewModel usuario = await Autentica(login);

                if (usuario != null)
                {
                    usuario.Token = await CriaToken(usuario);

                    return(Ok(usuario));
                }

                return(Unauthorized());
            }
            catch (Exception e)
            {
                return(StatusCode(500, e.Message));
            }
        }
示例#2
0
        //[HttpPost("TrocarOrganizacao")]
        //public async Task<IActionResult> TrocaOrganizacao([FromBody]TrocaOrganizacaoViewModel trocaOrganizacaoViewModel)
        //{
        //    if (!ModelState.IsValid)
        //    {
        //        return BadRequest();
        //    }

        //    try
        //    {
        //        _roleEnum = (OrganizacaoUsuarioRoleEnum)Enum.Parse(typeof(OrganizacaoUsuarioRoleEnum), _contextAccessor.HttpContext.User.Claims.FirstOrDefault(x => x.Type == "RoleEnum")?.Value);
        //    }
        //    catch
        //    {
        //        return BadRequest();
        //    }


        //    List<Guid> idsTimes;
        //    DateTime dataCriacao;
        //    Guid idOrganizacao;
        //    OrganizacaoUsuarioRoleEnum roleEnum;

        //    if (_roleEnum == OrganizacaoUsuarioRoleEnum.GoobeeAdmin)
        //    {
        //        var usuario = await _usuarioRepository.PegarUsuario(x => x.Id == trocaOrganizacaoViewModel.IdUsuario);
        //        var pessoa = await _pessoaRepository.BuscarPorEmail(usuario.Login);
        //        idsTimes = new List<Guid>();
        //        dataCriacao = DateTime.Now;
        //        idOrganizacao = trocaOrganizacaoViewModel.IdOrganizacao;
        //        roleEnum = OrganizacaoUsuarioRoleEnum.GoobeeAdmin;

        //        pessoa.IdUltimaOrgAcessada = trocaOrganizacaoViewModel.IdOrganizacao;
        //        _pessoaRepository.Update(pessoa);

        //        if (pessoa != null)
        //        {
        //            var usuarioLogado = new UsuarioLogadoViewModel()
        //            {
        //                DataCriacao = DateTime.Now,
        //                Email = pessoa.Email,
        //                Nome = pessoa.Nome,
        //                Foto = pessoa.Foto,
        //                Id = usuario.Id,
        //                IdPessoa = pessoa.Id,
        //                IdOrganizacao = idOrganizacao,
        //                RoleEnum = roleEnum,
        //                IdsTimes = idsTimes
        //            };

        //            usuarioLogado.Token = await CriaToken(usuarioLogado);

        //            _pessoaRepository.Save();

        //            return Ok(usuarioLogado);
        //        }
        //    }
        //    else
        //    {
        //        try
        //        {
        //            OrganizacaoUsuario pessoa;
        //            List<OrganizacaoUsuario> organizacoesUsuario;
        //            organizacoesUsuario = await _organizacaoService.ListarOrganizacoesUsuario(trocaOrganizacaoViewModel.IdUsuario);

        //            foreach (var org in organizacoesUsuario)
        //            {
        //                if (org.IdOrganizacao == trocaOrganizacaoViewModel.IdOrganizacao)
        //                    org.UltimaAcessada = true;
        //                else
        //                    org.UltimaAcessada = false;
        //            }

        //            _organizacaoUsuarioRepository.UpdateRange(organizacoesUsuario);

        //            pessoa = organizacoesUsuario.FirstOrDefault(x => x.IdOrganizacao == trocaOrganizacaoViewModel.IdOrganizacao);


        //            if (pessoa != null)
        //            {
        //                idsTimes = new List<Guid>();
        //                foreach (var timePessoa in pessoa.Pessoa.TimePessoas)
        //                {
        //                    if (timePessoa.IdOrganizacao == pessoa.IdOrganizacao)
        //                        idsTimes.Add(timePessoa.IdTime);
        //                }
        //                dataCriacao = pessoa.DataCriacao;
        //                idOrganizacao = pessoa.IdOrganizacao;
        //                roleEnum = pessoa.OrganizacaoUsuarioRole.Role;

        //                var usuarioLogado = new UsuarioLogadoViewModel()
        //                {
        //                    DataCriacao = dataCriacao,
        //                    Email = pessoa.Pessoa.Email,
        //                    Nome = pessoa.Pessoa.Nome,
        //                    Foto = pessoa.Pessoa.Foto,
        //                    Id = pessoa.IdUsuario.Value,
        //                    IdPessoa = pessoa.IdPessoa,
        //                    IdOrganizacao = idOrganizacao,
        //                    RoleEnum = roleEnum,
        //                    IdsTimes = idsTimes
        //                };

        //                usuarioLogado.Token = await CriaToken(usuarioLogado);

        //                _organizacaoUsuarioRepository.Save();

        //                return Ok(usuarioLogado);
        //            }
        //        }
        //        catch
        //        {
        //            return BadRequest();
        //        }
        //    }

        //    return StatusCode(401);
        //}

        private async Task <string> CriaToken(UsuarioLogadoViewModel user)
        {
            List <Claim> claims = new List <Claim>();

            claims.Add(new Claim(JwtRegisteredClaimNames.Sub, user.Nome));
            claims.Add(new Claim("IdOrganizacao", user.IdOrganizacao.ToString()));
            claims.Add(new Claim(JwtRegisteredClaimNames.Email, user.Email));
            claims.Add(new Claim(JwtRegisteredClaimNames.Birthdate, user.DataCriacao.ToString("yyyy-MM-dd")));
            claims.Add(new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()));

            //Anexando a Role
            switch (user.RoleEnum)
            {
            case OrganizacaoUsuarioRoleEnum.GoobeeAdmin:
                claims.Add(new Claim(ClaimTypes.Role, RolesNomes.GoobeeAdmin));
                claims.Add(new Claim("RoleEnum", user.RoleEnum.ToString()));
                break;

            case OrganizacaoUsuarioRoleEnum.OrganizationAdmin:
                claims.Add(new Claim(ClaimTypes.Role, RolesNomes.OrganizationAdmin));
                claims.Add(new Claim("RoleEnum", user.RoleEnum.ToString()));
                break;

            case OrganizacaoUsuarioRoleEnum.AgileCoach:
                claims.Add(new Claim(ClaimTypes.Role, RolesNomes.AgileCoach));
                claims.Add(new Claim("RoleEnum", user.RoleEnum.ToString()));
                break;

            case OrganizacaoUsuarioRoleEnum.TeamLeader:
                claims.Add(new Claim(ClaimTypes.Role, RolesNomes.TeamLeader));
                claims.Add(new Claim("RoleEnum", user.RoleEnum.ToString()));
                break;

            default:
                claims.Add(new Claim(ClaimTypes.Role, RolesNomes.TeamMember));
                claims.Add(new Claim("RoleEnum", user.RoleEnum.ToString()));
                break;
            }

            //attach roles
            //foreach (string role in user.Roles)
            //{
            //    claims.Add(new Claim(ClaimTypes.Role, role));
            //}

            var key   = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken(
                _config["Jwt:Issuer"],
                _config["Jwt:Issuer"],
                claims,
                expires: DateTime.Now.AddMinutes(600), //60 min expiry and a client monitor token quality and should request new token with this one expiries
                signingCredentials: creds);

            return(new JwtSecurityTokenHandler().WriteToken(token));
        }
示例#3
0
        public UsuarioLogadoViewModel ValidarUsuario(string email, string senha)
        {
            UsuarioLogadoViewModel usuarioLogado = null;
            string nome       = "";
            string senhaFinal = "";
            string id         = "";

            // Passando a senha que está em MD5 para SHA256
            using (SHA256 sha256 = SHA256.Create())
            {
                byte[]        data     = sha256.ComputeHash(Encoding.UTF8.GetBytes(senha));
                StringBuilder sBuilder = new StringBuilder();
                for (int i = 0; i < data.Length; i++)
                {
                    sBuilder.Append(data[i].ToString("x2"));
                }
                senhaFinal = sBuilder.ToString();
            }

            var usuario = this.usuarioRepository.VerificarExistenciaUsuario(email, senhaFinal);

            if (usuario != null)
            {
                if (usuario.Medico != null)
                {
                    nome = usuario.Medico.Nome;
                    id   = usuario.Medico.IdMedico.ToString();
                }
                else if (usuario.Atendente != null)
                {
                    nome = usuario.Atendente.Nome;
                    id   = usuario.Atendente.IdAtendente.ToString();
                }
                else
                {
                    nome = "Administrador";
                    id   = Guid.Empty.ToString();
                }
                usuarioLogado = new UsuarioLogadoViewModel(id, usuario.Email, nome, usuario.Tipo);
            }

            return(usuarioLogado);
        }
示例#4
0
        private async Task <bool> ValidaTokenGoogle(string idToken, UsuarioLogadoViewModel obj = null)
        {
            try
            {
                ValidationSettings validation = new ValidationSettings()
                {
                    ForceGoogleCertRefresh = true,
                    Audience = null,
                    IssuedAtClockTolerance       = TimeSpan.FromMinutes(5),
                    ExpirationTimeClockTolerance = TimeSpan.FromMinutes(5)
                };

                var resposta = await GoogleJsonWebSignature.ValidateAsync(idToken, validation);

                if (resposta == null)
                {
                    return(false);
                }
                else
                {
                    if (obj != null)
                    {
                        if (resposta.Email != obj.Email)
                        {
                            return(false);
                        }
                    }
                }
            }
            catch (InvalidJwtException error)
            {
                return(false);
            }
            catch (Exception error)
            {
                return(false);
            }

            return(true);
        }
示例#5
0
        private async Task <UsuarioLogadoViewModel> AutenticaComGoogle(UsuarioSocialViewModel login)
        {
            if (login != null)
            {
                var usuario = await _loginServico.VerificaLoginGoogle(login);

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

                if (!usuario.Ativo)
                {
                    return(null);
                }

                if (!usuario.ContaGoogle)
                {
                    return(null);
                }

                try
                {
                    var organizacoes = await _organizacaoService.ListarOrganizacoesUsuarioEmail(usuario.Login);

                    OrganizacaoUsuario organizacaoUsuario = null;

                    if (organizacoes.Any(x => x.UltimaAcessada))
                    {
                        organizacaoUsuario = organizacoes.FirstOrDefault(x => x.UsuarioPlataforma && x.UltimaAcessada);
                    }
                    else
                    {
                        organizacaoUsuario = organizacoes.FirstOrDefault(x => x.UsuarioPlataforma);
                    }

                    var pessoa = await _pessoaRepository.BuscarPorEmail(usuario.Login);

                    if (!usuario.Ativo)
                    {
                        return(null);
                    }

                    UsuarioLogadoViewModel usuarioLogado = null;

                    if (!pessoa.GoobeeAdmin)
                    {
                        if (organizacaoUsuario == null || !organizacaoUsuario.IdUsuario.HasValue)
                        {
                            return(null);
                        }

                        if (organizacaoUsuario.Pessoa == null || organizacaoUsuario.Pessoa.Status == false)
                        {
                            return(null);
                        }

                        List <Guid> idsTimes = new List <Guid>();
                        foreach (var timePessoa in organizacaoUsuario.Pessoa.TimePessoas)
                        {
                            if (timePessoa.IdOrganizacao == organizacaoUsuario.IdOrganizacao)
                            {
                                idsTimes.Add(timePessoa.IdTime);
                            }
                        }

                        usuarioLogado = new UsuarioLogadoViewModel()
                        {
                            DataCriacao   = organizacaoUsuario.Pessoa.DataCriacao,
                            Email         = organizacaoUsuario.Pessoa.Email,
                            Nome          = organizacaoUsuario.Pessoa.Nome,
                            Foto          = organizacaoUsuario.Pessoa.Foto,
                            Id            = organizacaoUsuario.IdUsuario.Value,
                            IdPessoa      = organizacaoUsuario.IdPessoa,
                            IdOrganizacao = organizacaoUsuario.IdOrganizacao,
                            RoleEnum      = organizacaoUsuario.OrganizacaoUsuarioRole.Role,
                            IdsTimes      = idsTimes
                        };
                    }
                    else
                    {
                        Guid?idOrganizacao;

                        if (pessoa.IdUltimaOrgAcessada.HasValue)
                        {
                            idOrganizacao = pessoa.IdUltimaOrgAcessada.Value;
                        }
                        else
                        {
                            idOrganizacao = _organizacaoRepository.GetAll().FirstOrDefault()?.Id;
                        }

                        usuarioLogado = new UsuarioLogadoViewModel()
                        {
                            DataCriacao   = DateTime.Now,
                            Email         = pessoa.Email,
                            Nome          = pessoa.Nome,
                            Foto          = pessoa.Foto,
                            Id            = usuario.Id,
                            IdPessoa      = pessoa.Id,
                            IdOrganizacao = idOrganizacao,
                            RoleEnum      = OrganizacaoUsuarioRoleEnum.GoobeeAdmin,
                            IdsTimes      = new List <Guid>()
                        };
                    }

                    return(usuarioLogado);
                }
                catch (Exception error)
                {
                    return(null);
                }
            }
            return(null);
        }