Beispiel #1
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));
            }
        }
Beispiel #2
0
 public void IncluirConfiguracaoSistema(ConfiguracaoSistema pConfiguracaoSistema)
 {
     bmConfiguracaoSistema.Salvar(pConfiguracaoSistema);
 }