public AlunoMedsoft GetAcessoAluno(string register, string senha, int idAplicacao, string appVersion, string tokenDevice, int idDevice) { var response = new AlunoMedsoft(); try { var funcionarioEntity = new FuncionarioEntity(); var pessoaEntity = new PessoaEntity(); var cliente = new Cliente(); using (MiniProfiler.Current.Step("Obtendo dados do usuario")) { cliente = CacheClienteGetByFilters(register, idAplicacao); } if (cliente == null || cliente.ID == 0) { SetResponse(false, TipoErroAcesso.CadastroInexistente.GetDescription(), _alunoRepository.GetMensagensLogin(idAplicacao, (int)TipoMensagemMEDSOFT.USUARIO_NAO_CADASTRADO), TipoErroAcesso.CadastroInexistente); return(response); } var aluno = new AlunoMedsoft(); using (MiniProfiler.Current.Step("Obtendo informações do tipo de usuário")) { var golden = _clienteRepository.UserGolden(cliente.Register, Aplicacoes.MsProMobile); var tipoPessoa = pessoaEntity.GetPersonType(cliente.Register); var tipoPerfil = funcionarioEntity.GetTipoPerfilUsuario(cliente.ID); var isExAluno = false; if (!_alunoRepository.IsAlunoPendentePagamento(cliente.ID)) { isExAluno = _alunoRepository.IsExAlunoTodosProdutosCache(cliente.ID); } var tempoInadimplenciaTimeout = new ConfigBusiness(new ConfigEntity()).GetTempoInadimplenciaTimeoutParametro(); aluno = new AlunoMedsoft { ID = cliente.ID, Nome = cliente.Nome.TrimEnd(), NickName = cliente.NickName, Register = cliente.Register.TrimEnd(), Senha = cliente.Senha, Foto = cliente.Foto, FotoPerfil = cliente.FotoPerfil, IsGolden = golden > 0, TipoPessoa = tipoPessoa, TipoPerfil = tipoPerfil, ExAluno = isExAluno, tokenLogin = Util.AuthJWT.GeraJwt(cliente.ID, Constants.doisDiasEmMinutos), TempoInadimplenciaTimeout = tempoInadimplenciaTimeout, LstOrdemVendaMsg = cliente.LstOrdemVendaMsg }; if (aluno.Senha == string.Empty) { SetResponse(false, TipoErroAcesso.SemSenhaCadastrada.GetDescription(), _alunoRepository.GetMensagensLogin(idAplicacao, (int)TipoMensagemMEDSOFT.CADASTRAR_SENHA_MEDSOFTPRO), TipoErroAcesso.SemSenhaCadastrada); return(aluno); } if (!aluno.IsGolden && aluno.Senha != senha) { SetResponse(false, TipoErroAcesso.SenhaIncorreta.GetDescription(), _alunoRepository.GetMensagensLogin(idAplicacao, (int)TipoMensagemMEDSOFT.ACESSO_NEGADO_SENHA_INCORRETA), TipoErroAcesso.SenhaIncorreta); return(aluno); } if (cliente.RetornoStatus == Cliente.StatusRetorno.SemAcesso || cliente.RetornoStatus == Cliente.StatusRetorno.Cancelado) { if (string.IsNullOrEmpty(cliente.MensagemRetorno)) { SetResponse(false, TipoErroAcesso.SemProdutosContratados.GetDescription(), _alunoRepository.GetMensagensLogin(idAplicacao, (int)TipoMensagemMEDSOFT.SEM_PRODUTOS), TipoErroAcesso.SemProdutosContratados); } else { SetResponse(false, cliente.TituloMensagemRetorno, cliente.MensagemRetorno, cliente.ETipoErro); } return(response); } else if (!string.IsNullOrEmpty(cliente.MensagemRetorno)) { SetResponse(true, cliente.TituloMensagemRetorno, cliente.MensagemRetorno, cliente.ETipoErro); } } var produtosPermitidos = new List <Produto.Produtos>(); var produtosContradados = new List <Produto>(); using (MiniProfiler.Current.Step("Obtendo informações de produtos contratados")) { produtosPermitidos = _alunoRepository.GetProdutosPermitidosLogin(idAplicacao); produtosContradados = ProdutoEntity.GetProdutosContratadosPorAnoCache(cliente.ID, false, 0, true, idAplicacao); } var anoLetivoAtual = Utilidades.GetYear(); var anoSeguinte = anoLetivoAtual + 1; var anoAnterior = anoLetivoAtual - 1; var anoAnteriorAntesDataLimite = Utilidades.IsAntesDatalimiteCache(anoAnterior, idAplicacao); var anoDireitoVitalicio = Convert.ToInt32(ConfigurationProvider.Get("Settings:anoComDireitoVitalicio")); var anosPermitidos = new List <int>(); for (var ano = anoDireitoVitalicio; ano <= anoSeguinte; ano++) { anosPermitidos.Add(ano); } if (anoAnteriorAntesDataLimite) { anosPermitidos.Add(anoAnterior); } var hasPermitidos = produtosContradados .Any(p => produtosPermitidos.Contains((Produto.Produtos)p.IDProduto) && anosPermitidos.Contains(p.Ano.Value)); if (!hasPermitidos) { SetResponse(false, TipoErroAcesso.SemProdutosContratados.GetDescription(), _alunoRepository.GetMensagensLogin(idAplicacao, (int)TipoMensagemMEDSOFT.SEM_PRODUTOS), TipoErroAcesso.SemProdutosContratados); return(response); } bool isVersaoBloqueada = string.IsNullOrEmpty(appVersion) ? _configRepository.GetDeveBloquearAppVersaoNulaCache() : new VersaoAppPermissaoBusiness(_versaoAppRepository).IsVersaoBloqueada(appVersion, idAplicacao); if (isVersaoBloqueada) { SetResponse(false, TipoErroAcesso.VersaoAppDesatualizada.GetDescription(), _alunoRepository.GetMensagensLogin(idAplicacao, (int)TipoMensagemMEDSOFT.APLICATIVO_DESATUALIZADO), TipoErroAcesso.VersaoAppDesatualizada); return(response); } var permissaoDevice = new PermissaoDevice(); using (MiniProfiler.Current.Step("Verificando permissões de acesso de usuário")) { permissaoDevice = new AlunoEntity().GetPermissaoAcesso(idAplicacao, aluno.ID, tokenDevice, (Utilidades.TipoDevice)idDevice); aluno.PermiteAcesso = (aluno.IsGolden || permissaoDevice.PermiteAcesso == 1); aluno.PermiteTroca = (!aluno.IsGolden && permissaoDevice.PermiteTroca == 1); } if (!aluno.PermiteAcesso && !aluno.PermiteTroca) { SetResponse(false, TipoErroAcesso.DeviceBloqueado.GetDescription(), _alunoRepository.GetMensagensLogin(idAplicacao, (int)TipoMensagemMEDSOFT.DISPOSITIVO_BLOQUEADO), TipoErroAcesso.DeviceBloqueado); return(response); } if (!aluno.LstOrdemVendaMsg.Any(x => x.PermiteAcesso == 1)) { SetResponse(false, TipoErroAcesso.BloqueadoInadimplencia.GetDescription(), cliente.MensagemRetorno, TipoErroAcesso.BloqueadoInadimplencia); return(response); } LogLogin log = new LogLogin { Matricula = aluno.ID, AplicacaoId = idAplicacao, AcessoId = 0 }; new LogEntity().InsertAcessoLogin(log); SetResponse(true); return(aluno); } catch { throw; } }
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) } }); }