コード例 #1
0
        public static byte[] ConsultarBoletimCertame(int certificadoId, string cpf, DateTime horaAtual)
        {
            var usuario = new BMUsuario().ObterPorCPF(cpf);

            var certificadoUsuario =
                usuario?.ListaUsuarioCertificadoCertame.FirstOrDefault(x => x.CertificadoCertame.ID == certificadoId);

            if (certificadoUsuario == null)
            {
                return(null);
            }

            var repositorioArquivos =
                ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.RepositorioUpload).Registro;

            var boletimPath = string.IsNullOrWhiteSpace(certificadoUsuario.ArquivoBoletim)
                ? null
                : Path.Combine(repositorioArquivos, "BoletinsCertame", certificadoUsuario.ArquivoBoletim);

            // Para certificados de 2014 para trás, gera o certificado na hora.
            // Para 2015 em diante, busca do repositório de PDFs.
            // Também gera o boletim caso não exista ou o arquivo não seja encontrado.
            if (certificadoUsuario.CertificadoCertame.Ano <= 2014 ||
                string.IsNullOrWhiteSpace(certificadoUsuario.ArquivoBoletim) ||
                (boletimPath != null && File.Exists(boletimPath) == false))
            {
                return(GerarBoletim(certificadoUsuario, repositorioArquivos, horaAtual));
            }

            return(File.ReadAllBytes(boletimPath));
        }
コード例 #2
0
ファイル: DrupalUtil.cs プロジェクト: lincoln-alves/sgus
        public static int?SalvaNodeDrupalRest(Dictionary <string, string> postParameters, bool salvarLog = true, BMConfiguracaoSistema bmConfiguracaoSistema = null, BMLogSincronia bmLogSincronia = null, Usuario usuarioLogado = null)
        {
            var basePath = ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.UrlRestPortal, bmConfiguracaoSistema).Registro;

            var pathRestPortal =
                ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.PathRestPortal, bmConfiguracaoSistema).Registro;

            var logSincronia = new LogSincronia
            {
                Usuario      = usuarioLogado ?? new BMUsuario().ObterUsuarioLogado(),
                Sincronizado = false,
                Url          = basePath + pathRestPortal,
                Action       = "import",
                Method       = "POST",
                Acao         = enumAcao.Atualizar
            };

            logSincronia.ListaPostParameters =
                postParameters.Select(
                    p =>
                    new LogSincroniaPostParameters
            {
                LogSincronia = logSincronia,
                Descricao    = p.Value,
                Registro     = p.Key
            }).ToList();

            logSincronia.Hash = logSincronia.HashObj();

            try
            {
                return(NodeDrupalRest(logSincronia, bmConfiguracaoSistema));
            }
            catch
            {
                if (!salvarLog)
                {
                    throw;
                }

                //dll UTIL não tem acesso a camada "BP" Para Evitar "referencing loop detected"
                bmLogSincronia = bmLogSincronia ?? new BMLogSincronia();

                var tmpLogSincronia = bmLogSincronia.ObterPorFiltro(logSincronia);

                if (tmpLogSincronia != null && tmpLogSincronia.Sincronizado)
                {
                    return(null);
                }

                bmLogSincronia.Salvar(logSincronia);

                return(null);
            }
        }
コード例 #3
0
ファイル: DrupalUtil.cs プロジェクト: lincoln-alves/sgus
        public static void RemoverNodeDrupalRest(int id, bool salvarLog = true)
        {
            var basePath       = ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.UrlRestPortal).Registro;
            var pathRestPortal =
                ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.PathRestPortal).Registro;
            var logSincronia = new LogSincronia
            {
                Usuario      = (new BMUsuario()).ObterUsuarioLogado(),
                Sincronizado = false,
                Url          = basePath + pathRestPortal,
                Action       = "delete",
                Method       = "POST",
                Acao         = enumAcao.Remover
            };
            var postParameters = new Dictionary <string, string>
            {
                { "node_id", id.ToString() }
            };

            logSincronia.ListaPostParameters =
                postParameters.Select(
                    p =>
                    new LogSincroniaPostParameters
            {
                LogSincronia = logSincronia,
                Descricao    = p.Value,
                Registro     = p.Key
            }).ToList();
            logSincronia.Hash = logSincronia.HashObj();

            try
            {
                NodeDrupalRest(logSincronia);
            }
            catch (Exception)
            {
                if (!salvarLog)
                {
                    throw;
                }

                //dll UTIL não tem acesso a camada "BP" Para Evitar "referencing loop detected"
                var bmLogSincronia = new BMLogSincronia();

                var tmpLogSincronia = bmLogSincronia.ObterPorFiltro(logSincronia);

                if (tmpLogSincronia != null && tmpLogSincronia.Sincronizado)
                {
                    return;
                }

                bmLogSincronia.Salvar(logSincronia);
            }
        }
