コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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)
                }
            });
        }