/// <summary> /// Responsável por efetuar o login do usuário na aplicação /// </summary> /// <param name="login"> Usuário de autenticação</param> /// <param name="senha"> Senha do usuário para autenticação</param> /// <returns>Informações básicas para autenticar o usuário</returns> public UsuarioAutenticado Login(string login, string senha) { var entidadeLocalizada = _dbContext.Usuarios.Where(data => data.Login.Equals(login, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault(); if (entidadeLocalizada == null) { throw new RegistroNaoEncontradoException("Usuário não localizado."); } JavaScriptSerializer js = new JavaScriptSerializer(); byte[] SaltDeSerializado = js.Deserialize <byte[]>(entidadeLocalizada.Salt); Salt _Salt = new Salt(_LengthSalt); byte[] _senha = _Salt.GenerateDerivedKey(_LengthSalt, Encoding.UTF8.GetBytes(senha), SaltDeSerializado, 5000); if (entidadeLocalizada.Senha != _Salt.getPassword(_senha)) { throw new RegistroNaoEncontradoException("Usuário não localizado."); } if ((!entidadeLocalizada.Verificado.HasValue) && (!entidadeLocalizada.Verificado.Value)) { throw new UsuarioNaoVerificadoException("Usuário não verificado."); } if ((entidadeLocalizada.Bloqueado.HasValue) && (entidadeLocalizada.Bloqueado.Value)) { throw new UsuarioBloqueadoException("Usuário bloqueado."); } if (entidadeLocalizada.DataCancelamento.HasValue) { throw new RegistroNaoEncontradoException("Usuário cancelado."); } return(new UsuarioAutenticado() { ID = entidadeLocalizada.ID, Nome = entidadeLocalizada.Nome, Email = entidadeLocalizada.Email, Claim = entidadeLocalizada.Claim, TimeZone = entidadeLocalizada.TimeZone }); }
/// <summary> /// Responsável por efetuar o registro de novos usuários na aplicação /// </summary> /// <param name="entidade"> Entidade contendo informações do novo usuário à ser registrado</param> public void Registrar(Usuario entidade) { try { var entidadeLocalizada = _dbContext.Usuarios.Where(data => data.Login.Equals(entidade.Login, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault(); if (entidadeLocalizada != null) { throw new RegistroDuplicadoException("Usuário já existe na aplicação"); } Salt _Salt = new Salt(_LengthSalt); JavaScriptSerializer js = new JavaScriptSerializer(); byte[] SaltDeSerializado = _Salt.GenerateSalt(); string SerializeSalt = js.Serialize(SaltDeSerializado); byte[] result = _Salt.GenerateDerivedKey(_LengthSalt, Encoding.UTF8.GetBytes(entidade.Senha), SaltDeSerializado, 5000); entidade.Login = entidade.Email; entidade.Senha = _Salt.getPassword(result); entidade.Salt = SerializeSalt; entidade.Claim = "USER"; if (string.IsNullOrWhiteSpace(entidade.TimeZone) && (HelpTimeZone.IsIDUTCValid(entidade.TimeZone))) { entidade.TimeZone = HelpTimeZone.RecuperarIDTimeZonePadrao(); } entidade.Bloqueado = true; entidade.DataInclusao = DateTime.UtcNow; entidade.DataBloqueio = DateTime.UtcNow; entidade.Verificado = false; _dbContext.Usuarios.Add(entidade); _dbContext.SaveChanges(); entidade.UsuarioInclusao = entidade.ID; _dbContext.SaveChanges(); } catch (DbEntityValidationException ex) { var st = new StringBuilder(); ex.EntityValidationErrors.ToList().ForEach(errs => errs.ValidationErrors.ToList().ForEach(err => st.AppendLine(err.ErrorMessage))); //TODO AJUSTAR O EXCEPTION DO RETORNO throw new Exception(st.ToString(), ex); } }