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)); } }
//[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)); }
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); }
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); }
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); }