private Cliente CacheClienteGetByFilters(String register, int idAplicacao) { if (!RedisCacheManager.CannotCache(RedisCacheConstants.Login.KeyLoginClienteGetByFilters)) { var Key = string.Format("{0}:{1}:{2}", RedisCacheConstants.Login.KeyLoginClienteGetByFilters, register, idAplicacao); var ret = RedisCacheManager.GetItemObject <Cliente>(Key); if (ret != null) { return(ret); } else { var cliente = _clienteRepository.GetByFilters(new Cliente { Register = register }, aplicacao: (Aplicacoes)Convert.ToInt32(idAplicacao)) .FirstOrDefault(); RedisCacheManager.SetItemObject(Key, cliente, TimeSpan.FromMinutes(5)); return(cliente); } } else { return(_clienteRepository.GetByFilters(new Cliente { Register = register }, aplicacao: (Aplicacoes)Convert.ToInt32(idAplicacao)) .FirstOrDefault()); } }
private ValidaLoginDTO Login(string identificador, string senha, bool validarSenha, Aplicacoes aplicacao, string versaoApp) { senha = validarSenha ? Utilidades.EncryptionSHA1(senha) : senha; Task <PermissaoInadimplencia> tarefaInadimplencia = null; Task <List <Menu> > menusPermitidos = null; Task <IDictionary <Utilidades.EMenuAccessObject, bool> > tarefaPermissoesRMais = null; IDictionary <Utilidades.EMenuAccessObject, bool> permissoesRMais = new Dictionary <Utilidades.EMenuAccessObject, bool>(); var tarefaVersaoLoja = Utilidades.ObterUltimaVersaoLojaAsync(aplicacao); Cliente pessoa = new Cliente(); var isGolden = false; var alunoMedMedcurso = true; Cliente cliente = new Cliente { Register = identificador }; var dadosBasicos = GetRegisterParaLogin(identificador); if (dadosBasicos != null) { cliente.Register = dadosBasicos.Register; menusPermitidos = ObterPermissoesRecursosAsync(dadosBasicos.ID, versaoApp, aplicacao); } var tipoPessoa = _clienteRepository.GetPersonType(cliente.Register); var isProfessor = (tipoPessoa == Pessoa.EnumTipoPessoa.Professor || tipoPessoa == Pessoa.EnumTipoPessoa.Funcionario); if (tipoPessoa == Pessoa.EnumTipoPessoa.Cliente) { tarefaInadimplencia = VerificaInadimplenciaAsync(cliente.Register, aplicacao); pessoa = _clienteRepository.GetByFilters(cliente, 0, aplicacao).FirstOrDefault(); pessoa.Nome = Utilidades.GetNomeResumido(pessoa.Nome); pessoa.Avatar = pessoa.Avatar; pessoa.Estado = _alunoRepository.GetAlunoEstado(pessoa.ID); } else if (isProfessor) { var funcionario = _funcionarioRepository.GetFuncionariosRecursos(cliente.Register).FirstOrDefault(); pessoa.ID = funcionario.ID; pessoa.Nome = Utilidades.GetNomeResumido(funcionario.Nome); pessoa.Senha = funcionario.Senha; pessoa.RetornoStatus = Cliente.StatusRetorno.Inexistente; var avatarProfessor = string.Concat( Constants.URLDIRETORIOAVATARPROFESSOR, pessoa.ID, ".jpg" ); pessoa.Avatar = Utilidades.VerificaImagemExiste(avatarProfessor) ? avatarProfessor : Constants.LINK_STATIC_AVATAR_PADRAO; } else if (tipoPessoa == Pessoa.EnumTipoPessoa.NaoExiste) { return(ValidaLoginDTO.AlunoInexistente); } if (IsLoginSucesso(tipoPessoa, pessoa.RetornoStatus)) { isGolden = _clienteRepository.UserGolden(cliente.Register, aplicacao) == 1; } if (tipoPessoa == Pessoa.EnumTipoPessoa.Cliente) { tarefaPermissoesRMais = ObterPermissoesRecursosRMaisAsync(menusPermitidos.Result); alunoMedMedcurso = ObterPermissoesRecursosRUm(menusPermitidos.Result); var result = ValidaResultadoLoginCliente(pessoa, senha, validarSenha, isGolden, tarefaInadimplencia); if (result != null) { if (StatusLoginPermiteAcesso(result.Validacao)) { var acessoRmais = tarefaPermissoesRMais.Result; var acessoR1 = alunoMedMedcurso; var acessoRmaisPorInteresse = GanhaPermissaoRMaisPorInteresse(pessoa.ID, acessoR1, acessoRmais); if (acessoRmaisPorInteresse) { acessoRmais = LiberarPermissoes(tarefaPermissoesRMais.Result); } var permissao = ObterHashPermissao( new KeyValuePair <string, object>("matricula", pessoa.ID), new KeyValuePair <string, object>("RMais", acessoRmais), new KeyValuePair <string, object>("RUm", acessoR1) ); result.Versao = ObterDadosVersao(versaoApp, tarefaVersaoLoja.Result, aplicacao); result.Perfil.RUm = acessoR1; result.Perfil.RMais = PossuiPermissaoRecursoRMais(pessoa.ID, acessoR1, acessoRmais); result.Perfil.ProdutoPrincipal = GetNomeProdutoPermissao(acessoRmais); result.Perfil.Hash = Criptografia.CryptAES(permissao); } return(result); } } var senhaGolden = string.Empty; if (isGolden) { senhaGolden = _clienteRepository.ObterSenhaGolden(); senhaGolden = Utilidades.EncryptionSHA1(senhaGolden); } if (validarSenha && senha != pessoa.Senha && (!isGolden || senha != senhaGolden)) { return(ValidaLoginDTO.SenhaInvalida); } var versao = ObterDadosVersao(versaoApp, tarefaVersaoLoja.Result, aplicacao); var permissaoR1 = alunoMedMedcurso; if (isProfessor) { permissoesRMais = LiberarPermissoesRecursosRMaisProfessor(); permissaoR1 = true; } else { permissoesRMais = tarefaPermissoesRMais.Result; } var permiteRMaisPorInteresse = GanhaPermissaoRMaisPorInteresse(pessoa.ID, permissaoR1, permissoesRMais); if (permiteRMaisPorInteresse) { permissoesRMais = LiberarPermissoes(tarefaPermissoesRMais.Result); } var hash = ObterHashPermissao( new KeyValuePair <string, object>("matricula", pessoa.ID), new KeyValuePair <string, object>("RMais", permissoesRMais), new KeyValuePair <string, object>("RUm", permissaoR1) ); return(new ValidaLoginDTO { Validacao = ValidacaoLogin.Sucesso, Versao = versao, Perfil = new PerfilDTO { Matricula = pessoa.ID, Email = pessoa.Email ?? pessoa.Email2 ?? pessoa.Email3, Especialidade = pessoa.Especialidade, Nome = pessoa.Nome, UrlAvatar = pessoa.Avatar, RUm = permissaoR1, RMais = PossuiPermissaoRecursoRMais(pessoa.ID, permissaoR1, permissoesRMais), ProdutoPrincipal = GetNomeProdutoPermissao(permissoesRMais), Estado = pessoa.Estado, Hash = Criptografia.CryptAES(hash) } }); }