コード例 #4
0
        public static int?DrupalRestRequest(string baseUrl, string action, string method = "GET",
                                            Dictionary <string, string> postParameters   = null, bool isRetry = false, BMConfiguracaoSistema bmConfiguracaoSistema = null)
        {
            var session =
                ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.SessionRestPortal, bmConfiguracaoSistema).Registro.Split('=');
            var csrfConfig = ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.CSRFRestPortal, bmConfiguracaoSistema);
            var csrf       = csrfConfig.Registro.Split('=');

            // Header Parameters
            var headerParameters = new Dictionary <string, string>
            {
                { csrf[0], csrf[1] },
                { "Cookie", session[0] + "=" + session[1] }
            };

            // Importa o tipo de conteúdo para o Drupal
            try
            {
                var result = GetJson <DTOJsonResultDrupalImportNode>(baseUrl + action, method, postParameters,
                                                                     headerParameters);

                if (result.error_msg != null)
                {
                    throw new AcademicoException(result.error_msg);
                }
                return(result.node_id);
            }
            catch (WebException ex)
            {
                // Se for a segunda tentativa e ocorreu algum erro desiste
                if (isRetry)
                {
                    throw new AcademicoException(
                              "Não foi possível salvar/atualizar a categoria entre em contato com o suporte técnico." +
                              ex.Message);
                }

                var url        = baseUrl;
                var statusCode = (int)((HttpWebResponse)ex.Response).StatusCode;

                // A sessão caiu ou CSRF não é mais válido refaz amabas
                if (statusCode != 403 && statusCode != 401)
                {
                    throw new AcademicoException("Código de erro " + statusCode +
                                                 " não tratado. Favor entrar em contato com o suporte.");
                }

                bmConfiguracaoSistema = bmConfiguracaoSistema ?? new BMConfiguracaoSistema();

                // Pega um token válido para usuários anonimos
                var token = requestNewDrupalAnonymousCSRF(baseUrl);

                // Pega a configuração do Cookie de sessão no banco
                var confSession = bmConfiguracaoSistema.ObterPorID((int)enumConfiguracaoSistema.SessionRestPortal);

                var postUserLoginParameters = new Dictionary <string, string>
                {
                    {
                        "username",
                        ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.UsuarioRestPortal, bmConfiguracaoSistema).Registro
                    },
                    {
                        "password",
                        ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.PasswordRestPortal, bmConfiguracaoSistema).Registro
                    }
                };

                var headerLoginParameters = new Dictionary <string, string>
                {
                    { "X-CSRF-Token", token }
                };

                var sessionUrl = baseUrl + "user/login";

                // Pega o Cookie de login
                try
                {
                    // Realiza o login e pega session id, session name e token logado
                    var sessionJson = GetJson <DTOJsonResultDrupalSession>(sessionUrl, "POST", postUserLoginParameters,
                                                                           headerLoginParameters);
                    confSession.Registro = sessionJson.session_name + "=" + sessionJson.sessid;
                    bmConfiguracaoSistema.Salvar(confSession);

                    // Atualiza o CSRF com o token de login
                    csrfConfig.Registro = "X-CSRF-Token=" + sessionJson.token;
                    bmConfiguracaoSistema.Salvar(csrfConfig);
                }
                catch (WebException t)
                {
                    throw new AcademicoException(
                              "Falha no login no portal. Verifique se as configurações do sistema Usuario e Senha Rest Portal. Endpoint: " +
                              sessionUrl + "\n" + t.Message);
                }

                // Chama o método original novamente flaged as isRetry
                return(DrupalRestRequest(url, action, method, postParameters, true, bmConfiguracaoSistema));
            }
        }
コード例 #5
0
        public static byte[] ConsultarCertificadoCertame(int certificadoId, string cpf)
        {
            var usuario = new BMUsuario().ObterPorCPF(cpf);

            if (usuario == null)
            {
                return(null);
            }

            var certificadoUsuario =
                usuario.ListaUsuarioCertificadoCertame.FirstOrDefault(x => x.CertificadoCertame.ID == certificadoId);

            if (certificadoUsuario == null)
            {
                return(null);
            }

            var certificado = certificadoUsuario.CertificadoCertame;

            // Removendo caracteres especiais que travam no chrome.
            certificado.Certificado.NomeDoArquivoOriginal =
                RemoverCaracterEspecial(certificado.Certificado.NomeDoArquivoOriginal);

            // Create the output document
            var outputDocument = new PdfDocument {
                PageLayout = PdfPageLayout.TwoPageLeft
            };

            var font   = new XFont("Verdana", 13);
            var format = new XStringFormat
            {
                Alignment     = XStringAlignment.Center,
                LineAlignment = XLineAlignment.Center
            };

            try
            {
                var repositorioUpload =
                    ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.RepositorioUpload).Registro;
                var filePath = string.Concat(repositorioUpload, @"\", certificado.Certificado.NomeDoArquivoNoServidor);

                using (var ms = new MemoryStream())
                {
                    using (
                        var file =
                            new FileStream(
                                filePath,
                                FileMode.Open,
                                FileAccess.Read
                                )
                        )
                    {
                        var bytes = new byte[file.Length];
                        file.Read(bytes, 0, (int)file.Length);
                        ms.Write(bytes, 0, (int)file.Length);
                    }

                    // Por alguma bizarrice, tem que recriar o Stream.
                    var form = XPdfForm.FromStream(new MemoryStream(ms.ToArray()));

                    // Escrever FRENTE do certificado.
                    EscreverFrente(outputDocument, form, certificadoUsuario, font, format);

                    // Escrever VERSO do certificado.
                    EscreverVerso(outputDocument, form, certificadoUsuario, font, format);

                    var streamOutput = new MemoryStream();
                    outputDocument.Save(streamOutput, false);

                    return(streamOutput.ToArray());
                }
            }
            catch
            {
                return(null);
            }
        }