예제 #1
0
        private async Task <bool> sendError(Dictionary <string, string> parameters, string idUser, string error)
        {
            bool resultado = false;

            try
            {
                //cargamos el servlet de storage para almacenar la operacion de cancelacion
                string rsServlet       = null;
                bool   rsServletLoaded = parameters.TryGetValue(ConstantsAfirmaMetro.SERVLET_STORAGE, out rsServlet);
                if (!rsServletLoaded)
                {
                    AfirmaMetroUtils.showMessageAndClose(labels.GetString("Iniciar_aplicacion_adecuado"), "TITULO");
                }

                // Asegurarse de que la ventana actual está activa.
                string result = await AfirmaMetroUtils.SendErrorServlet(rsServlet, idUser, error);

                //Se trata la respuesta del servidor.
                if (result.Equals("OK"))
                {
                    AfirmaMetroUtils.showMessageAndClose(labels.GetString("Error_cancelled_opperation"), "TITULO");
                    resultado = true;
                }
                else
                {
                    AfirmaMetroUtils.showMessageAndClose(labels.GetString("Error_communicating_with_web") + ".\n" + labels.GetString("Info_regreso_navegador"), "TITULO");
                }
            }
            catch (WebException)
            {
                AfirmaMetroUtils.showMessageAndClose(labels.GetString("Error_communicating_with_web") + ".\n" + labels.GetString("Info_regreso_navegador"), "TITULO");
            }
            return(resultado);
        }
예제 #2
0
        /// <summary>
        /// Método que se ejecuta cuando se pulsa el botón de firma. Genera la propia firma
        /// y la manda al servidor.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void Button_Sign_Click(object sender, RoutedEventArgs e)
        {
            DisableComponents();
            if (!aliasList.SelectedItem.Equals(labels.GetString("Etiqueta_seleccion_alias")))
            {
                //Obtenemos la firma de los datos.
                byte[] firma   = null;
                bool   isError = false;
                try
                {
                    firma = CriptoManager.getCades(
                        signParameters.GetData(),
                        this.rsaKeyParameter,
                        store.GetCertificate((string)aliasList.SelectedItem).Certificate.GetEncoded(),
                        signParameters.GetSignatureAlgorithm(),
                        signParameters.GetSignatureFormat()
                        );
                }
                catch
                {
                    // Se produce un error en la operación de firma.
                    isError = true;
                }
                // Se informa sobre el error de la firma.
                if (isError)
                {
                    try
                    {
                        await AfirmaMetroUtils.SendErrorServlet(
                            signParameters.GetStorageServletUrl().ToString(),
                            signParameters.GetContentId(),
                            ConstantsAfirmaMetro.ERROR_SIGNING + ConstantsAfirmaMetro.ERROR_SEPARATOR + ConstantsAfirmaMetro.DESC_ERROR_SIGNING
                            );
                    }
                    finally
                    {
                        AfirmaMetroUtils.showMessageAndClose(labels.GetString("Info_operacion_finalizada"), "Error en la firma electrónica");
                    }
                }

                // Se cifran los datos
                bool isErrorCiphering = false;
                int  firmaSize        = firma.Length;
                try
                {
                    firma = CriptoManager.getDES(firma, signParameters.GetCipherKey());
                }
                catch
                {
                    isErrorCiphering = true;
                }
                if (isErrorCiphering)
                {
                    try
                    {
                        await AfirmaMetroUtils.SendErrorServlet(
                            signParameters.GetStorageServletUrl().ToString(),
                            signParameters.GetContentId(),
                            ConstantsAfirmaMetro.ERROR_INVALID_CIPHER_KEY + ConstantsAfirmaMetro.ERROR_SEPARATOR + ConstantsAfirmaMetro.DESC_ERROR_INVALID_CIPHER_KEY
                            );
                    }
                    finally
                    {
                        AfirmaMetroUtils.showMessageAndClose(labels.GetString("Info_operacion_finalizada"), "Operación finalizada correctamente (1)");
                    }
                }

                //Se envian los datos al servidor y se espera su respuesta.
                try
                {
                    int    padding  = (8 - firmaSize);
                    string response = AsyncHelpers.RunSync <string>(() => AfirmaMetroUtils.SendDataServlet(
                                                                        signParameters.GetStorageServletUrl().ToString(),
                                                                        signParameters.GetContentId(),
                                                                        firma,
                                                                        padding
                                                                        ));
                    //Se trata la respuesta del servidor.
                    if (response.Equals("OK"))
                    {
                        if (signParameters.IsWindowsNewUi())
                        {
                            try
                            {
                                AfirmaMetroUtils.showMessageAndClose("La operación ha finalizado correctamente.\nPara continuar, vuelva al navegador desde el que inició la operación (interfaz 'moderno' de Windows).", "Operación finalizada correctamente");
                            }
                            catch (Exception)
                            {
                                Application.Current.Exit();
                            }
                        }
                        else
                        {
                            AfirmaMetroUtils.showMessageAndClose("La operación ha finalizado correctamente.\nPara continuar, vuelva al navegador desde el que inició la operación (escritorio clásico de Windows).", "Operación finalizada correctamente");
                        }
                    }
                    else
                    {
                        AfirmaMetroUtils.showMessageAndClose(labels.GetString("Error_communicating_with_web") + ".\n" + labels.GetString("Info_regreso_navegador"), "TITULO");
                    }
                }
                catch (WebException)
                {
                    AfirmaMetroUtils.showMessageAndClose(labels.GetString("Error_communicating_with_web") + ".\n" + labels.GetString("Info_regreso_navegador"), "TITULO");
                }
            }
            EnableComponents();
        }